RPG Saga Engine Manual

Version 0.1.0

2026-10-06

1. Introduction

In short: RPG Saga Engine is a framework for role-playing games in Unreal Engine 5.8: battles in several modes, characters, abilities, items, exploration, dialog, quests, saves and an enemy AI, all driven by data you author in the editor. You make a game with its tools, mostly without code or Blueprints. This chapter says what is in the box, how the plugin is organised, and how to read the rest of the manual.

1.1 Basics

1.1.1 What the plugin is

RPG Saga Engine gives you the systems a JRPG or a tactical RPG needs, and the editor tools to fill them with your own content:

Everything you make is ordinary Unreal data: Data Assets, Data Tables and Project Settings. You can open it, edit it, version it, import it from spreadsheets or script it.

1.1.2 Who it is for

You do not need to write code to make a complete game. You need to know the Unreal editor: how to open a project, use the Content Browser, press Play and edit a Details panel.

1.1.3 The four layers of a game

The Studio organises making a game in four layers, from the bottom up. Each layer builds on the one below, and the included starter set already fills the lower ones, so you can start at any layer.

LayerWhat it holds
1. Game foundationThe rules everything stands on: the words the game uses, stats and resources, battle formulas, elements, equipment slots, the battle menu, battle modes, progression and money.
2. ArchetypesTemplates you make content from: hero classes, enemy types, NPC types, ability and item families.
3. ContentWhat the player meets: characters, enemies, abilities, items, dialogs, quests.
4. WorldWhere it happens: battle zones, populated areas, save points, the map, battles.

Chapter Game foundation and archetypes covers the first two layers. Later chapters cover content and world systems one by one.

1.2 How it works

1.2.1 Logic and presentation are separate

The plugin is split into modules, and the compiler enforces one rule: rules and state never depend on presentation. All game logic (battle rules, grids, pathfinding, abilities, items, AI, conditions and effects, story state, save structures) lives in a module with no actors, no widgets and no input. Because of this a battle can run headless, with no window and no rendering. The battle simulator, the balance tools and the automated tests all rely on it.

Presentation (actors, camera, input, UI, the world) sits on top and talks to the rules through events (delegates) and commands. Chapter Core concepts explains this in practice.

1.2.2 The modules

ModuleTypeWhat it containsDepends on
RSECoreRuntimeData assets, tags, settings, state and rules: battle in every mode, grid and pathfinding, abilities, items, AI, conditions and effects, narrative state, quests, economy, growth, the command bus and the save structures. No actors, components, UI, rendering or input.Engine base modules, GameplayTags
RSERuntimePresentation and world: actors and pawns, camera, input, debug drawing, UI screens and HUDs, exploration in the world, and the orchestration of save and load.RSECore
RSEEditorEditorStudio, Configurator, wizards, importers, visual editors (dialog, quest, growth board), validation, world tools, balance tools. Never part of a packaged game.RSECore, RSE
RSENetRuntimeThe co-op transport: carries commands to the host and replicates state sections to guests.RSECore, RSE, RSEOnline
RSEOnlineRuntimeSessions and lobbies on LAN, Steam or Epic Online Services, resolved at run time through Online Subsystem.RSECore, RSE
RSEGASRuntimeOptional bridge: characters built on the Gameplay Ability System fight in RSE battles. Inactive until an actor has the bridge component.RSECore, RSE, Gameplay Abilities
RSEGASEditorEditorExport tools for the GAS bridge.RSECore, RSEGAS
RSEStateTreeRuntimeOptional StateTree nodes that ask the utility AI, carry out its actions, keep a range and start battles. Nothing runs until a tree uses them.RSECore, RSE, StateTree
RSEStateTreeEditorEditorEditor support for those nodes.RSEStateTree
RSECommonUIRuntimeOptional Common UI host: pushes the plugin's screens onto your Common UI layer stacks. Off by default.RSECore, RSE, Common UI

The boundaries are strict:

1.2.3 Where things live on disk

1.2.4 What the plugin turns on for you

The plugin enables the engine plugins it needs: Enhanced Input, Niagara, Animation Warping (optional), IK Rig (editor only), Online Subsystem and its utilities, Gameplay Tags Editor (editor only), and for the optional bridges Gameplay Abilities, StateTree, Gameplay StateTree and Common UI. None is Beta or Experimental. The plugin targets Windows (Win64) and Unreal Engine 5.8.

1.3 How to read this manual

The chapters go from the general to the specific.

  1. Installation and your first project gets the plugin running and a playable slice open.
  2. Core concepts explains the ideas every other chapter uses: data-driven content, settings, rules profiles, tags, events, saved state and validation. Read it before the system chapters.
  3. Systems (foundation, characters, progression, abilities, items, battles, AI, story, exploration, world, visuals, UI, save, networking and so on) each follow the same shape. Chapter Game foundation and archetypes starts the series.
  4. Reference chapters (Editor tools, Extending the plugin, Troubleshooting and FAQ, the Glossary) and four generated appendices complete the book.

Every system chapter has the same sections: Basics (the idea and a first working example using the editor), How it works, Key classes and assets, Settings, Blueprint usage, C++ usage, Advanced and Troubleshooting. If you only want to make a game, read Basics and Settings and skim the rest. If you extend the plugin, read Advanced and C++ usage.

The generated appendices are produced from the code, so they are always current:

1.3.1 Conventions

1.4 Key classes and assets

You will meet these first. Each has its own chapter.

Class / assetModuleRole
URSEGameFoundationRSECoreThe rule book of your game, applied into the project's settings.
URSEArchetype (and its kinds)RSECoreTemplates that content follows.
URSECharacterData, URSEClassDataRSECoreA character and its fixed class.
URSEPartySubsystemRSECoreThe party's state for the whole session.
URSEAbilityData, URSEItemDataRSECoreOne ability or item; works in every battle mode.
URSEEncounterDataRSECoreOne battle: its mode, enemies, rewards and rules.
URSERulesProfileRSECoreA set of rule overrides for a zone, a boss or a chapter.
URSEDeveloperSettingsRSECoreBase of every settings page under Project Settings → RPG Saga Engine.
URSECommandSubsystemRSECoreThe command bus: the one path by which player actions change state.

1.5 Troubleshooting

1.6 See also

2. Installation and your first project

In short: Install the plugin (from Fab or by hand), enable it, and either open the Starter project or run Set up the project in RPG Saga Studio. In about 45 minutes you will have a playable slice, a character of your own and a battle you made yourself. This chapter walks through every step and tells you where each window is.

2.1 Basics

2.1.1 What you need

The plugin turns on the engine plugins it needs by itself (see Introduction).

2.1.2 Step 1: install the plugin

From Fab (recommended).

  1. In the Epic Games Launcher, open your Fab Library, find RPG Saga Engine and choose Install to Engine, then pick 5.8.
  2. The launcher copies the compiled plugin into the engine's plugin folder (Engine/Plugins/Marketplace). It is then available to every 5.8 project on the computer.

By hand (a zip or a source copy). Copy the RPGSagaEngine folder into your project's Plugins folder (create the folder next to the .uproject if it does not exist). A copy without a Binaries folder must be compiled: the project has to be a C++ project and you need Visual Studio 2022 with the Game development with C++ workload. When the editor offers to rebuild the missing modules, answer Yes.

Install the plugin once: either in the engine (Fab) or in the project's Plugins folder, not both.

2.1.3 Step 2: enable it

  1. Open your project.
  2. Edit → Plugins, type RPG Saga in the search box, tick RPG Saga Engine.
  3. Press Restart Now.

After the restart you should see:

The RPG Saga Engine menu is short on purpose:

EntryWhat it does
StudioOpens RPG Saga Studio, where you make your game.
ConfiguratorEvery setting of the framework in one window, grouped and searchable.
Validate All DataChecks every setting and data asset; the results open in the Message Log.
HelpOpens the documentation.
Advanced toolsEvery other tool, in sections: Project Setup (Configurator, New RPG Project..., Install UE Mannequin Kit), Content (Import Character Pack..., Create New), World (Encounter Layout Mode, Open Example Map), Balance, and Check and Help.

2.1.4 Step 3: the fast way, the Starter project

If you downloaded the Starter project from the product page, unzip it, install the plugin (Step 1), open the project and press Play. It is a blank Blueprint-only project with a tiny playable game already made by the plugin's own tools: a village with people living their daily routines, a trader, a save point, an elder who gives a quest, a house you can enter, and one battle of every mode (grid Tactics, free-movement Tactics, active-time, turn-based at a gate, and a real-time Action arena).

The zip contains neither the plugin (it comes from Fab) nor the engine's mannequin (it comes from your own engine; the first item of the First steps list installs it).

The first time you open the project, RPG Saga Studio opens by itself with a First steps list at the top of its start page:

#StepDo itTicks by itself when
1Install the mannequincopies the engine's mannequin and the plugin's animation kitthe kit is in the project
2Choose a foundationopens the foundation wizarda foundation preset is applied
3Choose a UI styleopens the UI Styles pagethe project sets its own default style
4Play the sliceopens the starter map and plays ityou played a map of the starter project
5Create a characteropens the New Character wizardthe project has a character the starter did not make
6Create a battleopens the New Battle pagethe project has a battle the starter did not make
7Scan an asset pack for interiorsopens the kit wizardthe project has an interior kit
8Translate with AIopens the Configurator at Content Importa translated language exists
9Read Getting Startedopens the documentationyou opened it from the list

Hide this list removes it from the start page, and Show the first steps brings it back. Nothing in it is required.

Making a Starter project yourself. Any project with the plugin can generate the same slice with the New RPG Project commandlet:

UnrealEditor-Cmd.exe <Project>.uproject -run=RSENewProject -Root=/Game/Starter -Genre=Hybrid -Slice=Starter
    [-Foundation=Tactics] [-UIStyle=<style id>] [-NoKit]

-Foundation applies a foundation preset (its UI style becomes the default), -UIStyle picks the default UI style by its id, and -NoKit leaves the mannequin out. -DryRun prints the plan without writing anything. The people, shop, house and battle sites of the slice are listed in Project Settings → RPG Saga Engine → Starter Project, so you can change what it contains.

2.1.5 Step 4: see what the framework does (optional)

Before you build anything, play the plugin's own example:

  1. RPG Saga Engine → Advanced tools → Open Example Map (or the Learn panel on the right of the Studio). The map is /RPGSagaEngine/Examples/Maps/L_RSE_StarterExample.
  2. Press Play. Walk with WASD or the left stick, interact with E or the bottom face button.

The map is the first zone of the starter set: a guide explains the map, a quartermaster recruits the other starter heroes, a trader sells gear, the tall grass starts random classic battles, a patrol roams the field, a Tactics battlefield hosts the zone's key battle, and a boss waits at the far end. Characters are placeholder shapes until you install a body (next step). That is expected.

To browse the plugin's own assets, turn on Content Browser → Settings → Show Plugin Content. They are under RPG Saga Engine Content. They are templates: the Studio never changes them and offers Create a copy in the project instead.

2.1.6 Step 5: tour of RPG Saga Studio

Open RPG Saga Engine → Studio (or the Studio toolbar button).

The start page shows your game in four layers (see Introduction). Each card opens a short wizard or tool inside the Studio, and Back to the Studio (bottom left) returns to the start page.

LayerCards
1. Game foundationConfigure the foundation, Set up the project, Change the preset, Progression system, Formula tester, All settings (the Configurator).
2. ArchetypesNew class, New enemy type, New NPC type, Growth board, Archetype library.
3. ContentNew character, New enemy, New ability, New item, New dialog, New quest, New teacher, Weapon with mastery.
4. WorldNew battle zone, Populate a zone, Save point, Generate the map, New battle, New action battle.

On the right of the page:

In a new project with no foundation applied, a blue banner says New project? Start with the foundation. You can ignore it; the starter set works as it is.

Explanations. The Explanations switch in the Studio's top right corner has three levels: Beginner (the default: a "Why it matters" panel on every page, tooltips and ? buttons), Normal (tooltips and ? buttons) and Expert (the bare fields). A ? button opens the documentation page for its field. The texts live in the data table DT_RSE_StudioHelp (Project Settings → RPG Saga Engine → Studio → Help Table), so they are translated with the rest of the plugin.

2.1.7 Step 6: set up your project

  1. In the Studio, 1. Game foundation → Set up the project. (The same wizard is at RPG Saga Engine → Advanced tools → New RPG Project....)
  2. Choose:
    • the content root, the folder for everything the wizard creates, for example /Game/MyRPG;
    • the genre preset: JRPG (ATB), Turn-based (rounds), Turn-based (CTB), Tactics only or Hybrid (Tactics + classic). It sets the default rules and the kinds of battle your first map gets;
    • the theme, the visual style, the languages, and whether the new maps become the project's startup maps;
    • Start From Example Map (optional): your first map becomes a copy of the example zone;
    • Copy Starter Content (optional): your own editable copy of the starter set;
    • Install Mannequin Kit: leave it ticked. It copies the UE5 mannequin from your engine's templates and gives the starter characters real bodies and animations. (Later: Advanced tools → Install UE Mannequin Kit.)
  3. Read the plan on the right: every asset it will create and every setting it will change. Nothing is written yet.
  4. Press Apply, then Open start map.

You now have a main menu map and a first map with a Player Start, a save point, an NPC who talks and battle sites for your genre, plus a starting party. Everything is in your own folders and in your Config/Default*.ini. Nothing is written into the plugin, and the new content validates clean.

Press Play. The first time a system appears (the first battle, the time gauges, the rows), a short tutorial card explains it and pauses the game until you page through it. Each card shows once per save, and they can be turned off in the game's Options.

2.1.8 Step 7: pick a foundation preset

The foundation is the rule book of your game. You can keep the starter rules, or start from another genre:

  1. 1. Game foundation → Configure the foundation.
  2. Choose a starting preset (see Game foundation and archetypes).
  3. Press Next through the pages. Each has a live preview on the right and Use recommended values.
  4. On Summary and Apply, press Check my project (changes nothing), then Apply.

Nothing is written before Apply. You can come back and change the preset at any time with Change the preset.

2.1.9 Step 8: make your first character

  1. 3. Content → New character. A live 3D preview turns on at the right.
  2. Who is it? Type a name, choose Hero.
  3. Start from: pick a hero class archetype, for example Paladin.
  4. How does it look? Keep the look, or pick one you imported.
  5. Which class? Confirm the class and the starting level.
  6. What can it do? The abilities by level; leave them as they are.
  7. Where does it appear? Choose In the starting party.
  8. Summary and Create, then Open the character sheet. The sheet shows everything about the character on one page, with Test in battle: a few quick simulated battles that tell you the win rate without opening a level.

Characters and party explains what you just made.

2.1.10 Step 9: make your first battle and play it

  1. Open the first map. In the viewport, look at an open, flat piece of ground near the Player Start: the battle is placed in front of the camera.
  2. 4. World → New battle. Choose the battle mode (for example Tactics), add one or two enemies, read the estimated difficulty (aim for Fair), set rewards, and under Where it happens choose A Tactics zone.
  3. Create, then Test now for a quick simulated check. Undo (Ctrl+Z) removes what was placed.
  4. Save the level (Ctrl+S) and press Play. Walk into the battle site. The world turns into a grid on the ground. Place your units on the blue tiles and start. Moving and acting both cost Action Points, in any order.

You have made a playable RPG battle without code.

2.1.11 Step 10: check your work

RPG Saga Engine → Validate All Data checks every setting, rules profile and data asset. The results open in the Message Log under RPG Saga Engine Validation. Run it before you package and whenever something behaves strangely.

2.2 How it works

2.3 Key classes and assets

Class / assetModuleRole
URSENewProjectCommandletRSEEditorThe Set up the project wizard without its window (-run=RSENewProject).
URSEWizardSettingsRSEEditorProject Settings → RPG Saga Engine → Wizards: genre presets, example map, starter folders.
URSEStarterSliceSettingsRSEEditorProject Settings → RPG Saga Engine → Starter Project: the contents of the starter slice.
URSEStudioSettingsRSEEditorProject Settings → RPG Saga Engine → Studio: help table, previews, role fields.
/RPGSagaEngine/Examples/Maps/L_RSE_StarterExamplecontentThe example map: zone 1 of the starter set.
/RPGSagaEngine/Data/Foundation/DA_Foundation_*contentThe foundation presets.

2.4 Settings

WhereWhat
Editor Preferences → Plugins → RPG Saga StudioExplanation level, open sheets on double-click, open the Studio at startup.
Project Settings → RPG Saga Engine → WizardsGenre presets, theme presets, the example map, the starter content folders, the starter map layout.
Project Settings → RPG Saga Engine → Starter ProjectThe people, shop, house and battle sites of the Starter slice.
Project Settings → RPG Saga Engine → StudioThe help table, the test battle used by Test in battle, the 3D preview and role-field rules.

The full lists are in Appendix B.

2.5 Blueprint usage

The setup tools are editor tools and need no graph. In your own game graphs, two nodes are useful on day one:

Example: show a Quests button only when quests are on.

  1. In your widget, Event Construct.
  2. Is Feature Enabled with Feature = Quests.
  3. Set Visibility of the button from the result (Visible or Collapsed).

See Appendix A for every node.

2.6 C++ usage

A C++ project that uses plugin classes adds the modules to its Build.cs:

PublicDependencyModuleNames.AddRange(new string[] { "RSECore", "RSE" });
// Add "RSEGAS", "RSEStateTree" or "RSECommonUI" only if you use those optional bridges.

Then include headers by their domain folder, for example Characters/RSEPartySubsystem.h. Never add RSEEditor to a game module that ships in a packaged build.

2.7 Advanced

2.8 Troubleshooting

SymptomCauseFix
No RPG Saga Engine menuThe plugin is not enabled, or failed to loadEdit → Plugins, tick it, restart. Check the Output Log for LogPluginManager and RSE.
"Missing or built with a different engine version"The copy has no binaries for this engineInstall from Fab with Install to Engine, or rebuild in a C++ project with Visual Studio 2022.
The plugin loads twice or behaves oddlyInstalled both in the engine and in the projectRemove one copy and restart.
The Studio does not open at startupThe setting is off, or the run is unattendedUntick Don't show at startup in the Studio, or set Open Studio At Startup in Editor Preferences. Use the toolbar button.
Characters are grey placeholder shapesNo body is installedAdvanced tools → Install UE Mannequin Kit, or import a character pack.
The wizard says there is no UE5 mannequinThe engine templates are not installedIn the editor, Add Feature or Content Pack → Third Person, then run the wizard or the kit again.
A tool the manual mentions is not in the menuSome tools show only in contextSee Editor tools; for example Encounter Layout appears when a Tactics zone or ATB stage is selected.

2.9 See also

3. Core concepts

In short: A handful of ideas explain how the whole plugin works: content is data, rules are settings, state is plain serializable data, logic is separate from presentation, and everything is checked by validation. Learn them once here and every other chapter will read the same way.

3.1 Basics

3.1.1 Content is data

Everything a player meets in an RPG Saga Engine game (a class, a character, an ability, an item, an enemy group, a dialog, a quest) is a data asset you create in the Content Browser or with a Studio wizard. New content means new data, not new code or new Blueprints.

Data assets derive from URSEPrimaryDataAsset. They share a few fields:

Data assets refer to each other by reference (a class lists abilities, a character names its class). Saved games never store those references as pointers: they store IDs (see below), so content can be renamed, moved or removed between versions without breaking old saves.

3.1.2 IDs and the Asset Manager

Every data asset has a Primary Asset Id: its type (the first native class name, for example RSEAbilityData) plus its asset name. Save files, runtime state and the tools use this stable ID. Two practical consequences:

3.1.3 Gameplay tags

Gameplay Tags name the things that content and rules share: stats, resources, elements, statuses, classes, equipment kinds and story flags. The plugin uses tag families with a fixed root:

RootExamples of what lives there
Stat.*Stat.MaxHP, Stat.Attack, Stat.Speed, Stat.ActionPoints
Resource.*Resource.HP, Resource.MP, Resource.Resonance
Element.*damage types: fire, ice, and your own
Class.*one tag per class
Trait.*movement traits, status immunities and other granted abilities
Equip.Type.*, Equip.Slot.*kinds of equipment and slot types
Ability.Type.*ability categories (attack, skill, magic...), used to sort the battle menu
Battle.Mode.*Battle.Mode.Tactics, ATB, Turn, FreeTactics, Action
Progression.Points.*growth point currencies

Tags are edited in Project Settings → Gameplay Tags. The plugin's own tags are in its Config/Tags files. Your tags go in your project's tag sources. Only the tags that C++ code references directly are native (RSEGameplayTags::Battle_Mode_Tactics and so on). All content tags are plain data, so you can add your own stats, elements and statuses without code.

3.1.4 Settings: the rules of your game

Global rules live in Project Settings → RPG Saga Engine, one page per system (Battle, Grid, Items, Economy, Party, Progression and more). Each page is a subclass of URSEDeveloperSettings, saved to your project's Config/DefaultGame.ini. You can edit them in three places:

There are no tunable numbers hardcoded in the plugin. If a rule has a number, it has a setting or a field on a data asset.

3.1.5 Rules profiles

A Rules Profile (URSERulesProfile) overrides some settings for one place: a boss, a chapter, a "story mode", a genre. A profile holds one override per settings page (a section) and only stores what differs from the global settings. Everything else follows the global values.

Lookup order for a setting, in the first match wins:

  1. the encounter's own profile (an encounter can name one);
  2. the game's active profile (chosen by the story with the Set Rules Profile effect, saved with the game, default from Project Settings → RPG Saga Engine → Rules Profiles → Default Profile);
  3. the profile's parent, then its parent's parent, and so on;
  4. the global settings.

A running battle copies the profile it started with, so switching the game's profile never changes a battle in progress. Some fields are global only because they must match your content (for example the tile size of the grid, the maximum level, the starting party). A profile's value for them is ignored and validation warns when it differs.

To make a profile in the Configurator, open Rules Profiles → New profile, then Add override on the sections you want to change. Debug commands: RSE.Rules.Dump logs the active profile and its overridden sections; RSE.Rules.SetProfile <AssetName | None> switches it.

3.1.6 Feature toggles

Project Settings → RPG Saga Engine → Features has one checkbox per system (Grid Tactics, Live Tactics, ATB / Turn-Based, Action Combat, Dialog, Quests, Story Scenes, Inventory, Economy, Growth / Progression, Living NPCs, Time and Weather, Map and Minimap, Stealth, Puzzles, Cards, Bestiary, Tutorials, Adaptive Difficulty, Online and Co-op). All are on by default. A switched-off system is not created at all: its subsystems do not exist, so it costs no memory or time, and its menu pages, option rows and HUD widgets disappear.

Never switched off: the party, the save system, the story state (flags and variables), the rules and the command bus.

The Configurator's Validate button warns about combinations that leave something half-working (for example Quests on, Dialog off). For one test run only, -RSEDisableFeatures=Quests,Cards on the command line turns features off without touching your settings.

3.1.7 Validation

Data is checked in the editor with Unreal's standard Data Validation (IsDataValid), so problems appear when you save, in the Message Log and in the Content Browser. RPG Saga Engine → Validate All Data checks every setting, rules profile and data asset at once and opens the results in the Message Log under RPG Saga Engine Validation. The Studio's wizards keep Create disabled until every problem is fixed, and say why at the bottom of the window.

Run Validate All Data before you package and whenever something behaves strangely.

3.2 How it works

3.2.1 Data → rules → presentation

The plugin has three layers, and information flows one way:

data assets + settings   ->   rules and state (RSECore)   ->   presentation (RSE)
(what you author)             (what happens)                    (what the player sees)

Because rules never include presentation, a battle can run headless. The battle simulator, Test in battle, the difficulty estimates and the automated tests all play real battles with no window. Presentation reacts to what rules report through events (delegates), and sends player actions back as commands.

3.2.2 State is plain data

All runtime state (the party, inventory, story flags, quests, progression) is stored in plain structs whose saved fields are marked SaveGame. Content is referenced by soft path or ID, never by pointer. Three properties follow:

The Blueprint nodes of the Save Interop group (Export Sections To Bytes, Import Sections From Bytes and friends) let you keep plugin state inside your own SaveGame. See Save and load.

3.2.3 Commands: one path for player actions

Player actions that change shared state go through the command bus (URSECommandSubsystem). A command is a small struct (Add Party Member, Equip Item, Bind Pact, Unlock Growth Node) with a handler that validates it and then applies it:

Submit(command) -> validate -> apply -> result (Applied / Rejected / ...)

In single player it runs locally, on the spot. In a co-op session a guest's command travels to the host, which validates and applies it and sends the result back. There is one code path for every mode, so your own systems become network-ready by using it. Menus, input and Blueprint nodes all send commands; the authority's own systems (battle results, loads, story effects) write state directly.

3.2.4 Conditions and effects: one language for content

Dialogs, quests, puzzles, encounters, interactions and abilities all use the same primitives:

You add them inline in any data asset's list. Every effect also has an Only If gate. Story, dialog and quests covers the full list. Your own conditions and effects can be Blueprint classes (Extending the plugin).

3.2.5 Formulas as data

Derived stats, combat damage, hit chance and resource gains are small formulas written in data (FRSEExpression), compiled once when the project loads and evaluated without allocations. The language has numbers, + - * / % ^, comparisons, && and ||, and the functions min, max, clamp, floor, ceil, round, abs, sqrt, pow and if. Names refer to stats by short name (Stamina), to the unit with a scope (Attacker.Attack, Target.Defense) and to context variables (Level, Power). See Game foundation and archetypes.

3.3 Key classes and assets

Class / assetModuleRole
URSEPrimaryDataAssetRSECoreBase of all content definitions: name, notes, archetype link, validation.
URSEDeveloperSettingsRSECoreBase of every settings page; subclasses appear under Project Settings → RPG Saga Engine.
URSERulesProfileRSECoreA set of per-section rule overrides, with an optional parent.
URSERulesSettingsRSECoreRules Profiles page: the default profile and session rule options.
URSERulesSubsystemRSECoreHolds the game's active profile and resolves the profile of a battle.
URSEFeatureSettingsRSECoreFeatures page: one switch per system.
URSECommandSubsystemRSECoreThe command bus.
URSEWorldEffect, URSEConditionRSECoreBase classes of effects and conditions.
FRSEExpressionRSECoreA formula written in data.
IRSESaveParticipantRSECoreA system's save section.
URSESaveSubsystemRSECoreCollects the sections, writes and reads save files.

3.4 Settings

WhereWhat
Project Settings → RPG Saga Engine → FeaturesOne checkbox per system. All on by default.
Project Settings → RPG Saga Engine → Rules ProfilesDefault Profile (a new game's profile) and Session Rule Options (option rows whose values are the host's in co-op).
Project Settings → RPG Saga Engine → CommandsHandler classes for the command bus (Blueprint or C++).
Configurator (RPG Saga Engine → Configurator)All pages in one window, with the Rules Profiles panel and the tools.

Every page is documented in Appendix B.

3.4.1 Console variables and commands

Debug switches are console variables and commands under RSE.*; no debug behaviour is hardcoded. A few you will use early:

NameWhat it does
RSE.Rules.DumpLogs the active rules profile and its overridden sections.
RSE.Rules.SetProfile <name or None>Switches the game's rules profile.
RSE.Party.ListLogs each party member's HP, MP, KO state and lasting statuses.
RSE.Items.Give <Item> [Count]Adds an item to the party inventory.
RSE.Encounter.Debug, RSE.NPC.Debug, RSE.Camera.FramingDebugDebug drawing and logging for encounters, NPCs and the battle camera.

The full list is in Appendix C.

3.5 Blueprint usage

All Blueprint nodes are under the category RPG Saga. Systems that need the game's state take a hidden World Context Object, so you can call them from any actor, widget or game instance.

Reading the game's rules and state:

  1. Event BeginPlay
  2. Is Feature Enabled (Feature = Dialog)
  3. Branch on the result, then create your dialog button only on True.

Switching the rules profile from a graph:

  1. In data, prefer the story effect Set Rules Profile. In a graph, use Get Game Instance Subsystem (class RSERulesSubsystem), then call Set Active Profile on it and pass your profile asset.
  2. Bind to On Rules Profile Changed on the same object to refresh your UI.

Sending a command from Blueprint:

  1. Make Instanced Struct with the command type, for example Add Party Member.
  2. Fill its fields (Character = your character asset).
  3. Get Game Instance Subsystem (class RSECommandSubsystem) → Submit Command.
  4. Read the result's Status.

Most systems also have convenience nodes that do the same in one call. For example, Add Party Member in the party library sends that command for you. See Appendix A.

3.6 C++ usage

Read a rule through the active profile instead of the raw settings, so profiles keep working:

#include "Core/RSERulesSubsystem.h"
#include "Battle/Common/RSEBattleSettings.h"

int32 GetATBPartySize(const UObject* WorldContext)
{
	const URSERulesProfile* Profile = URSERulesSubsystem::GetActiveProfileFor(WorldContext);
	const URSEBattleSettings* Battle = RSERules::Get<URSEBattleSettings>(Profile);
	return Battle->ATBPartySize;
}

Never call GetDefault<T>() for a settings class that is a rules profile section in rule code. RSERules::GetGlobal<T>() states the intent when you do want the global value.

A new settings page is a subclass of URSEDeveloperSettings:

UCLASS(Config = Game, DefaultConfig, EditInlineNew, meta = (DisplayName = "My Rules"))
class UMyRulesSettings : public URSEDeveloperSettings
{
	GENERATED_BODY()
public:
	// A rules profile may override this page.
	virtual bool IsProfileSection() const override { return true; }

	UPROPERTY(Config, EditAnywhere, Category = "Combat", meta = (ClampMin = "0"))
	float MyBonus = 1.f;
};

It appears under Project Settings → RPG Saga Engine and in the Configurator automatically. Add EditInlineNew and IsProfileSection only if a profile may override it.

A system that stores its own save section registers a struct:

// In a UGameInstanceSubsystem::Initialize
URSESaveSubsystem* Save = Collection.InitializeDependency<URSESaveSubsystem>();
Save->RegisterStruct<FMyState>(TEXT("MyState"), /*Version*/ 1, this, [this] { return &State; });
// After changing State at run time (the authority only):
Save->MarkSectionChanged(TEXT("MyState"));

Gate a subsystem on a feature toggle with RSE_FEATURE_GATE(ERSEFeature::Cards) right after GENERATED_BODY(), or by calling RSEFeatures::IsEnabled from ShouldCreateSubsystem.

3.7 Advanced

3.8 Troubleshooting

SymptomCauseFix
A setting you changed has no effect in a boss fightThe boss's encounter or the active rules profile overrides itRun RSE.Rules.Dump, then edit the setting in the profile (Configurator → Rules Profiles) instead of the global page.
A profile's value is ignoredThe field is global onlyThe Configurator hides global-only fields in profiles and lists them in a note. Edit the global page.
A system's menu page or HUD is missingIts feature is switched offProject Settings → RPG Saga Engine → Features. Check -RSEDisableFeatures in the command line.
Old saves lose a character or item after a renameThe content ID changedAdd a core redirect or an Asset Manager redirect for the old name.
Create is disabled in a wizardA validation problemRead the reason at the bottom of the window; fix it, or run Validate All Data.
A new settings page is under Other in the ConfiguratorIt is not in a groupProject Settings → Editor → RPG Saga Engine Configurator → Groups: add the class to a group.
A guest in co-op cannot change somethingThe command is host-onlyHost-only commands (saves, session rules, giving characters) are refused for guests by design.

3.9 See also

4. Game foundation and archetypes

In short: The Game Foundation is the rule book of your game: what you call things, which stats and resources exist, how damage is computed, which elements and equipment slots there are, which battle modes you use, and how progression and money work. Archetypes are templates you make content from ("a typical knight", "a healing spell"). You choose a foundation preset first, then make content that follows archetypes.

4.1 Basics

4.1.1 What the foundation decides

The foundation answers "what kind of RPG is this?". Does it have MP or Stamina? Fire and ice, or plasma and radiation? Grid battles or active-time battles? It has nine parts:

#PartExamples
1Vocabulary"Party", "Class", "Magic", "Lv", the names of elements and equipment kinds
2Stats and resourcesHP, MP, Stamina, Attack, Speed; derived stats with formulas
3Combat formulasphysical and magical damage, healing, hit chance, critical chance
4Elements and damage typesfire, ice, plasma, and the weakness table
5Equipment and itemsequipment slots, equipment kinds, item categories, inventory mode
6Ability categories and the battle menuAttack, Skills, Magic, Items, Actions
7Battle modes and party sizewhich modes are on, the default mode for new battles, party size
8Progressionmaximum level, experience curve, progression system
9Economycurrency name and symbol, starting money, sell ratio

Applying a foundation writes into settings you can also edit by hand (the attribute registry, Combat Formulas, Battle, Turn-Based Battle, Items, Command Menu, Progression, Economy, Bestiary and Game Terms). Nothing new runs in the game: a foundation is a convenient, validated way to set a lot of settings at once, and you can keep editing Project Settings afterwards.

4.1.2 Foundation presets

Presets live in /RPGSagaEngine/Data/Foundation and appear as cards on the first page of the wizard.

PresetIn short
JRPG ClassicThe framework's standard setup: HP, MP, Resonance, eleven stats, eight elements, every battle mode.
TacticsGrid battles only, bigger flank, back and height bonuses.
EmptyHP, four stats and one attack, turn-based battles: build the rest yourself.
Dark FantasyStamina and Fury instead of MP, four elements, deadlier criticals, scarce healing.
Sci-fi RPGEnergy and Tech instead of MP and Magic, physical, energy and plasma damage, firearms, implant and chip slots.
Post-apocalypticStamina and Adrenaline, ballistic, fire, toxic and radiation damage, caps as money.
SteampunkSteam that refills every turn, fire, voltage and impact damage, pistols and sabres, gadget slots.
Action: SwordsReal-time sword fights: the Melee action preset, Action as the starting mode, Tactics and classic battles off.
Action: ShooterReal-time shooting with cover: the Shooter action preset, Action as the starting mode.

Every preset except Empty comes with a small starter set made for it (four hero classes with their heroes, five abilities per class that use the preset's resources and damage types, eight items, five enemies and three battles). Every preset is validated and played in a simulated battle in each of its modes by the plugin's automated tests.

4.1.3 First working example: apply a preset

  1. Open the Studio: RPG Saga Engine → Studio.
  2. 1. Game foundation → Configure the foundation.
  3. On the first page, pick a starting preset (for example Dark Fantasy) or My current setup (your Project Settings as they are).
  4. Go through the pages: Vocabulary, Stats and resources, Battle formulas, Elements, Equipment and items, Abilities and the battle menu, Battle modes, Progression, Economy. Each has a short explanation, the fields, Use recommended values (back to the preset's values for this page) and a live preview on the right: | Page | Preview | |---|---| | Vocabulary | the battle screen and command menu with your words | | Stats and resources | a sample character's stats at any level (derived stats use your formulas) | | Battle formulas | a damage calculator: power, attack, defense, result | | Elements | the weakness matrix: what a 100-damage hit does to a weak, resistant, immune or absorbing target | | Equipment and items | what a character wears and the inventory tabs | | Abilities and the battle menu | the command menu | | Battle modes | the modes and the party size | | Progression | experience needed at levels 2, 5, 10, 20, 50 and the last level | | Economy | starting money, what a 100 item sells for, an inn night |
  1. On Summary and Apply, press Check my project (changes nothing). It lists the tags to add and the content that uses stats, elements, slots or categories the foundation drops, with a proposed replacement for each (for example MP becomes Energy). Change the replacements if you want and press Apply the replacements to my content.
  2. Optionally tick Copy the starter content into my project when I press Apply and Use the starter heroes as my starting party.
  3. Press Apply. The foundation is saved in your project (/Game/Foundation) and written into Project Settings. It stays blocked while content would break, unless you tick Apply anyway.

Pick the foundation first, before you make much content: it is cheaper to choose "Stamina instead of MP" on day one than to replace it in a hundred abilities later (although the replacement tool does that for you).

4.1.4 Archetypes

An archetype is a template you create content from: "Knight", "Goblin", "Merchant", "Healing spell". Content made from an archetype remembers it and follows it for every field you did not change.

KindClassCreatesStarter archetypes (/RPGSagaEngine/Data/Archetypes)
Hero Class ArchetypeURSEHeroArchetypea ClassPaladin, Warrior, Sorcerer, Cleric, Ranger, Rogue, Monk, Summoner
Enemy TypeURSEEnemyArchetypean enemy CharacterBeast, Brawler, Construct, Druid, Knight, Marksman, Pyromancer, Poisoner, Witch, Wraith
NPC TypeURSENPCArchetypean NPC's InteractionMerchant, Quest giver, Recruiter, Innkeeper, Card player, Passer-by and more
Ability FamilyURSEAbilityFamilyan Abilityweapon attack, elemental spell, area spell, healing, revive, status attack, buff, ranged shot
Item FamilyURSEItemFamilyan Itempotion, status cure, bomb, melee and ranged weapons, armor, helmet, shield, accessory

Working with them in the Studio:

  1. 2. Archetypes → Archetype library shows every archetype of your project and of the plugin. Filter by kind, role (tank, damage, support, merchant...), library tag, search text, or Mine only.
  2. Click a card. The right panel offers New character from it / New enemy from it, Create content from it, Open the archetype sheet, Duplicate, Duplicate as child (a variant that keeps following the original, such as Fire Knight from Knight), Show who uses it and Update content from it....
  3. Plugin archetypes are templates. Duplicate one into your project before you change it.
  4. New class, New enemy type and New NPC type make a new archetype in three steps: start from, name and one-sentence summary, Create. You set its values on its sheet.

4.1.5 How content follows its archetype

Make an archetype for anything you will create more than three times (a family of goblins, a kind of healing potion).

4.2 How it works

4.2.1 Applying a foundation

A foundation (URSEGameFoundation) is a data asset only; it is editor-only and never cooked. Applying it:

  1. Validates it (Validate Foundation): missing required stats (Stat.Speed; Tactics also needs Stat.ActionPoints and Stat.Jump), Resource.HP, formulas that do not compile, unknown tags, empty menus.
  2. Adds missing tags to the project's tag file (Game Foundation → New Tag Source, RSE_Foundation_Project.ini by default).
  3. Checks change safety: scans the project's content (and, if you ask, the framework's own settings: Pacts, Bestiary, Progression Designer) for stats, elements, slots and categories the new foundation drops, and proposes replacements (the foundation's Suggested Replacements first).
  4. Writes the project's attribute registry and command menu layout (into Game Foundation → Project Foundation Folder, /Game/Foundation), writes the settings and saves them to Config/DefaultGame.ini, and remembers the foundation (Applied Foundation).
  5. Optionally copies the starter content into /Game/StarterContent/<Preset> (Starter Content Folder), keeps assets you already have, and can make the starter heroes your starting party.

Copying again never loses your edits: assets already there are kept. Reset starter assets that are already in my project is off by default; on, existing assets go back to the starter values, but nothing is ever deleted or moved. The copies point at each other, never at the plugin's originals. A foundation's UI style becomes the project's default style when you apply it in the Studio.

4.2.2 Stats, resources and the attribute registry

Stats and resources are defined in an Attribute Registry (URSEAttributeRegistry), chosen in Project Settings → RPG Saga Engine → Attributes. Without one, the framework's built-in definitions (HP, MP, Resonance and the standard stats) apply, which reproduce the default rules exactly.

An attribute (FRSEAttributeDefinition) is a stat such as Stat.Attack: tag, display name, short label, the short name formulas use, a category and description, a minimum and optional maximum, a rounding mode (None, Floor, Round, Ceil), an optional Derivation formula, and whether it shows in menus. A plain attribute comes from class growth and modifiers. A derived attribute has a formula over other attributes, for example 50 + Stamina * 10 + Level * 5 for Max HP. Formulas can read Level and Base (the attribute's own base value from class growth).

A resource (FRSEResourceDefinition) is a current value with a maximum that changes in battle: Resource.HP, Resource.MP, Resource.Resonance, or your own (Rage, Steam). Its fields are:

Resource.HP is the life resource: 0 defeats a unit. Every other rule is data.

4.2.3 Formulas and stats

The order of operations for one stat is always the same, whatever the order of its sources (class, equipment, statuses, Pacts, growth boards, personal modifiers):

  1. Base: the class's growth at the level, or, for a derived stat, the formula's result.
  2. Add: plus the sum of all Add values.
  3. Percent: times 1 + (sum of all Percent values) / 100, so 20 means +20%.
  4. Multiply: times the product of all Multiply values (1.5 is +50%, two of them multiply each other).
  5. Override: the stat becomes the Override value (with several, the last source wins).
  6. Clamp Min / Clamp Max: at least the largest Clamp Min, at most the smallest Clamp Max (if they cross, the maximum wins).
  7. The attribute's own rounding and its Min and Max from the registry.

A Multiply of 0 sets the stat to 0, so validation of an equipment asset warns about it. Examples: a ring with Multiply 1.1 on Attack, a curse with Clamp Max 50 on Speed, a boss phase with Override 999 on Defense.

Combat formulas (Project Settings → RPG Saga Engine → Combat Formulas, a rules-profile section) are the same kind of formulas: which stats feed physical and magical offense and defense, and the expressions for Defense Factor, Physical Damage, Magical Damage, Fixed Damage, Healing, Hit Chance, Critical Chance, Critical Multiplier and Final Damage. Names inside them: Power, Offense, Defense, DefenseFactor, Position, Variance, HitBonus, Damage, Affinity, Level and the battle's constants (such as DefenseConstant), plus Attacker.<stat> and Target.<stat> for any stat. The defaults reproduce the framework's original numbers.

Formula tester. Studio → Formula tester (also Test with a real class and equipment under the stats preview of the foundation wizard). Pick a character, a class or a hero class archetype, a level and the equipment worn, add extra modifiers to try, and press Compute. Every attribute and derived stat is listed with its final value, the value it started from, the modifiers that apply in order, and its formula. Problems are highlighted: red for an unknown variable, a syntax error or a cycle (the base value is used until you fix it), orange for a division where a stat it reads is 0 (the formula counts that part as 0).

4.2.4 Elements and the weakness table

Elements are tags under Element.*. A unit's affinity to an element is one of Normal, Weak, Resist, Immune or Absorb. When sources disagree, the strongest protection wins (Absorb over Immune over Resist), and Resist plus Weak cancel to Normal. The damage multiplier per affinity is the Affinity Multipliers map in Project Settings → RPG Saga Engine → Battle; a foundation can write its own.

4.2.5 Equipment slots and item categories

Equipment slots (FRSEEquipmentSlotDef) are a list in Project Settings → RPG Saga Engine → Items → Equipment Slots: a slot id (Weapon, Accessory1), a display name, the slot type it accepts (Equip.Slot.*), the body part for the paperdoll, an empty icon, and where an item worn there is shown on the body. The foundation also names the off-hand slot that a two-handed weapon occupies, the equipment kinds classes may use (Equip.Type.*: firearms, blades, implants) and the item categories for inventory tabs. A Equipment Slot Set asset (URSEEquipmentSlotSet) can hold a ready slot layout and apply it to the project.

The foundation also sets the inventory mode: Shared (one party grid: classic JRPG, ATB, Tactics) or Per Character (a bag per member and a stash at save points). It can be switched later in both directions.

4.2.6 The battle command menu

The classic battle menu (Project Settings → RPG Saga Engine → Command Menu) is a layout (URSECommandMenuLayout): an ordered list of top-level commands. Each command (FRSECommandMenuEntry) has an id, a label, a help line, a kind and the ability types that go into it (children included), plus options:

A class can name its own layout (URSEClassData::CommandMenu) and a layout can rename or hide commands for one class (Class Overrides). Commands with nothing in them are hidden or shown disabled (Empty Groups). The menu remembers the cursor per unit (Remember Cursor).

4.2.7 Game Terms: the words on screen

Every screen reads its vocabulary from Game Terms (Project Settings → RPG Saga Engine → Game Terms): the battle HUDs, party menu, shop, battle results, save and load screens, bestiary, battle log and Pact screens. Change a term (or apply a foundation) and every screen follows, with no restart. The ids screens ask for:

IdDefaultUsed for
PartyPartyparty menu columns, shop comparison
ClassClassclass names on cards
Level / LevelShortLevel / Lv"Lv 12" on cards, rows and results
Experience / ExperienceShortExperience / EXPresults, the party menu
Abilities, Skills, MagicAbilities, Skills, Magicparty menu pages and ability groups
Items, KeyItems, EquipmentItems, Key Items, Equipmentparty menu pages, shop tabs, results
MoneyMoneythe results label (amounts use the Economy currency)
EnemiesEnemiestarget lists, bestiary, results
HP, MPfrom the attribute registryHP lines, "Not enough MP." (MP is the main spendable resource: Energy, Stamina, Steam...)

Tag Names gives player-facing names to tags (Element.Fire becomes "Fire", Equip.Type.Weapon.Firearm becomes "Firearm"). The ability groups of the party menu use the names of the ability categories.

Screen texts in Project Settings use the words as arguments, for example {Term.LevelShort} {Level} or +{Amount} {Term.ExperienceShort}. Keep the argument to follow the game's vocabulary, or type a fixed word to override it for that screen only. Terms are localizable text.

4.3 Key classes and assets

Class / assetModuleRole
URSEGameFoundationRSECoreThe foundation data asset (nine parts + starter content). Editor-only.
URSEFoundationLibraryRSECoreValidate, capture the current setup, apply, impact report, test battles, game terms.
URSEFoundationEditorLibraryRSEEditorProject-level operations: plan, apply to project, copy starter content, add tags.
URSEFoundationSettingsRSECoreGame Foundation page: folders, tag source, change safety, test battle, starter balance.
URSEGameTermsSettings, RSEGameTermsRSECoreGame Terms page and the lookup screens use.
URSEAttributeRegistryRSECoreAttribute and resource definitions.
URSEAttributeSettingsRSECoreAttributes page: which registry the game uses (a profile section).
URSECombatFormulaSettingsRSECoreCombat Formulas page (a profile section).
URSECommandMenuLayout, URSECommandMenuSettingsRSECoreThe battle command menu and its page.
URSEFormulaTesterLibraryRSECoreRun and format a formula test.
URSEArchetype and its kindsRSECoreTemplates: URSEHeroArchetype, URSEEnemyArchetype, URSENPCArchetype, URSEAbilityFamily, URSEItemFamily.
URSEArchetypeLibraryRSECoreLink, inherit, override, reset and propagate (editor data).
URSEArchetypeEditorLibraryRSEEditorFind, create, duplicate and propagate across the project.

4.4 Settings

WhereWhat
Game FoundationApplied Foundation, Project Foundation Folder (/Game/Foundation), Starter Content Folder (/Game/StarterContent), New Tag Source (RSE_Foundation_Project.ini), Library Folders, Managed Tag Roots, Report Settings References, the test battle, the starter balance band.
Game TermsTerms (words by id) and Tag Names.
AttributesRegistry: the attribute registry the game uses.
Combat FormulasThe stats that feed offense and defense, and the nine formulas.
BattleAffinity Multipliers, positioning (flank, back, height) multipliers, ATB Party Size (default 4), Default Encounter Mode, hit chance limits.
Command MenuDefault Layout, Fallback Entries, Empty Groups, Remember Cursor, Show Back Entry.
Items, Economy, ProgressionSlots and categories; currency and shops; maximum level and experience curve.

Every page is in Appendix B.

4.5 Blueprint usage

At run time, the foundation's words and rules are available through simple nodes (category RPG Saga → Foundation):

Example: a custom HUD label that follows the game's vocabulary.

  1. Event Construct in your widget.
  2. Get Game Term with Id = LevelShort, Fallback = "Lv".
  3. Format Text with {0} {1} (term, current level) and Set Text on your label.

In the editor (Editor Utility Blueprints and Python), the foundation tools are categories RPG Saga → Foundation and RPG Saga → Studio → Foundation:

Archetypes (categories RPG Saga → Archetypes and RPG Saga → Studio → Archetypes): Find Archetypes, Create Content From Archetype, Duplicate Archetype, Create Archetype From Content, Find Assets Using Archetype, Compute Propagation In Project, Apply Propagation And Save, Set Parent Archetype, Reset Field To Archetype, Is Field Inherited, Is Field Overridden, Get Out Of Date Fields.

Example: make a new goblin from an archetype in an Editor Utility Blueprint.

  1. Find Archetypes (Kind = RSEEnemyArchetype, Content Class = RSECharacterData).
  2. Pick the archetype, then Create Content From Archetype (Folder = /Game/MyRPG/Enemies, Asset Name = DA_Char_Goblin, Save = true).
  3. Check Out Error is empty.

The full node list is in Appendix A.

4.6 C++ usage

Apply a foundation from an editor module and read the result:

#include "Foundation/RSEFoundationLibrary.h"
#include "Archetypes/RSEFoundationEditorLibrary.h"

void ApplyPreset(const URSEGameFoundation* Preset)
{
	// 1. Dry run: lists errors, missing tags and content that would break.
	const FRSEFoundationApplyReport Plan = URSEFoundationEditorLibrary::PlanFoundationApplyToProject(Preset);

	// 2. Apply. Refused (nothing written) when content would break and bAllowBreakingChanges is false.
	const FRSEFoundationApplyReport Report =
		URSEFoundationEditorLibrary::ApplyFoundationToProject(Preset, /*bAllowBreakingChanges*/ false);
}

Read the game's words at run time in your own widgets:

#include "Foundation/RSEGameTerms.h"

const FText PartyWord = RSEGameTerms::Get(RSEGameTerms::Party, NSLOCTEXT("MyUI", "Party", "Party"));
const FText Label = RSEGameTerms::Resolve(FText::FromString(TEXT("{Term.LevelShort} 5")));

Compute a stat the way the game does:

FRSEFormulaTestInput Input;
Input.Character = MyCharacter;   // or ClassData / Archetype
Input.Level = 20;
const FRSEFormulaTestResult Result = URSEFormulaTesterLibrary::RunFormulaTest(Input);
UE_LOG(LogTemp, Display, TEXT("%s"), *URSEFormulaTesterLibrary::FormatFormulaTestReport(Result));

Extension points: a new archetype kind is a subclass of URSEArchetype that overrides GetBaseContentClass() (and InitializeNewTemplate() for kind-specific defaults); all archetype classes share one Asset Manager type, RSEArchetype. Terms are plain ids, so a game can define any id of its own and use {Term.MyWord} in screen texts.

4.7 Advanced

4.8 Troubleshooting

SymptomCauseFix
Apply is blockedYour content uses a stat, element, slot or category the new foundation dropsUse Check my project, adjust the proposed replacements, Apply the replacements to my content, then Apply again (or tick Apply anyway).
A plugin archetype cannot be editedPlugin assets are templatesDuplicate it into your project.
Content did not change after I edited its archetypeNothing changes silentlyOpen Review changes (or Update content from it...), check the assets and apply.
A screen still shows an old wordThat screen's text in Project Settings has a fixed wordReplace it with the {Term.<Id>} argument.
A stat shows an unexpected valueA modifier source you forgot (equipment, status, Pact, growth)Use the Formula tester with the same character, level and equipment: it lists each step.
A formula is red in the testerUnknown name, syntax error or a cycleFix the name (use the attribute's short name) or break the cycle; the base value is used meanwhile.
Validation reports a missing stat with Tactics onTactics needs Stat.ActionPoints and Stat.JumpKeep both stats in the registry, or turn Tactics off in the foundation's battle modes.
The wizard's test battle fails in a modeThe foundation lacks something that mode needsRead the issue list on Summary and Apply; the test plays one quick battle per mode.

4.9 See also

5. Characters and party

In short: A class (URSEClassData) defines stat growth, abilities by level and allowed equipment. A character (URSECharacterData) is a specific hero, recruit or enemy with a fixed class plus personal traits. The party (URSEPartySubsystem) holds who is in your team, their levels, equipment, resources and Pacts for the whole game, and survives level changes and saves.

5.1 Basics

5.1.1 The three kinds of character

Every character has a Roster that says where it can fight:

RosterWhat it isFights in
MainA story character: found in the world and recruited as the story goes.Every battle mode.
SecondaryA recruited unit (a mercenary, a volunteer).Grid Tactics only.
EnemyAn enemy or neutral unit, controlled by the AI.Every battle mode, on the other side.

Two more ideas modify this:

The same character, class, stats and abilities work in every battle mode.

5.1.2 First working example: make a class, a hero and put it in the party

  1. Archetypes first. In the Studio, 2. Archetypes → Archetype library, pick a hero class archetype such as Paladin and press Create content from it. That creates a class in your project.
  2. A hero. 3. Content → New character. Answer the seven steps: Who is it? (name, Hero), Start from (an archetype or an existing character), How does it look?, Which class? (and starting level), What can it do? (abilities by level, with checkboxes), Where does it appear?, Summary and Create.
  3. Where does it appear? offers four choices:
    • Not yet: only the asset is made.
    • In the starting party: the hero is part of a new game's party (the Studio updates Party → Starting Members for you).
    • Recruitable in the world: an NPC with a "Join us?" dialog is placed in front of the camera, with a story flag that remembers the recruitment.
    • An enemy in the world: an encounter and a spawner or battle zone.
  4. After Create, open the character sheet. Press Test in battle to play a few quick simulated battles and read the win rate.

The same one-click actions are available on any Character asset: right-click it, RPG Saga: Character Actions, then Add to Starting Party, Make Recruitable or Make Enemy. Undo removes what was placed in the level.

5.1.3 The character sheet

Double-click a Character asset to open its sheet: header (portrait, name, role, class, level, valid or not), buttons (Test in battle, Add to party, Make recruitable, Make enemy, Duplicate, Open generic editor) and tabs: General, Look (live preview), Class & stats (the stats at the starting level), Abilities, Equipment and In game. Simple / Advanced shows the essential fields or all of them. Only the fields that make sense for the role are shown (an enemy has no guest flag and no Add to party button, a hero has no loot table). The class and the look can be edited right on the sheet.

Characters and classes that come with the plugin are templates: the sheet shows a Create a copy in the project button, and only your character changes.

5.1.4 The fields of a character

FieldMeaning
ClassThe fixed class.
RosterMain, Secondary or Enemy.
Starting LevelLevel when the character first joins (default 1).
ControlPlayer or AI. Guests can be either; enemies are AI.
Default ATB RowFront or back, for classic battles. Casters and archers usually stand in the back.
Experience RewardWhat the party gets when the character is defeated as an enemy. 0 = the formula in the Progression settings.
Loot Table, Default AI ProfileRewards and AI for enemies. An encounter may override the AI profile.
Guest, Default EquipmentA guest wears the default equipment, locked. Other characters start with it.
Personal Modifiers, Personal Affinities, Personal TraitsDifferences from the class: a sturdier knight, a hero weak to fire. They are combined with the class's.
Growth Plan, Bag SizeAn own growth plan and (per-character inventory) bag size, instead of the class's.
Appearance, Portrait, Follower Profile, Attack PresentationsPresentation only. Battles and saves never read them.
Bestiary fieldsDescription, category, hide from the bestiary.

5.1.5 The class

A class (URSEClassData) has:

Stats not listed are zero unless a modifier adds them. Derived stats (Max HP computed from Stamina) follow the foundation's formulas (Game foundation and archetypes). An ability the class lists at level 1 is known from the start; later ones unlock when the character reaches that level.

5.1.6 Levels and experience

A character's level and experience are part of the party's state. The experience needed in total to reach level L is

ExperienceBase × (L − 1) ^ ExperienceExponent + ExperiencePerLevel × (L − 1)

unless an Experience Curve (a float curve of total experience by level) replaces the formula. Defaults: maximum level 99, base 15, exponent 2, per level 0. When a character gains experience, every level reached raises the stats from class growth, raises current HP and MP by the gain in their maximums, and unlocks the class abilities of that level. Experience from a battle is shared among the members still standing. Enemies give EnemyExperienceBase + EnemyExperiencePerLevel × (Level − 1) unless their character sets a reward. All of these are in Project Settings → RPG Saga Engine → Progression.

5.1.7 Party and roster

The party is the list of characters the player controls. Related notions:

The party menu (Formation page) is where the player changes these. In exploration, the visible party follows the leader in formation and the player can switch leader; see Exploration.

5.1.8 Recruitment, guests and leaving

Characters join and leave through story effects, dialogs and quests, or from Blueprint:

A recruit usually comes from an NPC (ARSENPC) whose interaction runs a dialog with the Add Member effect. Make Recruitable builds exactly that. Which characters are available can depend on story state: use conditions such as Member In Party and Member Not KO in dialogs, quests and puzzles.

5.1.9 NPC types

NPC types are archetypes (URSENPCArchetype) that create an NPC's interaction: Merchant, Quest giver, Recruiter, Innkeeper, Card player, Passer-by, Blacksmith, Elder, Priest and more, in /RPGSagaEngine/Data/Archetypes/NPCs. Pick one in 2. Archetypes → New NPC type or the library, then place the NPC (ARSENPC) in the level. NPC routines and barks are covered in Exploration.

5.1.10 Pacts

A Pact is the customization layer of main characters (who have a fixed class): an original summon system with affinities, abilities that extend the class, and a summon, a temporary unit the player controls, in every battle mode.

What a Pact (URSEPactData) gives its holder:

Rules:

Create a Pact with Advanced tools → Create New → Pact: description, summoned unit and an existing summon ability.

5.2 How it works

5.2.1 From data to a unit in battle

URSECharacterData  ──►  class stat growth at the level
        │                + personal modifiers, affinities, traits
        │                + equipment, Pact, statuses, growth (added by their owners)
        ▼
FRSEAttributeSet (the unit's stats)  ──►  battle unit  ──►  presentation actor

URSECharacterData::InitializeAttributes(Level, OutAttributes) produces the class stats at a level plus the character's personal traits. Equipment, Pacts, statuses and progression add their own sources, aggregated in the order of operations you saw in chapter 3. A battle spawns units from the party's state (level, equipment, resources, Pact, progression) or from an encounter's enemy list, then runs them with no knowledge of actors.

5.2.2 The party state

URSEPartySubsystem owns the party's state for the whole game session (it survives level changes). The state (FRSEPartyState) holds: members, inventory and item containers, money, shop purchases, encounter-rate effects, vitals and equipment per character, the formation and ATB rows, owned Pacts with their holders and progress, learned and forgotten abilities per character, progression (level and experience), the growth state of the progression systems, and each member's battle hotbar order.

The state is read-only to screens: GetState() returns it, and changes go through party commands or through GetStateForApply() for the authority's own systems (battle results, loads, story effects), which marks the Party section changed so the write is never silent. The Party section is saved with the game and replicated in co-op.

Before a battle the director remembers the whole party state (SaveBattleSnapshot); a Retry after defeat puts the party back exactly as it was.

5.2.3 Commands

Party changes are commands on the command bus (Core concepts). The party commands include: Set Formation, Set ATB Row, Move In Formation, Set Battle Menu Order, Cast Field Ability, Use Field Item, Equip Item, Unequip Item, Bind Pact, Unbind Pact, Learn Pact Ability, Buy Item, Sell Item, Rest At Inn, Add Party Member, Remove Party Member, Restore Party, Learn Ability, Set Member Resource, Add Experience, Add Party Experience, Set Level, Give Pact, Award Pact Points, Give Item, Take Item, Add Money and Spend Money. Story-driven ones (adding members, experience, Pacts, items, money) are host-only in co-op; the player's own choices (equipment, formation, Pact binding) are open to every player, subject to the co-op rules (for example Guest Equipment).

5.2.4 Events

Subscribe instead of polling:

5.3 Key classes and assets

Class / assetModuleRole
URSEClassDataRSECoreA fixed class: stat growth, abilities by level, allowed equipment.
URSECharacterDataRSECoreA hero, recruit or enemy: class, roster, control, traits, equipment, presentation.
ERSECharacterRoster, ERSEBattleControlRSECoreMain, Secondary, Enemy; Player or AI.
URSEPartySubsystemRSECoreThe party's state for the whole session; resource access and events.
FRSEPartyStateRSECoreThe serializable party: members, equipment, vitals, Pacts, progress.
URSEBlueprintLibrary_PartyRSECoreBlueprint access to members, levels, attributes, equipment, formation and Pacts.
URSEPartySettingsRSECoreParty page: starting members, defeat recovery.
URSEPactData, URSEPactSettingsRSECoreA Pact; global Pact rules.
FRSECmd_* party commandsRSECoreCommands such as FRSECmd_AddPartyMember.
ARSENPCRSEAn NPC actor with an interaction (recruiters, merchants).
URSEPartyFieldSubsystemRSEThe visible party in exploration: followers, leader switching.
URSEPartyMenuWidgetRSEThe party menu screen.

5.4 Settings

WhereWhat
Party → New Game → Starting MembersThe new-game party (global only).
Party → DefeatDefeat Recovery HP Percent (default 0) and Defeat Recovery Min HP (default 1): HP fallen members regain after a story battle the party may lose.
ProgressionMax Level (99), the experience curve (Experience Base 15, Exponent 2, Per Level 0, optional Experience Curve), enemy experience, enemy level scaling and enemy stat growth.
BattleATB Party Size (default 4).
PactsSummon Resource (Resource.Resonance), initial CT and ATB fractions of a summon, Summon Placement Range (3 tiles), Backlash Can Defeat (off), Points Per Victory (10), Points Per Enemy Defeated (2), Award Fallen Members (off).
Party FieldThe visible party's follower rules (pace, drift, idle behaviours).
Character Actions (editor)The recruit flag root and tag source, and the enemy battle mode used by the one-click actions.

Per-Pact numbers (Resonance rates, summon turns, backlash) live on the Pact asset. The full lists are in Appendix B.

5.5 Blueprint usage

The party library is under RPG Saga → Party (nodes take a hidden World Context). The most used nodes:

TaskNodes
MembersGet Party Members, Is Party Member, Add Party Member, Remove Party Member, Restore Party
LevelsGet Level, Get Experience, Get Experience To Next Level, Add Experience, Add Experience To Party, Set Level
StatsGet Member Attribute, Get Member Attributes, Get Member Resource, Get Member Resource Max, Modify Member Resource, Get Member Vitals, Is Member KO
AbilitiesGet Member Abilities, Learn Ability, Forget Ability, Has Learned Ability, Get Learned Abilities
FormationGet ATB Formation, Get Tactics Roster, Is In ATB Formation, Set In ATB Formation, Get ATB Row, Set ATB Row, Get ATB Party Size
EquipmentGet Equipment, Get Equipped Item, Can Equip, Equip, Unequip, Get Equip Candidates, Preview Equip
PactsGet Owned Pacts, Give Pact, Has Pact, Can Bind Pact, Bind Pact, Unbind Pact, Get Bound Pact, Get Pact Holder, Get Pact Points, Award Pact Points, Can Learn Pact Ability, Learn Pact Ability, Get Learned Pact Abilities

Example 1: a treasure room that recruits a hero and gives the party experience.

  1. Event ActorBeginOverlap on your trigger volume.
  2. Add Party Member (Character = DA_Char_Wren). Branch on the returned bool: False means she was already in the party.
  3. Add Experience To Party (Amount = 200, Only Standing = true).

Example 2: show a level-up banner.

  1. In your HUD widget, Event Construct → Get Party Subsystem.
  2. Bind Event to On Ability Learned (your custom event shows "Character learned Ability").
  3. After awarding experience elsewhere, read the Add Experience return value (Level Up Result): Old Level, New Level and New Abilities.

Example 3: bind a Pact outside battle.

  1. Can Bind Pact (Character, Pact). On Ok, Bind Pact.
  2. Otherwise show the refusal reason: Not Owned, Not Main Character, Guest Character, Bound To Other Character or In Battle.

Result enums to know: ERSEFormationResult (Ok, NotMember, TacticsOnly, Full, LastActiveMember, InBattle), ERSEEquipResult, ERSEPactBindResult, ERSEPactLearnResult.

In data, the same changes are story effects: Add Member, Remove Member (with a departure kind), Restore Party, Set Level, Give Experience, Learn Ability, Forget Ability, and conditions Member In Party, Member Not KO. The party library has no story effect for giving a Pact: use the node Give Pact in a Custom (Blueprint) effect (override On Execute), or call it from your own graph. See Appendix A.

5.6 C++ usage

Read party state through the subsystem. Send changes as commands so single player, host and guests all work:

#include "Characters/RSEPartySubsystem.h"
#include "Characters/RSEPartyCommands.h"
#include "Commands/RSECommandSubsystem.h"

void RecruitHero(UGameInstance* GameInstance, URSECharacterData* Hero)
{
	if (URSECommandSubsystem* Bus = GameInstance->GetSubsystem<URSECommandSubsystem>())
	{
		FRSECmd_AddPartyMember Command;
		Command.Character = Hero;
		const FRSECommandResult Result = Bus->Submit(Command);
		if (Result.Status != ERSECommandStatus::Applied)
		{
			UE_LOG(LogTemp, Warning, TEXT("Recruit refused (status %d)"), static_cast<int32>(Result.Status));
		}
	}
}

int32 GetHeroLevel(const URSEPartySubsystem& Party, const URSECharacterData& Hero)
{
	return Party.GetState().GetLevel(Hero);
}

Gate on resources and stats with the subsystem:

const float HP = Party->GetMemberResource(Hero, RSEGameplayTags::Resource_HP);
const float MaxHP = Party->GetMemberResourceMax(Hero, RSEGameplayTags::Resource_HP);
const float Attack = Party->GetMemberAttribute(Hero, RSEGameplayTags::Stat_Attack);

Extension points:

5.7 Advanced

5.8 Troubleshooting

SymptomCauseFix
A recruit cannot join ATB battlesRoster is Secondary (Tactics only)Make it Main, or use it only in Tactics.
Set In ATB Formation returns FullThe classic party is at ATB Party SizeRemove someone from the formation first, or raise Battle → ATB Party Size.
Set In ATB Formation returns Last Active MemberAt least one member must stay in the classic partyAdd the replacement before removing the last one.
A hero's equipment cannot be changedThe character is a GuestBy design; untick Guest for a permanent member.
A Pact will not bindNot owned, not a main character, guest, held elsewhere, or in battleRead the Pact Bind Result; give the Pact first (Give Pact) and bind outside battle.
A new-game party is emptyParty → Starting Members is emptyUse Add to Starting Party on a character or fill the list.
Equipment returned to the inventory when a member leftDeparture was PermanentUse Parallel Scenario for a member who will come back.
The enemy gives no experienceExperience Reward is 0 and the enemy formula gives 0Set the character's reward or Progression → Enemy Experience Base / Per Level.
A character shows grey placeholder shapesNo Appearance or no body installedSee Character visuals and animation.

5.9 See also

6. Progression

In short: Progression is how your heroes grow. Every game has levels (stats from the class, abilities at their unlock levels). On top you choose one of three systems: Classic (levels only), Classic + Points (the player spends attribute and ability points) or Classic + Growth Board (the player opens nodes on a board). Four optional sources add more ways to learn: equipment mastery, teachers, learning from enemies and use growth. Everything is data, and generators fill it in from your classes.

6.1 Basics

6.1.1 Levels and the three systems

In every system, a class still learns its abilities at their levels and its stats still grow with each level (Characters and party). The other two systems add a layer the player builds.

SystemWhat the player doesWhere the data lives
ClassicNothing extra: levels do it all.The class (stat growth, abilities by level).
Classic + PointsEach level gives attribute points (raise key attributes, with a price that rises and caps per level) and ability points (buy abilities from the class's catalog; some need others first, a level or story progress).The class's Growth Plan (URSEGrowthPlan).
Classic + Growth BoardLevels and won battles give board points. The player opens nodes next to the ones already open: stat boosts, passives, abilities, gates, junctions and keystones.The class's Growth Board (URSEGrowthBoard), or one shared board.

Points are never lost: a character's available points are computed from its level and its plan (level grants + bonus points − spent points), so an old save, or a plan you rebalanced later, always gets the right amount. Spending is final unless your game allows a respec.

6.1.2 First working example

  1. Open the Studio and go to 1. Game foundation → Progression system (or Project Settings → RPG Saga Engine → Progression Systems). Pick a system.
  2. Classic + Points: nothing else is needed to try it. The starter hero classes come with a plan, and every other class uses the default plan (Default Plan).
  3. Classic + Growth Board: open 2. Archetypes → Growth board, pick a class and press Generate Board. Open the result in the board editor and change anything you like.
  4. Press Play, open the party menu, go to the Growth page and spend the points.

If the Growth page does not show, the game is using Classic. Pick another system, or let the player choose at New Game (see below).

6.1.3 Growth Plans

A Growth Plan (URSEGrowthPlan) belongs to a class (Class → Growth Plan) or to one character (Character → Growth Plan). A class without a plan uses Progression Systems → Default Plan. A plan holds:

6.1.4 Growth Boards

A board is a set of nodes joined by edges. Each character starts on its start node (per character, per class, or the board's default) and can open any node next to an open one, if it has the points, the level and the story conditions.

Node kinds (ERSEGrowthNodeKind):

KindWhat it does
Stat BoostRaises stats (its Modifiers, any modifier operation).
PassiveGrants an always-on passive ability.
AbilityGrants an active ability.
GateOpens only when its conditions hold (a level, a story flag, an item), then lets the path continue.
HubA junction: usually free, gives nothing, and opens every path that leaves it, so the player chooses a direction there. The start node is one.
KeystoneA region's build-defining prize: a strong ability and/or a large stat boost, at the end of a region.

A node also has an Id, a Label, a Position, a Tier (0 common to 3 rare, drawn as a ring), a Cost, a Required Level, optional required class tags, a Region, and gate conditions and text.

Regions are themed parts of the board (offense, defense, magic, utility): nodes name their region, and the screen tints it and writes its name. Layout presets (ERSEGrowthLayoutPreset) arrange generated boards:

Boards are clean by rule: no crossing edges, no overlapping nodes, no edge over a node (Progression Systems → Board → Layout Rules). Generated boards always pass. For boards you lay out yourself, Check Layout and asset validation list the problems.

Scope: Board Scope is Per Class (each class's plan names its board) or Shared (every character uses Shared Board, each from its own start node). Travel Cost Per Step makes each step from where the character stands to the node it opens cost extra points (0 = no cost).

Looks: each board names a Board Style (URSEGrowthBoardStyle): the words on screen (a "Constellation" of "Stars" paid in "Starlight" with an "Ignite" button, or "Roots", "Knots", "Sap" and "Grow", or "Circuit", "Sockets", "Charge" and "Wire"), colors per node kind (following the active UI style by default), node shapes, straight or curved edges, icons, glows and a layered backdrop. Three starter styles ship in /RPGSagaEngine/Data/Growth/Styles. Make your own to give your game its own identity.

The board editor: double-click a board. Add nodes from the right-click menu, draw links between nodes, move nodes freely, and edit the selected node in Details. The Issues tab lists unreachable nodes, missing abilities and other problems. Layout Preset generates the board again from its class in another preset.

In game: the player clicks a node (or presses Confirm) and a small menu opens next to it: Unlock with its cost, Details, Cancel. The member strip shows each member's portrait, name and points. Undo takes any step back for free while the page stays open.

6.1.5 Generators: content from your classes

The generators build balanced, editable progression from a class. The class's stat growth tells them what the class develops (its role), and its ability pool tells them what it can learn.

They are deterministic: the same class, pool and seed always give the same result, so you can re-run them after changing the class, then edit by hand. The Studio fills the ability pool for you (abilities like the class's own) and uses the archetype's role (Role Emphasis) to favor the right stats. Starting values are in Progression Systems → Generator (Generator Defaults).

6.1.6 Equipment mastery

On a weapon or armor, add Mastery Abilities (an ability and the Points To Master). While the item is equipped the wearer can use those abilities. Every won battle gives mastery points (Mastery Points Per Victory plus Per Enemy, times the item's Mastery Rate). At the goal, the ability is learned for good and stays after the item is removed. The party menu shows the progress ("Riposte: 12 / 30"). The Studio's 3. Content → Weapon with mastery wizard makes such an item.

6.1.7 Teachers

A Teacher (URSETeacherData) lists offers. Each has the ability, the price (money, items, the learner's points), who may learn it (class tags or traits, level) and story conditions. An offer is hidden, or greyed out with the reason when Show When Locked is on, until its conditions hold. A teacher can also offer a respec for money.

6.1.8 Learning from enemies

Add Enemy Learning rules to a class's plan, or let a trait do it for any character (Progression Systems → Trait Learning). A rule has a trigger, a chance per battle, an optional list of abilities or ability types, and whether the character must survive and the battle be won:

Never Learnable Types keeps attacks and monster-only actions out. Switch the whole feature off with Enable Enemy Learning.

6.1.9 Use growth

Turn on Progression Systems → Enable Use Growth. Abilities then rank up with use. Each ability uses its own Use Growth curve (URSEUseGrowthCurve) or the Default Use Growth curve: ranks reached after a number of battle uses, each with its power (percent of base) and cost (percent of base). The battle menus show the cost the character really pays. Exclude an ability with Exclude From Use Growth (summons, item abilities and story actions are never ranked). The starter set has DA_UseGrowth_Standard.

6.1.10 Respec and free undo

Respec Mode (Progression Systems → Respec):

ModeBehaviour
OffSpent points are final.
ItemConsumes the Respec Item per reset.
NPCOnly at a teacher that offers it, for its price.
FreeAny time outside battle, for free (default).

A respec gives back the points spent on attributes, catalog abilities and board nodes, minus Respec Point Penalty (0.1 by default: 10%, rounded, per currency; 0 gives everything back). The Growth page says exactly how much before the player confirms. Lessons from teachers, mastery and use ranks stay.

Free undo: while the Growth page stays open, the player can take back the last steps (raise, learn, unlock, Auto) for free, one at a time, up to Max Undo Steps (default 50). Closing the page makes them final.

6.1.11 Choosing the system per game, or letting the player choose

The system is part of the rules, so each foundation preset sets its own (Game Foundation → Progression → Progression System). Turn on Player Chooses At New Game to ask the player when a new game starts. The offered systems (New Game Choices, all three when empty), their names and descriptions, and the question text are in the settings.

6.2 How it works

6.2.1 Points, never stored as available

Available(Currency) = LevelGrants(Level) + BonusPoints − SpentPoints

Level grants come from the character's plan (FRSEPointsGrant::GetTotalAt(Level)). Bonus points come from battles, story effects and items. The state per character (FRSECharacterGrowth) records bonus points, spent points (and the share a respec keeps), attribute points, bought abilities, unlocked node ids and the current node (for travel cost), mastery progress, ability use counters, respec count and points lost to respecs. It is saved inside the Party section (FRSEPartyState::Growth), so co-op replicates it with the party. Only the undo journal of the open page is not saved.

6.2.2 What each system adds to a unit

For a battle unit or the party menu, the progression contributes:

After each won battle, RSEGrowth::ProcessBattle awards battle points (Battle Points rewards, default 5 board points per victory), mastery points, enemy-learned abilities and use counters, and returns the rewards for the results screen.

6.2.3 Commands

Every spend is a party command that works for the host and for guests: Allocate Attribute Points, Buy Growth Ability, Unlock Growth Node, Respec Character, Learn From Teacher, Auto Allocate Growth, Undo Growth Step, Clear Growth Undo, Set Progression System and Award Growth Points. A guest builds only the character it plays (Co-op Rules → Guest Equipment); choosing the system and awarding points are host-only. Guests (temporary members) keep a fixed build.

6.2.4 Automatic allocation

Characters nobody builds by hand (AI-controlled members, autoplay) spend their points with the Allocation Policy. After each battle and level-up, AI-controlled members spend automatically (Auto Allocate AI Controlled). The Auto button on the Growth page uses the policy too. The battle simulator, Balance My Campaign and the Progression Designer simulate party members with a typical build for the system in use (every point spent by the policy, battle points estimated with Simulated Victories Per Level and Simulated Enemies Per Victory), so balance stays valid whichever system you choose.

6.2.5 The Progression Designer

"Does my game have the pace I want?" The Progression Designer plays your whole campaign in the battle simulator with a standard party and shows where the party ends up under- or over-leveled, where battles drag on, where players would have to grind and where battles are too easy. An advisor proposes values (experience curve, enemy experience, enemy and class stat growth) and applies them only when you confirm, with undo.

  1. Make one progression zone per chapter (URSEProgressionZoneData): enemy level range, expected battles, target entry and exit levels, regular encounters, key battles.
  2. Make a campaign (URSECampaignProgressionData): the zones in order, the standard party, targets and simulation settings.
  3. Open RPG Saga Engine → Configurator → Tools → Progression Designer, pick the campaign, press Run projection, read the charts, then Run advisor. Tick the recommendations to keep and press Apply selected.

Zones also scale enemy levels in the game itself: a regular battle gets enemies at the party's level (plus offsets) inside the zone's range. Those rules (Scale Enemy Levels, Party Level Source, Enemy Level Offset, Overlevel Bias, Enemy Level Variance) are on the Progression page. The starter set includes a finished example, DA_Campaign_Starter. Full details are in docs/product/progression-designer.md.

6.3 Key classes and assets

Class / assetModuleRole
URSEGrowthSettingsRSECoreProgression Systems page: system, boards, respec, mastery, use growth, enemy learning, allocation, generator.
URSEGrowthPlanRSECoreA class's or character's points, attribute and ability catalog, board and enemy learning.
URSEGrowthBoard, FRSEGrowthNode, FRSEGrowthEdgeRSECoreA board: nodes, edges, regions, layout preset.
URSEGrowthBoardStyleRSECoreA board's words, colors, shapes and backdrop.
URSETeacherDataRSECoreA teacher's offers and respec.
URSEUseGrowthCurveRSECoreRanks reached by battle uses.
URSEGrowthAllocationPolicyRSECoreBlueprintable policy that spends points for AI-controlled and simulated members.
FRSEGrowthState, FRSECharacterGrowthRSECoreThe saved state of progression, inside the party state.
RSEGrowth (namespace)RSECoreThe rules: points, allocation, boards, respec, undo, teachers, mastery, battle processing.
URSEBlueprintLibrary_GrowthRSECoreBlueprint access (category RPG Saga → Progression).
URSEProgressionSettingsRSECoreProgression page: levels, experience curve, enemy levels.
URSEProgressionZoneData, URSECampaignProgressionDataRSECoreThe Progression Designer's zones and campaigns.
URSEGrowthEditorSettingsRSEEditorProgression Tools page and editor helpers.
/RPGSagaEngine/Data/GrowthcontentStarter plans, boards, board styles, DA_Teacher_Example, DA_UseGrowth_Standard.

6.4 Settings

Project Settings → RPG Saga Engine → Progression Systems (a rules-profile section). The properties that matter most, with their defaults:

GroupPropertyDefaultWhat it does
SystemSystemClassicThe progression system.
SystemPlayer Chooses At New Game, New Game ChoicesoffAsk the player at New Game.
PlansDefault PlanemptyPlan of classes that have none.
BoardBoard Scope, Shared Board, Default Board StylePer ClassWhere a board comes from and how it looks.
BoardTravel Cost Per Step0Points per step walked on the board.
BoardLayout RulesWhat makes a layout clean.
Battle PointsBattle Points5 board points per victoryPoints earned for won battles, per currency.
RespecRespec ModeFreeOff, Item, NPC or Free.
RespecRespec Item, Respec Point Penalty0.1The item consumed; the share of spent points a reset keeps.
RespecMax Undo Steps50Free undo depth.
MasteryEnable Mastery, Mastery Points Per Victory, Per Enemyon, 2, 1Equipment mastery rates.
Use GrowthEnable Use Growth, Default Use GrowthoffAbilities rank up with use.
Enemy LearningEnable Enemy Learning, Trait Learning, Never Learnable TypesonLearning from enemies.
Automatic AllocationAllocation Policy Class, Auto Allocate AI Controlled, Score Weightsbuilt-in, onHow points are spent for members nobody builds.
Automatic AllocationSimulated Victories Per Level, Simulated Enemies Per Victory4, 3Pacing assumed by simulations and generators.
GeneratorGenerator Defaults, Region Themes, Role Layouts, Fallback Layout, Role EmphasisInputs of the generators.

Related pages: Progression (maximum level, experience curve, enemy levels), Growth UI (the Growth page and board screen), Progression Designer (Power Samples, default 20) and, in the editor, Progression Tools (value ranges the AI schema uses). Full lists are in Appendix B.

Data fields: Class / Character → Growth Plan; Ability → Use Growth, Exclude From Use Growth; Equipment → Mastery Abilities, Mastery Rate.

6.5 Blueprint usage

All nodes are in the category RPG Saga → Progression (hidden World Context). Reading:

Get Progression System, Get Available Growth Points (Character, Currency), Get Growth Currencies, Get Allocated Attribute Points, Is Growth Node Unlocked, Get Growth Node Cost, Get Growth Plan, Get Growth Board, Get Mastery Points, Get Ability Rank, Get Growth Options, Can Learn From Teacher, Describe Growth Result.

Changing (each returns a Growth Result: Ok, Invalid Arguments, Not Member, Wrong System, Not Available, Not Enough Points, Cap Reached, Missing Prerequisite, Level Too Low, Conditions Not Met, Already Owned, Not Adjacent, Respec Not Allowed, Missing Item, Not Enough Money, Nothing To Reset, In Battle, Guest Character):

Allocate Attribute Points, Buy Growth Ability, Unlock Growth Node, Respec Character, Learn From Teacher, Auto Allocate Growth, Set Progression System, Award Growth Points.

Editor tools (category RPG Saga → Progression → Generator): Get Growth Generator Defaults, Generate Growth Point Tables, Generate Growth Board, Get Growth Board Problems, plus fill-level estimates.

Example 1: give board points as a quest reward.

  1. In your reward graph, Award Growth Points (Character = DA_Char_Hero, Currency = Progression.Points.Board, Amount = 3).
  2. Branch on the result: anything other than Ok can be reported with Describe Growth Result.

In data, use the effect Award Growth Points in the quest's reward list instead.

Example 2: a custom "Spend all" button.

  1. Auto Allocate Growth (Character).
  2. Get Available Growth Points (Character, Currency = Progression.Points.Attribute) to refresh the label.

Story effects and conditions (data): Open Teacher, Teach Ability, Award Growth Points; Progression System Is, Has Growth Node, Can Learn From Teacher.

6.6 C++ usage

Read points with the RSEGrowth rules, and spend them through the library, which sends the matching party command (so it works for the host and for guests):

#include "Growth/RSEGrowth.h"
#include "Growth/RSEGrowthTags.h"
#include "Growth/RSEBlueprintLibrary_Growth.h"
#include "Characters/RSEPartySubsystem.h"
#include "Core/RSEGameplayTags.h"

void SpendOnAttack(UGameInstance* GI, const URSECharacterData& Hero)
{
	URSEPartySubsystem* Party = GI->GetSubsystem<URSEPartySubsystem>();
	const int32 Points = RSEGrowth::GetAvailablePoints(
		Party->GetState(), Hero, RSEGrowthTags::Points_Attribute);
	if (Points <= 0)
	{
		return;
	}
	// Sends the Allocate Attribute Points command and returns its result:
	URSEBlueprintLibrary_Growth::AllocateAttributePoints(GI, &Hero, RSEGameplayTags::Stat_Attack, 1);
}

A custom allocation policy (deterministic, so simulations stay reproducible):

UCLASS()
class UMyPolicy : public URSEGrowthAllocationPolicy
{
	GENERATED_BODY()
public:
	virtual int32 ChooseOption_Implementation(const URSECharacterData* Character, int32 Level,
		const TArray<FRSEGrowthOption>& Options) const override
	{
		// Prefer abilities over attributes; -1 stops spending.
		for (int32 Index = 0; Index < Options.Num(); ++Index)
		{
			if (Options[Index].Kind == ERSEGrowthOptionKind::Ability) { return Index; }
		}
		return Options.IsEmpty() ? -1 : 0;
	}
};

Set it in Progression Systems → Allocation Policy Class. The same class works as a Blueprint child (override Choose Option).

6.7 Advanced

6.8 Troubleshooting

SymptomCauseFix
The Growth page does not showThe game uses ClassicPick another system, or let the player choose at New Game.
A node cannot be openedIt needs a neighbouring open node, its level, its story condition, or more points (travel cost included)The node's details say which.
A class has no pointsIt has no plan and Default Plan is empty, or the plan has no grant for that currencyAdd a plan or a Point Grant.
Allocate Attribute Points returns Wrong SystemThe call belongs to another system than the game'sCheck Get Progression System.
Cap Reached on an attributeMax Points or Max Points Per Level of that attributeRaise the cap in the plan, or wait for a higher level.
Simulated battles became much easierThe simulator now builds characters with their points spentRe-balance with Balance My Campaign, or set the scenario's progression system to Classic to compare.
Guests cannot be builtGuests keep a fixed buildBy design.
A respec returns fewer points than were spentRespec Point PenaltySet it to 0 to give everything back.
Enemy learning never triggersThe trigger, chance, survival or victory rule is not met, or the type is in Never Learnable TypesCheck the rule in the plan, and the battle result.

6.9 See also

7. Abilities and statuses

In short: An ability is anything a unit can do in battle: a sword strike, a spell, a heal, a thrown bomb. A status is a lasting effect on a unit: poison, haste, a shield, charm. Both are data assets. One ability works in every battle mode, with its own rules per mode. You build new content by filling fields and picking effects, not by writing code.

7.1 Basics

7.1.1 The words

WordMeaning
AbilityA data asset (URSEAbilityData). Shared fields (type, element, cost, effects) plus separate rules per battle mode.
EffectOne thing an ability does: damage, heal, apply a status, knock back, summon. Effects are small objects listed in the ability's Effects array.
StatusA data asset (URSEStatusData) that changes a unit while it lasts: stat modifiers, granted tags, damage or healing over time, a shield, control over who the unit fights for.
Use conditionA yes/no check on the user that must hold before the ability can be chosen ("needs a shield equipped", "HP below 30%").
ReactionA passive trigger: when something happens (the unit is hit, an enemy moves), the unit uses a response ability by itself.
PassiveAn ability that is never chosen from a menu. It only grants modifiers or reactions while the unit has it.
Tier familyA group of abilities shown as one menu entry that opens into stronger tiers (Fire, then Fire II, then Fire III).

7.1.2 Make your first ability

  1. Open RPG Saga Engine → Studio → Content → New ability, or right-click a folder in the Content Browser and choose RPG Saga → Ability. The wizard walks through the same fields as the asset, and its last step shows the ability in action.
  2. Give it a Description, an Ability Type tag (Ability.Type.Attack, Skill, Magic or Action: this decides which command of the battle menu lists it), an optional Element, and a Target Filter (enemies, allies, allies and self, self, all units).
  3. Under Costs add what it consumes (for example Resource.MP, 8). Under Item Costs you can add ammunition (1 Arrow).
  4. Under Effects press + and pick Damage. Choose the Kind (Physical, Magical or Fixed), the Power, and whether it can miss or crit. Add Apply Status next to it if you want, with a Chance.
  5. Fill the rules for the modes you use. A grid battle reads Tactics Rules (range, area, Action Point cost), a classic battle reads ATB Rules (scope, row behavior, charge time). The turn-based mode uses the ATB rules too.
  6. Give the ability to someone: add it to a class's ability list, to a piece of equipment's Granted Abilities, to a Pact, or teach it with a story effect (see Learning and forgetting abilities).
  7. Press Test ability (below) to measure it without playing.

The plugin ships a full set of examples in /RPGSagaEngine/Data/Abilities/: DA_Ability_Strike, DA_Ability_Fire (area, elemental, costs MP), DA_Ability_Cure, DA_Ability_Raise (a revive), DA_Ability_ShieldBash (a use condition), DA_Ability_PoisonDart (a status), DA_Ability_TK_Overwatch (a reaction) and many more. Open them to see how a finished ability looks.

7.1.3 Test an ability without playing

Every ability sheet has a Test & preview tab and a Test ability button. The Studio wizard shows the same tools.

  1. Pick the battle mode (Grid, Live, ATB or Turn), the caster (any character or an archetype) and the targets (a preset: one enemy, three enemies, an ally and two enemies, a boss, three allies).
  2. Set the level, the seed and the number of runs. For abilities usable only at low HP, set the caster's HP %.
  3. Press Test ability. Each run uses a fresh headless mini battle, so hundreds of runs take about a second. The report lists, per unit, how often it was affected, hits, misses, crits, damage and healing per use (lowest, highest, average), the real chance each status landed, what one use costs, the area it covers and a Step by step trace of the first use.
  4. Copy as text puts the report on the clipboard.

The same seed always gives the same numbers, so you can change one value and compare. Above the table a 3D preview plays the ability's presentation (animation, effects, projectile, floating numbers) in a small private world, with Loop, speed and camera choices. Defaults for both are in Project Settings → RPG Saga Engine → Ability Test and Studio → Ability Preview.

7.2 How it works

An ability's life, in every battle mode:

  1. A unit has a list of abilities, gathered from its class, equipment, Pact and the abilities it learned.
  2. When the player (or the AI) picks one, the battle checks the use conditions, the costs (resources, item costs, Action Points in grid battles) and the mode's own rules (range, scope, ready state). A refusal carries a reason that the menu shows.
  3. The battle resolves each effect in the Effects array. Effects that work per target run once per affected unit. Effects that move the user or change the field (leap, dash, teleport, zones, summons) run once per use before the per-target ones.
  4. Every change becomes a battle event (damage dealt, status applied, unit moved, reaction triggered...). The presentation layer listens to those events to play animations and numbers. The rules never wait for the presentation.
  5. After the action, queued reactions resolve (a counterattack, a guard), up to a depth limit that stops endless chains.

All randomness comes from one seeded stream per battle. The same seed and the same commands always give the same battle, in the editor, in the simulator and over the network.

7.2.1 Per-mode rules

ModeRules blockMain fields
Grid TacticsTactics Rules (FRSEAbilityTacticsRules)Action Point cost, min and max range, vertical tolerance, line of sight, area shape and radius, falloff, trajectory (direct or arc), uses per turn, ends turn, power multiplier
ATB and turn-basedATB Rules (FRSEAbilityATBRules)scope (single, row, all), ignores rows, charge time, power multiplier
Free TacticsFree Tactics Rulesreach in meters and shapes on the live map (see Free Tactics)
ActionAction Rulesreal-time timings and hit shapes (see Action battles)
Outside battleField Rules (FRSEAbilityFieldRules)usable from the party menu, can target the whole party, party power multiplier, and whether it can act on the world

Each mode block has a Power Multiplier so you can balance one mode without touching the others.

Area shapes for Tactics are Single, Diamond, Cross, Line, Cone, Ring, Rectangle and Mask (a hand-drawn pattern). Power can fall off with distance from the center, and an Arc trajectory flies over lower obstacles.

7.2.2 Effects you can pick

Pick effects in the Effects list; the display names below are what you see in the picker.

GroupEffects
CoreDamage, Heal, Revive, Apply Status, Remove Status, Learn Ability, Summon
PositionKnockback / Pull, Teleport, Swap Positions, Leap / Hop-over, Dash / Charge
CombatMulti-hit, Chain / Bounce, Drain, Shield / Barrier, Taunt / Provoke, Steal, Dispel / Purge, Turn Manipulation, Action Points, Transform, Capture / Recruit, Scan
ResourcesResource Gain / Loss (any resource, with a formula such as 10 + Attacker.Magic * 0.2)
FieldSummon Units, Create Zone, Spawn Object (grid battles; the classic modes use a documented fallback)
CustomCustom (Blueprint), for your own logic

Position effects have a documented meaning in the classic modes too. A knockback becomes a row change, a swap exchanges rows, a spawned wall does nothing. The picker's tooltip and the validation tell you when an effect has no meaning in a mode.

7.2.3 Statuses

A status (URSEStatusData) is data too. The main fields:

Stat modifiers always combine in the same order: base, add, percent, multiply, override, clamp, then the attribute's own bounds. The result never depends on which status or item came first.

7.2.4 Control statuses

A status can change who decides what its bearer does. Add a Behavior under Control → Behaviors:

BehaviorWhat it does
ConfuseEach single-target action goes, with Redirect Chance, to a random unit the bearer could reach: an ally, an enemy, or itself.
CharmThe bearer fights for the other side (or a Fixed Team) under the AI while the status lasts.
BerserkThe bearer attacks on its own and may only use abilities of the allowed types (basic attacks by default).
Custom (Blueprint)Your own: override Allows Ability, Get Control Team, Redirect Target and On Turn Started.

They work in every battle mode and the AI follows them. A party member under control is played by the AI until the status ends (by duration, a cure, damage if Removed By Damage is on, the unit falling, or the battle's end). When the last fighter of a side is charmed away, that side has lost. The starter content includes Confuse, Charm and Frenzy statuses with example abilities (Bewilder, Enthrall, Incite).

7.2.5 Use conditions

Use Conditions is a list of checks on the user. All must hold in every mode. The menus show a failed ability disabled with a reason: the ability's Use Conditions Text when filled in, otherwise the failing condition's own text. The AI and the simulator never choose a disabled ability.

ConditionHolds when
Health, Resource, Attributea percentage, resource or final attribute compares with a value
Has Statusthe user has (or lacks) a status
Has Tagthe user has (or lacks) gameplay tags: class, equipment types (Equip.Type.Shield), traits
Equippedthe user wears an equipment type or a specific item
Rowfront or back row (classic modes)
Positiongrid: next to an enemy, alone, on high ground, flanking
Identitythe user is one of some characters, or has a class tag
Battle ModeTactics, ATB or turn-based
Unit Count, Turn Number, Enemies In Rangecounts compared with a number
Storystory conditions: flags, items, party members, puzzles (the same language dialogs use)
Not / Any Ofcombine other conditions

Conditions about "the target" cannot go here, because no target is chosen yet. Validation reports them.

7.2.6 Item costs and ammunition

Item Costs consume items from the team's items on every use. The menu shows "1 Arrow (x12)". Without enough items the ability is disabled. Enemies ignore item costs unless Enemies Pay Item Costs is on in Ability Toolkit.

7.2.7 Reactions and passives

An ability with Passive ticked never appears in menus. Two lists make it useful:

Reactions are queued and resolved after the action that caused them, up to Max Reaction Depth (default 1, so a counter is not countered).

7.2.8 Tier families

A URSEAbilityTierFamily asset lists abilities from the base tier up. The battle menu shows the family as one entry, and choosing it opens the tiers the unit knows, each with its own cost and power. A new family is one data asset.

7.2.9 Learning and forgetting abilities

A character can learn an ability for good outside its class progression. Learned abilities appear after class, equipment and Pact abilities, in every battle mode, and are saved.

7.2.10 Presentation and action commands

How an ability looks (animation, effects, camera, sounds) is separate from what it does. The Presentation block points to a timeline asset; empty means a default from the approach (melee, ranged, in place) and the moment (normal or super move). See Camera and battle presentation.

An ability can also ask for a timed button press (Action Command): a ring closes and a Good or Perfect press adds a bonus, and enemy attacks can be blocked with a timed press. The windows and bonuses are on the ability; the global rules are in Project Settings → RPG Saga Engine → Action Commands.

7.3 Key classes and assets

Class / assetModuleRole
URSEAbilityDataRSECoreThe ability data asset.
URSEAbilityEffectRSECoreBase of every effect (URSEEffect_Damage, URSEEffect_Heal, URSEEffect_ApplyStatus...).
URSEEffect_CustomRSECoreBlueprintable effect for your own logic.
URSEStatusDataRSECoreThe status data asset.
URSEStatusBehaviorRSECoreBase of control behaviors (_Confuse, _Charm, _Berserk, _Custom).
URSEAbilityReaction, URSEPassiveModifierRSECoreReaction and passive entries inside an ability.
URSEAIConditionRSECoreBase of use conditions (URSEAICondition_HasTag, _Equipped, _Row, _Position, _Identity, _BattleMode, _Story).
URSEAbilityTierFamilyRSECoreA family of tiers shown as one menu entry.
URSEAbilityTestLibraryRSECoreRuns the headless ability test from Blueprint, Python or C++.
URSEGASBridgeComponentRSEGASConnects a character's Ability System Component to battles.

7.4 Settings

Project Settings → RPG Saga Engine:

GroupWhat it holds
Ability ToolkitMax Reaction Depth (1), Reactions In Classic Modes (on), taunt rules (Taunt Forces Target, Taunt Target Multiplier), Max Leap Chain (8), Max Slide Tiles (3), Max Bonus Action Points (4), One Zone Per Tile, Max Chain Explosions (32), Can Target Objects, Capture Needs Victory, Enemies Pay Item Costs (off), and the AI value of each effect. It is a rules-profile section.
Ability InfoLabels for role tags and how the battle menu groups and describes abilities.
Ability TestDefault caster, target presets, level, runs, team sizes of the headless test.
Action CommandsGlobal timing windows and bonuses for timed presses.
Combat FormulasThe damage, heal, hit and critical formulas (see Battle fundamentals).

The full lists are in Appendix B. The asset types are in Appendix D.

7.5 Blueprint usage

Teach an ability from a Blueprint:

  1. Event (for example On Interact) → Learn Ability (Character = DA_Char_Hero, Ability = DA_Ability_Fire).
  2. Branch on the returned result to show a message if the character already knew it.

Related nodes in the party library (category RPG Saga | Party | Abilities): Forget Ability, Has Learned Ability, Get Learned Abilities, Get Member Abilities. The party subsystem has an On Ability Learned event.

Run the headless test from a script:

  1. Make Ability Test Request (Ability, Mode tag).
  2. Adjust the request (caster, targets, runs, seed).
  3. Run Ability Test → Ability Test Report To Text → Print String.

Write a custom effect:

  1. Create a Blueprint class with parent Custom (Blueprint) (URSEEffect_Custom).
  2. Override On Apply (Battle, Source Id, Target Id, Target Tile, Power Multiplier). Inside, call the battle's nodes: Deal Damage, Heal Unit, Change Resource, Apply Status, Remove Statuses, Shift Turn.
  3. Draw random numbers only with Roll Int and Roll Percent. They come from the battle's stream, so replays and the simulator stay exact.
  4. Override Preview Damage to give the AI and the damage forecast an expected value. Without it the AI sees no value in the effect.
  5. Tick Once Per Use if the effect should run once instead of per target.
  6. Add your class to an ability's Effects list.

A custom reaction condition is a Blueprint subclass of Reaction that overrides Can Trigger. A custom passive overrides Is Active For. A custom use condition is a subclass of AI Condition: override Is Met and Get Requirement Text.

The full node list is in Appendix A.

7.6 C++ usage

A new effect in C++ is a subclass of URSEAbilityEffect. Override Apply and, so the AI can see it, AddToPreview.

UCLASS(meta = (DisplayName = "Drain Morale"))
class UMyEffect_DrainMorale : public URSEAbilityEffect
{
    GENERATED_BODY()
public:
    UPROPERTY(EditAnywhere, Category = "Morale", meta = (ClampMin = "0"))
    float Amount = 10.f;

    virtual void Apply(const FRSEAbilityContext& Context, int32 TargetId) const override
    {
        Context.Battle->ChangeResource(Context.SourceId, TargetId, MoraleTag, -Amount);
    }

    virtual bool AppliesOncePerUse() const override { return false; }

private:
    FGameplayTag MoraleTag;
};

The picker lists every concrete subclass with its DisplayName, so no registration is needed. Useful overrides: AddToPreview (what the AI and the forecast read), CheckRequirement (extra conditions beyond costs), ApplyInField (what the effect does from the party menu), AppliesOncePerUse, DescribeEffect (tooltip text) and ValidateInAbility (editor validation).

Run the headless ability test from C++:

FRSEAbilityTestRequest Request = URSEAbilityTestLibrary::MakeAbilityTestRequest(Ability, ModeTag);
Request.Runs = 200;
const FRSEAbilityTestReport Report = URSEAbilityTestLibrary::RunAbilityTest(Request);
UE_LOG(LogTemp, Log, TEXT("%s"), *URSEAbilityTestLibrary::AbilityTestReportToText(Report));

7.7 Advanced

7.7.1 Gameplay Ability System bridge (RSEGAS)

Teams that already use Unreal's Gameplay Ability System can keep it. The RSEGAS module is a bridge: the battle stays the source of truth for hits, damage and turns, and the bridge mirrors values in and out. RSECore never uses GAS types, and nothing happens until an actor has the component.

Setup:

  1. Create an RSE GAS Attribute Map data asset. Add one row per value the battle should read or write: the RSE tag (Stat.Attack, Resource.HP), the GAS attribute, a Direction (In, Out or Both) and a Scale. With the included RSE GAS Sample Attribute Set, press Fill Sample Rows.
  2. Optionally create an RSE GAS Status Map (statuses to loose tags and effects) and an RSE GAS Ability Map (an event tag or ability tags sent when an RSE ability is used).
  3. On your character Blueprint, add the RSE GAS Bridge component. Set Character (the RSE character data asset) and the maps. If the Ability System Component lives elsewhere, call Set Ability System.

What flows:

The component's options (Supply Stats, Apply Results To GAS, Mirror Statuses, Forward Events, Forward External Changes, Restore After Battle, Priority) are all on by default except Restore After Battle.

RSE abilities can also run your GAS content. In an ability's Effects list add Apply Gameplay Effect (GAS) or Activate Gameplay Ability (GAS). In a presentation timeline add the Gameplay Cue (GAS) step. These do nothing on units without a bridge or on a machine that is not the authority.

Export to GAS (editor, one way) generates Gameplay Effects and Gameplay Abilities from your statuses and abilities (RPG Saga Engine → Advanced tools → Content → Export to GAS..., or the RSEGASExport commandlet). Always start with a dry run. The report lists what GAS cannot hold (grid rules, reactions, control behaviors...). Defaults live in Project Settings → RPG Saga Engine → GAS Export.

7.7.2 Content from spreadsheets and AI

Abilities, statuses and their use conditions can be created and updated from spreadsheets (Configurator → Tools → Content Import), and they appear in the AI prompt packs. The effect type in a sheet is the display name without spaces, for example KnockbackPull(Distance=2). See Editor tools.

7.7.3 Network and performance notes

7.8 Troubleshooting

SymptomCause and fix
The ability is always disabledRead the reason in the command help. A Has Tag on an equipment type needs the equipped item to grant that type (its Granted Tags).
Validation says a condition is "about the target"Use conditions run before a target is chosen. Move the check to the effects or the targeting rules.
Test ability shows nothing affectedCheck the targeting rules for the chosen mode (range, area, target filter). The Step by step list says why a use was refused.
The preview shows no effectsThe ability's presentation has empty slots. Fill them or use the Animation & FX Library.
A charmed party member never gets commandsIntended. The AI plays it until the status ends.
Enemies use arrows they do not haveIntended. Turn on Enemies Pay Item Costs in Ability Toolkit to change it.
A manual is refusedThe member already knows the ability, or the item is not usable in the field or does not target an ally.
Counterattacks never fireMax Reaction Depth is 0, or the trigger unit is out of range (Requires Range), or the classic modes have Reactions In Classic Modes off.
The AI never uses my custom effectPreview Damage (Blueprint) or AddToPreview (C++) is not overridden, so the AI sees no value.

7.9 See also

8. Items, inventory and economy

In short: One item system serves every battle mode and exploration. Items are data assets in four kinds (consumables, equipment, key items, documents). The party carries them in a shared grid or in per-character bags, and money, shops, inns, chests and loot tables are built from the same data and the same Conditions and Effects language as dialogs and quests.

8.1 Basics

8.1.1 The four kinds of item

KindAsset classWhat it is for
ConsumableURSEConsumableDataUsed up: potions, bombs, cures, manuals. Its effect is an ability (Use Ability).
EquipmentURSEEquipmentDataWorn or wielded. Gives stats, affinities, tags and abilities while equipped.
Key itemURSEItemDataStory and puzzle items. Never used up by accident, never sold, never discarded.
DocumentURSEDocumentDataA readable note or book, with one or more pages of text.

All kinds share one asset type, so there is one ID space for saves and one place to look items up.

Fields every item has (URSEItemData):

8.1.2 Make your first consumable

  1. RPG Saga Engine → Studio → Content → New item (pick a family such as potion, status cure or bomb), or make the data asset by hand in the Content Browser (Miscellaneous → Data Asset, class RSEConsumableData).
  2. Set the Use Ability. Either pick an existing ability (a heal, a bomb) or make a new one. The ability's Tactics Rules give the item its range, area and Action Point cost in grid battles, and its ATB Rules give it a scope in classic battles. That is how a bomb has an area on the grid and hits a row in ATB.
  3. Tick Usable In Battle (default on). To allow use from the party menu, open the use ability's Field Rules and tick Usable In Field.
  4. Set Buy Price. Optionally add the item to a shop and a loot table.

The plugin ships examples in /RPGSagaEngine/Data/Items/: DA_Item_Potion, DA_Item_Ether, DA_Item_Bomb, DA_Item_Antidote, DA_Item_RevivalPlume, DA_Item_ManualBerserkSlash (teaches an ability), DA_Key_SpireKey (a key item), DA_Doc_FieldGuide (a document) and a full set of DA_Equip_* equipment.

8.1.3 Equipment

An equipment item has a Slot Type (Equip.Slot.*) and an Equipment Type (Equip.Type.*). Classes list the types they may use. While worn it gives:

Other fields: Two Handed (weapons that also occupy the off-hand slot), Mastery Abilities and Mastery Rate (the item teaches an ability for good after enough use), Bag Size Bonus and Carry Capacity Bonus (a backpack in the per-character inventory), Appearance Part and Weapon Presentation (how it looks on the body, see Weapons), and Action Weapon for action battles.

The slots a character has are a list in Project Settings → RPG Saga Engine → Items → Equipment Slots. Each slot has an id (Weapon, OffHand, Accessory1...), a name, the slot type it accepts, and optional body part and attach settings for the paperdoll. You can start from an Equipment Slot Set preset (use Apply To Project), or let a Game Foundation preset write the list for you.

Equipment results are explicit. Equip returns Ok, Unknown Slot, Wrong Slot, Class Cannot Use, Not In Inventory, Locked (a guest's fixed equipment) or Blocked By Two Handed.

8.1.4 Documents and key items

A document shows its pages when the player reads it from the inventory. A key item is used on the thing in front of the player ("Use on door") or combined with another key item. The puzzles that react to them are in Exploration.

8.1.5 Money, shops, inns and chests

Shops, loot tables and chests are plain data and actors, described below. A shop is opened by the Open Shop story effect, for example from an NPC's dialog.

8.2 How it works

8.2.1 The flow

Items (data) ──► Inventory (RSECore: stacks, grid layouts, containers)
                  │              │
 Party state ◄────┘              └──► Loot distribution rule ──► who receives what
 (money, equipment, shop stock)
Economy rules (RSECore) ──► Shop / Inn / Chest / Battle loot
Screens (RSE): inventory, shop, chest, reward feed

8.2.2 Inventory modes

Project Settings → RPG Saga Engine → Inventory Rules → Mode:

ModeBehaviorBest for
Shared (default)One party inventory, shown as a grid with tabs. Everyone uses it.Classic JRPG, ATB, Tactics
Per CharacterEach member carries a bag. A large shared stash opens at save points (or rest places, or anywhere, by Stash Access). Key items and documents stay shared.Live-field and action games

The mode can change at any time, in either direction. A profile or a Game Foundation preset can set it. Per Character to Shared merges every bag, the stash and the pending loot. Shared to Per Character distributes the items by the distribution rule (Migration: Distribute) or puts everything in the stash (All To Stash). Equipment worn never moves. Nothing is lost.

In Per Character, loot that nobody can carry waits in a Pending Loot tab until taken or distributed (Overflow), and you can add weight: Use Weight gives each member a Carry Capacity (base plus a stat plus equipment), with Overweight Rule Display Only or Block Adding.

8.2.3 Who receives loot

Everything the party gains passes one settle step with a source (battle, chest, pickup, quest, shop, story). A distribution rule only ranks the receivers. The framework fills the best receiver, then the others, then the stash, then the Overflow rule. Built-in rules:

RuleBehavior
Smart (default)Equipment goes to the member who gains most from it (weighted stat changes, with Stat Weights and Minimum Upgrade). Consumables are balanced, steered by Role Rules (ethers to mages). Deterministic.
PickerWhoever picked it up (the leader for battle rewards).
Round RobinNext member for each stack.
All To StashEverything goes to the stash.

A different rule can be set globally, per chest (Loot Rule) or per encounter. You can write your own (see Advanced).

8.2.4 Battle loot and money

On victory the rules roll the loot table of every defeated enemy, in battle order, then the encounter's own loot (Encounter Loot) and its Reward Items. Each entry rolls on its own, so several can drop. The dice come from a stream derived from the battle's seed, so the same battle always drops the same things. The simulator rolls loot exactly like the game.

One battle never gives more money than Battle Money Cap allows for the level of its strongest defeated enemy (a curve you edit). This keeps a late boss's loot table from paying a fortune when used on an early enemy.

8.3 Key classes and assets

Class / assetModuleRole
URSEItemDataRSECoreBase item; also the key item class.
URSEConsumableDataRSECoreConsumable with a Use Ability.
URSEEquipmentDataRSECoreEquipment.
URSEDocumentDataRSECoreReadable document.
URSESaveItemDataRSEA consumable that saves the game anywhere allowed (see Save and load).
URSEEquipmentSlotSetRSECoreAn editor-only preset of equipment slots (classic JRPG set, action-RPG set). Apply To Project writes it into Items → Equipment Slots.
FRSEInventory, FRSEItemStackRSECoreThe shared inventory: stacks of soft item references.
URSEInventorySubsystemRSECoreReceives and applies inventory commands. Fires On Command Applied.
URSEInventoryPermissionPolicyRSECoreWho may do what in co-op.
URSELootDistributionRuleRSECoreBase of distribution rules (URSELootRule_Smart, _Picker, _RoundRobin, _AllToStash).
URSEShopDataRSECoreA shop's stock and rules.
URSELootTableRSECoreMoney range and weighted drops.
ARSEChestRSEA chest actor.
URSEStashPointComponentRSEMarks an actor (inn, camp) as a place that opens the stash.
URSEBlueprintLibrary_ItemsRSECoreGive, take, count items, money, shop and inn functions.

8.4 Settings

Project Settings → RPG Saga Engine:

GroupKey settings (defaults)
ItemsDefault Max Stack (99), Equipment Slots, Off Hand Slot Id, Starting Items, Rarity Tiers and Default Rarity, Stash Tabs (grid containers with filters), Sort Order, Max Item Grid Size (4x4), Allow Discard (off), Permission Policy Class.
Inventory RulesMode (Shared), Shared Kinds, Migration (Distribute), the Bag, Stash and Pending Loot containers, Stash Access (Save Points) and Stash Access Radius, Money Mode, weight options, Distribution Rule, Auto Distribute Rule, Overflow (Pending Loot), Stat Weights, Role Rules. A rules-profile section.
EconomyCurrency Name, Currency Symbol, Money Format ({Amount}, {Symbol}, {Name}), Max Money, Starting Money (200), Sell Ratio (0.5), Buy Price Multiplier (1), Default Inn Cost (50), Inn Revives KO (on), Cap Battle Money and the Battle Money Cap curve. Sell ratio, price multiplier and inn settings can change per profile. The currency, cap and starting money are global.
Inventory UI, Economy UIThe screens' look and behavior (RSE).

The complete lists are in Appendix B.

8.5 Blueprint usage

All nodes below are in the RPG Saga | Items and RPG Saga | Economy categories.

Give the player an item when an NPC dialog ends:

  1. In the dialog, add the story effect Give Item (Item = DA_Item_Potion, Count = 3). No Blueprint needed. Use the Has Item and Take Item conditions and effects the same way.
  2. From Blueprint instead: Event → Give Item (Item = DA_Item_Potion, Count = 3). The node returns how many were added, capped by the stack limit.

Check a key item before opening a door:

  1. Has Item (Item = DA_Key_SpireKey) → Branch.
  2. True: Take Item (if the key is used up), then open the door.

Open a shop and buy:

  1. Dialog effect Open Shop (Shop = DA_Shop_Starter_Z1). The screen opens after the running dialog ends.
  2. Scripted purchases: Can Buy (Shop, Entry Index) → Buy (Shop, Entry Index, Count). Both return a result: Ok, Not Enough Money, Out Of Stock, Unavailable, Inventory Full, Not Sellable or Not Enough Items. Get Buy Price, Get Stock Left and Get Max Buy Count feed a custom shop UI.

Money and inns: Get Money, Add Money, Spend Money, Get Inn Cost and Rest At Inn. In story data use the Has Money condition and the Give Money, Take Money and Rest At Inn effects. Gate the inn choice with Has Money.

Equipment: the party library offers Get Equipment, Get Equipped Item, Can Equip, Equip, Unequip, Get Equip Candidates and Preview Equip (the stats before and after).

React to changes: bind to the inventory subsystem's On Command Applied.

For a full list see Appendix A.

8.6 C++ usage

#include "Items/RSEBlueprintLibrary_Items.h"

// Reward the player and report what happened.
const int32 Added = URSEBlueprintLibrary_Items::GiveItem(this, PotionAsset, 3);

if (URSEBlueprintLibrary_Items::HasItem(this, KeyAsset))
{
    URSEBlueprintLibrary_Items::TakeItem(this, KeyAsset, 1);
}

const ERSEShopResult Result = URSEBlueprintLibrary_Items::Buy(this, ShopAsset, /*EntryIndex*/ 0, /*Count*/ 1);

Equipment changes go through the party library (URSEBlueprintLibrary_Party::Equip, which returns ERSEEquipResult). If you write your own inventory screen, send FRSEInventoryCommand structs through URSEInventorySubsystem::SubmitCommand. Never write the party state directly.

Extension points:

8.7 Advanced

8.7.1 Grid containers and stash tabs

The shared inventory is drawn as a grid. Stash Tabs is a list of container definitions (id, name, icon, grid size, filter). An item appears in the first tab whose filter accepts it, so every item always has a place. A filter matches item kinds and a gameplay tag query over rarity, category, slot and equipment type. A container with Max Height 0 grows as needed. A bounded container (a chest) leaves items it cannot fit unplaced. Sort Order lists the keys auto-sort compares (kind, rarity, category, equip slot, size, name).

8.7.2 Writing a distribution rule

Create a Blueprint class derived from RSE Loot Distribution Rule, override Rank Targets, and pick it in Inventory Rules → Distribution Rule. The input is the party state and a query (the items and their source). The output is a ranked list of containers. Do not fill containers yourself. The framework fills them in order and handles overflow.

8.7.3 Co-op

Each inventory change is a serializable command that the host validates and applies. Pickups To Picker In Coop sends what a player picks up to that player's member first. With Per Character inventory and the default policy, a guest may take items only from the bag of the member they play (see Co-op and online).

8.7.4 Save and migration

Inventory state, grid layouts, shop purchases and money are part of the party save section, so old saves load into the mode in use and distribute as described above. See Save and load.

8.7.5 Content from spreadsheets

Items, shops and loot tables import from spreadsheets (Configurator → Tools → Content Import) and appear in the AI prompt packs. See Editor tools.

8.7.6 Performance

The inventory board draws without per-frame rebuilds. It refreshes when a command is applied. Item icons can be a live 3D preview (Inventory UI settings, CVars RSE.Inventory.LivePreview, RSE.Inventory.PreviewScale, RSE.Inventory.PreviewRate). See Appendix C.

8.7.7 Development commands

In development builds: RSE.Items.Give, RSE.Items.List, RSE.Items.Reset, RSE.Economy.Money, RSE.Economy.OpenShop, RSE.Economy.Rest and RSE.Inventory.ForceStashAccess (stash everywhere). Appendix C lists the arguments.

8.8 Troubleshooting

SymptomCause and fix
A shop will not sell my itemIts Buy Price is 0 and the entry has no Price Override. Set one.
The player cannot sell an itemKey items and documents never sell. Check Sellable and a non-zero price.
An item vanished from the sale listWorn equipment is not in the inventory. Unequip it first.
Equip returns Class Cannot UseThe class does not list the item's Equipment Type.
Equip returns Wrong SlotSlot Type does not match any slot's Accepts Slot Type in Items → Equipment Slots.
A consumable cannot be used from the menuThe use ability's Field Rules → Usable In Field is off, or the target filter does not allow an ally.
The player cannot discard itemsItems → Allow Discard is off (the default). Key items and documents can never be discarded.
A chest stays closedIts Opened Flag is missing, a Required Key is not held, a condition fails, or the stack limit would be exceeded.
Loot went to the wrong member (Per Character)The distribution rule decides. Check Stat Weights, Role Rules and the encounter's or chest's Loot Rule.
Money from a battle is lower than the tableCap Battle Money limits it by the strongest defeated enemy's level. Adjust the curve or turn it off.
The stash will not openStash Access is Save Points and the player is outside Stash Access Radius. Add a RSE Stash Point component to an inn or camp, or change the access.

8.9 See also

9. Battle fundamentals

In short: Every fight in the plugin is an encounter: a data asset that names the battle mode, the enemies, the rules, the objectives and the rewards. The modes (grid Tactics, Free Tactics, ATB, turn-based, Action) share one core: units, abilities, damage, statuses, victory and defeat, rewards. This chapter covers that shared core, how encounters start, the battle mode override, battle sites, and the headless battle simulator that tests it all without graphics.

9.1 Basics

9.1.1 The words

WordMeaning
Battle modeHow a fight is played. The content decides it, never the player: Battle.Mode.Tactics, FreeTactics, ATB, Turn or Action.
EncounterOne battle as a data asset (URSEEncounterData).
Battle directorThe actor that runs one battle on the map: ARSETacticsBattleDirector for a grid, ARSEATBBattleDirector for a classic stage.
Battle siteAn actor (ARSEEncounterSite) that holds one encounter's places for every mode, so the same encounter can run in any mode that makes sense.
UnitOne combatant in a battle. Each unit has an id used by the battle's functions.
TeamA side. Player and enemy teams are gameplay tags (Team.Player, Team.Enemy).
Rules profileA data asset that overrides some settings (damage, grid, AI...) for one encounter, a boss, or the whole game.

9.1.2 Make your first encounter

  1. Open RPG Saga Engine → Studio → World → New battle (see the Studio). Pick a battle mode, add enemies from your library, set levels and rewards, and let the wizard place the battle in the open level.
  2. Or create the asset by hand: Miscellaneous → Data Asset → RSEEncounterData. Set Battle Mode, add entries to Enemies, and (for grid battles) lay them out with the Encounter Layout mode (below).
  3. Put a trigger in the level: an RSE Encounter Trigger volume that points at the director (or at an RSE Encounter Site). Walk into it in Play.
  4. Check the encounter with the headless simulator (below) before you tune it by playing.

The starter set in /RPGSagaEngine/Data/Encounters/ has a whole campaign of examples (DA_Encounter_Starter_Z1_Pack, _Elite, _Key, _Boss and so on for each zone).

9.1.3 What an encounter holds

GroupFields
ModeBattle Mode, Co-op Conversion and Co-op Alternative (how a live battle behaves in co-op), Allow Mode Override, Override Modes, Mode Rules Profiles.
SidesPlayer Team, Enemy Team, Enemies (character, level, tile and facing for grids, row for classic, AI profile, key unit, Pact, starting statuses), Enemy Items (the enemy team's item pouch), Required Characters.
LevelsLevel Mode: Scaled (enemy levels follow the party within the progression zone's range) or Fixed (story and boss battles). Progression Zone, Scaled Level Offset.
ObjectivesVictory Conditions and Defeat Conditions. Empty victory means "defeat every other team". Losing every player unit is always a defeat.
RewardsReward Items, Loot Rule, Encounter Loot (money and drops), Victory Effects (story effects run on a win). Experience comes from the defeated enemies.
FlowCan Flee (classic battles), Defeat Continues Story (the party may lose without a game over).
AIIntelligence, Min Intelligence, Max Intelligence (the limits adaptive difficulty may use).
GridDeployment Tiles, Field Objects (walls, barrels).
ScriptedReinforcements and Battle Events.
PresentationRules Profile, Battle Music, Transition Style, Intro Text.
BalanceBalance Role for the balance tools (Auto, Normal, Elite, Key, Boss, Ultra, Excluded).

Encounters hold no tile coordinates for the grid itself. The grid belongs to the map (see Grid Tactics).

9.1.4 Objectives

Victory and defeat conditions are small objects. The built-in ones:

Each has a Description the HUD shows as the objective text. Any of the victory conditions met means a win. A new condition is a Blueprint or C++ subclass of URSEBattleCondition that overrides IsMet.

9.1.5 Encounter Layout (grid and classic stages)

Instead of typing coordinates, use the Encounter Layout mode:

  1. Select a Tactics Zone (bake its grid first) or an ATB Stage.
  2. Press the Encounter Layout toolbar button, or choose RPG Saga Engine → Advanced tools → Encounter Layout Mode.
  3. Pick an encounter, then Add Enemy and click a tile, Paint Deployment for the player's start tiles, or Add Field Object for walls and barrels.
  4. Read the Issues list: an enemy on a blocked tile, two enemies on one tile, no deployment tile, a zone without a baked grid. Fix every error.

Keys: E/Q rotate, Delete removes, R switches an ATB enemy's row, Ctrl+Z / Ctrl+Y undo and redo (a whole brush stroke is one step). The mode edits only the encounter asset, so battles read exactly what you saw.

9.1.6 Battle zones and sites

The quickest way to place a battle in a level is RPG Saga Engine → Advanced tools → Make Battle Zone Here... (or right-click in the viewport → RPG Saga → Make Battle Zone Here). It builds a ready battle site from an area: a Tactics zone with its director, the encounter laid out, a trigger, and optionally a classic stage next to it. Run it again with the same name and it updates the site instead of making a second one. Several sites on one map work. See World building.

9.1.7 Rewards and results

On victory the party receives experience (split among members that took part), loot, money and any progression rewards (battle points, mastery, new abilities, ranks). Then:

The style is set in Project Settings → RPG Saga Engine → Battle Flow UI → Results Presentation (Screen or Feed) and, for Free Tactics, in the Free Tactics settings. The look of the feed is a style asset (URSERewardFeedStyle) selected in Reward Feed. Providers (URSERewardToastProvider) decide what becomes a notification, and you can add your own. A battle that is lost with Defeat Continues Story ticked shows no game over: the fallen members get back on their feet (see the party settings' defeat recovery) and the game goes on.

9.2 How it works

9.2.1 Layers

URSEEncounterData  ──►  Director (RSE)  ──►  URSEBattle subclass (RSECore)  ──►  battle events  ──►  presentation (RSE)
(data)                  builds units,        Tactics / ATB / Turn / FreeTactics /     (damage, status,        animations, camera,
                        deployment, AI       Action: the rules, headless              turn, defeat...)        UI, sounds

URSEBattle is the common base. It owns the units, resources, damage, healing, statuses, reactions, objectives and the event stream. Each mode adds one subclass: URSETacticsBattle, URSEATBBattle (and URSETurnBattle derived from it), the Free Tactics and Action battles. Because the rules never touch actors or rendering, a battle can run headless for tests and simulation. The director turns battle events (ERSEBattleEventType: Turn Started, Ability Used, Damage Dealt, Status Applied, Unit Defeated, Reaction Triggered, Battle Ended and many more) into animations and UI.

9.2.2 The action pipeline

When a unit uses an ability or item:

  1. The mode checks the command is legal (whose turn, resources, range or scope, use conditions, item availability).
  2. Costs are paid (resources, items, Action Points in grids, charge time in ATB).
  3. The ability's effects resolve, per target and once per use (see Abilities). Positional modifiers of the mode apply (flank and height in grids, rows in classic battles).
  4. Damage, healing and statuses become events. Shields absorb, affinities scale, the unit may fall.
  5. Reactions queue and resolve (counterattacks, guards, overwatch), up to Max Reaction Depth.
  6. Objectives are checked after every state change. The battle ends with an outcome: Victory, Defeat or Fled.

9.2.3 Damage and hits

The formulas are data (Project Settings → RPG Saga Engine → Combat Formulas) and a rules profile can replace them. The defaults:

Element affinities are Normal, Weak, Resist, Immune and Absorb. When several sources apply, Absorb wins, then Immune, then Resist. Weak and Resist together cancel. The multipliers are in Battle → Elements → Affinity Multipliers (defaults 1, 2, 0.5, 0 and -1, so absorb heals).

The offense and defense stats, the formulas and the attribute registry are part of the Game Foundation (see Game foundation).

9.2.4 Determinism

All randomness comes from one seeded stream per battle (loot dice come from a stream derived from the same seed). The same seed and the same commands give the same battle. Custom code must draw numbers with Roll Int and Roll Percent on the battle, never with the engine's global random functions.

9.2.5 Starting a battle

An encounter trigger is the usual start: a volume the player walks into (Repeat: One Shot or Repeatable), touching a roaming enemy, or a random encounter area while walking (see Exploration). The story effect Start Battle starts one from a dialog or a cutscene. Everything funnels into the exploration subsystem, which resolves the mode, finds the battle site and calls the right director.

9.2.6 The battle mode override

The content decides each encounter's mode. The battle mode override is a session setting that fights every encounter that allows it in a different mode. It exists for demo menus, test tools and showcase captures. A story game leaves it empty.

Set it:

FromHow
BlueprintGet Game Instance Subsystem (RSE Battle Mode Override Subsystem) → Set Battle Mode Override (Battle.Mode.*), or Clear Battle Mode Override
ConsoleRSE.Battle.ModeOverride Tactics, Live, ATB, Turn, Action or None (no argument shows the current value)
Command line-RSEBattleMode=ATB
C++URSEBattleModeOverrideSubsystem::Get(this)->SetBattleModeOverride(Tag)

It lasts as long as the game instance and is never saved. The encounter's side has three fields: Allow Mode Override (off for scripted battles that only work in one mode), Override Modes (the modes it may use; empty means every mode its data supports) and Mode Rules Profiles (a rules profile per mode).

A battle in another mode runs on a transient copy of the encounter: the mode set, the mode's rules profile applied, the same name (so ids, quests and bestiary entries stay the same). What each mode needs, and what happens when the encounter does not author it:

ModeNeedsAutomatic fallback
Grid TacticsA Tactics zone with its director (from the site)Deployment tiles along the zone's near edge. Enemies are laid out on the far rows when their tiles are off the grid, blocked or shared.
ATB / turn-basedAn ATB director with a stageEvery enemy in front. Those after Auto Front Row Size go to the back row.
Free TacticsNothing (where the party stands)The site's live area. A party outside Live Area Radius is brought to Party Start first.
ActionThe action presentationThe live area, or the site's Action Area.

Technical values are in Project Settings → RPG Saga Engine → Battle Mode Override (overridable modes, Fall Back To Own Mode, fallback sizes). When an override cannot run, the encounter is fought in its own mode with a warning. A site's Log Mode Report button, or URSEBattleModeOverrideLibrary::GetEncounterModeReport, lists for every mode whether the encounter can run in it and which fallbacks it uses.

9.2.7 Encounter sites

ARSEEncounterSite holds one encounter's places for every mode: Tactics Director (its zone is the grid), ATB Director (its stage), the live area (Live Area Radius, Party Start) and an optional Action Area. Encounter triggers point at a site (Site), and the Start Battle effect and StartEncounter find the site of their encounter. Use it when one encounter should work in several modes.

9.3 Key classes and assets

Class / assetModuleRole
URSEEncounterDataRSECoreThe encounter data asset.
URSEBattleRSECoreHeadless core: units, resources, damage, statuses, reactions, objectives, events.
URSETacticsBattle, URSEATBBattle, URSETurnBattleRSECoreMode rules (grid, ATB, turn-based).
URSEBattleConditionRSECoreBase of objectives (URSECondition_TeamDefeated, _CharacterDefeated, _TurnsElapsed, _ReachTiles).
URSEBattleModeOverrideSubsystem, URSEBattleModeOverrideLibraryRSECoreThe mode override, resolution and reports.
URSECombatFormulaSettingsRSECoreThe damage and hit formulas as data.
FRSEBattleRewardsRSECoreWhat a victory gives (experience, items, money, growth, statistics).
ARSETacticsBattleDirector, ARSEATBBattleDirectorRSERun a battle on the map and present its events.
ARSEEncounterTrigger, ARSEEncounterSiteRSEStart a battle from the world, and hold its places per mode.
URSEBattleFlowSubsystemRSEResults and game-over screens.
URSERewardFeedSubsystemRSEThe notification feed after a win.
RSEBattleSim (namespace)RSECoreThe headless simulator: LoadScenarioFile, Run, Summarize, RunAndWriteReport.

9.4 Settings

Project Settings → RPG Saga Engine:

GroupWhat it holds
BattleTactics turn order (CT threshold 100, CT costs), KO countdown, damage constants (Defense Constant 100, Min Damage 1, Variance Min/Max 0.9 to 1.1, Critical Multiplier 1.5, Base Critical Chance 5), hit chance limits (5 to 100), flank and height rules, ATB timing and flee chance, Default Encounter Mode. A rules-profile section.
Combat FormulasThe offense and defense stats and every formula. A rules-profile section.
Battle Mode OverrideOverridable modes and fallbacks.
Battle Flow UIResults and game-over screens, delays (Results Delay 1.2 s), Results Presentation.
Reward FeedThe notification style, widget class and icons.
Battle SimulatorDefaults for the simulator (below).
BalanceBands and levels for Balance My Campaign.
EncountersContact rules (preemptive and back attacks), default teams, random encounter options.

See Appendix B for the full lists.

9.5 Blueprint usage

From the RPG Saga | Battle library:

Start a boss fight from a lever:

  1. Event On Interact (a lever) → Start Encounter (Encounter = DA_Encounter_Starter_Z1_Boss).
  2. Bind the exploration subsystem's On Encounter Ended to continue the story.

React to a battle event on a director: bind On Event Presented (it carries the battle event) to show custom numbers or play a sound.

Write a battle effect (for custom abilities): the battle nodes are Deal Damage, Heal Unit, Change Resource, Apply Status, Remove Statuses, Shift Turn, Defeat Unit, Scan Unit, Roll Int and Roll Percent, plus the getters Get Unit, Get Unit Ids, Get Unit Attribute, Get Unit Resource, Unit Has Status, Are Units Enemies and Get Outcome.

See Appendix A for every node.

9.6 C++ usage

Running a battle headless, as the simulator and the tests do:

URSEATBBattle* Battle = NewObject<URSEATBBattle>();
Battle->Initialize(Spawns, /*Seed*/ 42, /*bCanFlee*/ true);

while (!Battle->IsBattleOver())
{
    Battle->Advance(0.1f);
    for (int32 UnitId : Battle->GetReadyUnits())
    {
        // Choose a command (or let RSEATBAI::Act decide).
        Battle->IssueCommand(UnitId, Ability, TargetId);
    }
}
const ERSEBattleOutcome Outcome = Battle->GetOutcome();

To react to events without a director, bind to the battle's event delegate and switch on ERSEBattleEventType. A new objective is a subclass of URSEBattleCondition. A new kind of reward presentation is a URSERewardToastProvider.

9.7 Advanced

9.7.1 Rules profiles

A rules profile (URSERulesProfile) overrides chosen settings sections (Battle, Grid, Combat Formulas, Ability Toolkit, Turn-Based Battle, Inventory Rules, Economy, AI...) for one encounter, one mode, a chapter or the game. Set it on the encounter (Rules Profile), on a mode (Mode Rules Profiles), on a director (Rules Profile Override) or as the project default. Some properties are structure and stay global, such as tile size and the currency.

9.7.2 The battle simulator

The simulator plays whole battles with no rendering, AI against AI, many times with different seeds, and reports what happened. It is the fastest way to find a pushover or a brick wall.

Ways to run it:

A scenario is a small JSON file:

{
  "Name": "Zone1_LevelSweep",
  "Encounter": "/RPGSagaEngine/Data/Encounters/DA_Encounter_Starter_Z1_Pack",
  "Runs": 40,
  "Seed": 2000,
  "PlayerIntelligence": 0.8,
  "Sweep": { "Parameter": "PartyLevel", "From": 1, "To": 10, "Step": 1 }
}

Fields you will use most: Encounter, Mode, Party, PartyItems, RulesProfile, RulesOverrides, Runs, Seed, PlayerIntelligence, EnemyIntelligence, PartyLevel, EnemyLevelMultiplier, ProgressionZone, MaxTurns, MaxSeconds, Grid and Sweep. Sweep parameters include PartyLevel, EnemyLevelMultiplier, the two intelligences, EnemyAIProfile and Rules:<Section>.<Field>, for example Rules:Battle.CriticalMultiplier.

Each run writes results.csv (one row per battle), summary.json and summary.html to Saved/BattleSim/<date-time>_<scenario>/. Read the win rate (how hard the fight is), the median turns and the HP left (tempo and how close the wins are), the performance score (which way adaptive difficulty would push) and the damage per ability (the candidates to tune). A battle that reaches the turn or time guard is a Timeout. The same scenario and seed always give the same results.

Grid battles need a grid. The simulator uses the zone of the map that runs the encounter, a named zone, or a generated grid (Width, Depth, optional height noise). The values are in Project Settings → RPG Saga Engine → Battle Simulator (default runs 50, seed 1, intelligence 0.8, guards 400 turns and 1200 seconds).

9.7.3 Balance My Campaign

RPG Saga Engine → Advanced tools → Balance My Campaign... plays every encounter of every progression zone with the simulator, flags what is too easy, too hard, too long, a stalemate, a one-shot or an ability cliff, proposes the smallest data changes that fix it, verifies each proposal on the same seeds and applies the ticked ones as one undoable step. It needs a campaign asset (the one the Progression Designer uses). Each encounter's Balance Role picks its win-rate band. Assets with Balance Locked are never touched. The command line is -run=RSEBalanceCampaign -Campaign=/Game/.../DA_Campaign_Main, with -Analyze, -Apply and -FailOnFlags for continuous integration. Reports go to Saved/Balance/.

9.7.4 Networking

The host runs the battle. Guests send commands. Because the rules are deterministic and the state is serializable, this needs no extra code from you (Co-op and online).

9.7.5 Performance

Battle logic does no per-frame allocation in the formulas (they are compiled expressions). Presentation cost is your main budget. The RSE.Battle.Presentation.Speed CVar scales presentation timings and RSE.Battle.Presentation.ReduceEffects trims effects (Platforms and performance).

9.7.6 Debugging commands

In development builds: RSE.Battle.StartEncounter <Asset>, RSE.Battle.Start, RSE.Battle.Restart, RSE.Battle.AutoPlay 1 (the AI plays your party too), RSE.Exploration.Encounter [Filter | ATB | Turn | Tactics] and RSE.Encounter.Debug 1. Appendix C lists them with help text.

9.8 Troubleshooting

SymptomCause and fix
Walking into the trigger does nothingThe trigger has no director or site, or a Repeat setting already used it. For classic battles the map needs an ATB Battle Director with an ATB Stage.
The encounter list in Encounter Layout is emptyOnly encounters of the target's kind show (grid for a zone, classic for a stage). Make one with New battle.
"Zone without a baked grid"Select the Tactics Zone and press Bake Grid.
A mode override seems ignoredThe encounter has Allow Mode Override off, or Override Modes excludes it. Check the mode report.
The override falls back to the encounter's own modeThe map has no zone or stage for the requested mode. Add a site, or turn off Fall Back To Own Mode to see the failure.
The same battle plays out differentlyCustom code uses engine random functions. Use the battle's Roll Int and Roll Percent.
Simulator says the grid is missingNo zone on the map runs this encounter. Pass Grid in the scenario, or use "Generate": true.
A boss is a one-shot for the partyRun Balance My Campaign, or lower the offense in the encounter's rules profile.
No results screen after a winResults Presentation is Feed, or the Free Tactics results mode is None.
A lost story battle shows game overTick Defeat Continues Story on the encounter.

9.9 See also

10. Grid Tactics

In short: Grid Tactics is turn-based combat on a square grid laid over your live level. Tiles have height and terrain, units face a direction, and position matters: flanking, high ground, cover, line of sight. Turn order follows a per-unit charge counter (CT), and each turn is paid with Action Points (AP) that you spend on moving and acting in any order. Use it for story battles, bosses and any fight where where you stand matters.

10.1 Basics

10.1.1 The words

WordMeaning
Tactics zoneThe actor (ARSETacticsZone) that marks where the battle happens. Its grid is measured from your level geometry.
Bake GridMeasuring the level under the zone: which tiles are walkable, how high each one is. You do it once in the editor.
TileOne square of the grid (100 cm by default). It has a height (in steps), a terrain and a walkable flag.
Height stepThe unit of height (50 cm by default). Climbing and dropping are measured in steps.
CT (charge time)Each unit fills a counter at its own speed. At 100 the unit takes a turn. Fast units act more often.
AP (Action Points)The budget of one turn (the unit's Stat.ActionPoints). Moving and acting both spend it.
FacingThe direction a unit looks: North, East, South or West. Attacks from the side or the back hit harder and more often.
Deployment tilesThe tiles where the player places units before the battle starts.
DirectorThe actor (ARSETacticsBattleDirector) that runs one grid battle: deployment, turns, AI and presentation.

10.1.2 Set up your first grid battle

The fast way:

  1. Open a level with open, mostly flat ground.
  2. Choose RPG Saga Engine → Advanced tools → Make Battle Zone Here... (or right-click in the viewport → RPG Saga → Make Battle Zone Here). Pick an encounter. The tool traces the grid, picks deployment tiles, places the enemies, and adds a zone, a director and a trigger. Press Apply.
  3. Play. Walk into the trigger. The world turns into a grid, you place your units on the blue tiles and start the battle.

The manual way (to learn what the tool does):

  1. Place an RSE Tactics Zone (search "Tactics Zone" in Place Actors). Its origin is the corner of tile (0,0). The grid follows the actor's location and yaw.
  2. Set Grid Width and Grid Depth (12 by 12 by default) and press Bake Grid in Details. Tiles that are too steep, or have no clearance above them, become unwalkable.
  3. Place an RSE Tactics Battle Director. Set Zone to your zone and Encounter to an encounter asset. (Or leave the director to be found by a trigger or a battle site.)
  4. Lay out the enemies and the deployment tiles with the Encounter Layout mode (see Battle fundamentals).
  5. Add an RSE Encounter Trigger that points at the director. Play.

Fix a wrong tile with Tile Overrides on the zone (height, terrain, walkable), then Bake Grid again. Mark scenery the bake should ignore with the actor tag RSE.GridIgnore.

10.1.3 How a battle plays

  1. Deployment. The player sees the deployment tiles, places the roster characters (click a blue tile or use the buttons Place, Withdraw, Auto Deploy) and presses Start Battle. Required characters must be placed. With free slots the game asks for confirmation. The encounter's Max Deployed Units (4 by default) limits how many.
  2. Turns. The unit whose CT reaches the threshold takes a turn. It gets AP equal to its ActionPoints stat.
  3. Move and act. Blue tiles show where the unit can walk. Hovering a tile draws the real path with its AP cost ("5 AP (3 left)"). Choose an ability and the range, the area and who it hits are previewed, with the hit chance, damage range and a KO marker. Moving and acting mix freely: move, attack, move again, as long as AP last.
  4. End turn. The player picks the unit's facing. A turn that used no AP costs 60 CT, one that used them all costs 100, and partial use is in between, so a unit that does less comes back sooner.
  5. Victory or defeat by the encounter's objectives. Then the results flow starts.

A fallen unit stays on the grid for KO Countdown Turns (3) of its own turns. Revive it in time or it leaves the battle.

A danger zone key toggles an overlay of every tile the enemies can hit on their next turn.

10.2 How it works

10.2.1 Data to rules to presentation

Level geometry ──Bake──► ARSETacticsZone.Grid (FRSETacticalGrid, saved in the level)
                                   │
URSEEncounterData ─► ARSETacticsBattleDirector ─► URSETacticsBattle (RSECore, headless)
                         (deployment, AI turns,        grid, CT, AP, movement, targeting,
                          presentation, input)         positional damage, zones, objects
                                   ▲                                │
                                   └────── battle events ◄──────────┘

URSETacticsBattle holds all the rules and runs without a world. The grid stays inside the battle, and at runtime nothing scans the level. An unbaked zone is baked once at the start of play with a warning (Bake If Empty At Runtime), but the right fix is to press Bake Grid in the editor and save the level.

10.2.2 Movement

Terrains are gameplay tags with rules in Project Settings → RPG Saga Engine → Grid → Terrain Rules: move cost, impassable, water, no climb cost, an Evasion Bonus and a Defense Bonus Percent for the unit standing there, and a display name. The starter terrains are Ground, Grass, Sand (cost 2), Swamp (3), Stairs, Shallow Water (2) and Deep Water (impassable).

Movement traits are tags a unit gets from its class, equipment, a Pact or a status:

TagEffect
Trait.Move.IgnoreTerrainCostEvery walkable tile costs 1.
Trait.Move.LevitateNo height limits or costs. Crosses water. Walls still block.
Trait.Move.WaterWalkWater costs 1 and deep water is open.

10.2.3 Turn order and Action Points

CT fills every tick with the unit's Speed. At CT Threshold (100) the unit acts. After the turn it pays between Turn CT Cost Idle (60) and Turn CT Cost Full (100). The HUD shows the predicted order (PredictTurnOrder in the code). Statuses with Status.Block.Turn skip the turn, Status.Block.Move and Status.Block.Act stop one half. Turn manipulation effects change CT, and the Action Points effect adds or removes AP now or next turn (limited by Max Bonus Action Points).

10.2.4 Position and damage

Tactics adds three things to the shared damage rules:

All of this is in one breakdown (FRSETacticsPositionalBreakdown) used by the real hit, the AI's estimate and the forecast the player sees, so they always agree. The values are in Battle → Tactics → Positioning.

10.2.5 Targeting, shapes and line of sight

An ability's Tactics Rules decide what can be targeted: Min Range and Max Range (Manhattan distance in tiles), Vertical Tolerance (height difference), and Requires Line Of Sight. Line of sight is traced from an eye height above the tile surface (Line Of Sight Eye Height, 2 steps). Walls and tall objects block it. A Direct trajectory is a straight shot. An Arc (with Arc Height) flies over lower obstacles. Height Steps Per Range Bonus gives extra range from high ground.

The area is one of Single, Diamond, Cross, Line, Cone, Ring, Rectangle or Mask. A Mask is a hand-drawn pattern of rows separated by / or |, where X or # is a hit tile, O the center and @ a hit center. Area Centered On Caster makes the shape start at the user (a blast around you, a cone in front). Falloff lowers power with distance from the center.

10.2.6 Zones and field objects

Grid battles add two kinds of field content, both data assets:

Abilities create them with Create Zone and Spawn Object effects. Encounters can place objects from the start (Field Objects). Movement is evaluated tile by tile, so traps, zones, overwatch and sliding trigger on each tile.

10.2.7 Deployment

FRSEDeployment (RSECore, no world) holds the roster, the deployment tiles and the placements. CheckStart answers Ready, Not Full, Missing Required or No Units. AutoDeploy places required characters first, then the rest, putting short-range units on tiles closest to the enemy and long-range units behind. Units already placed never move.

10.3 Key classes and assets

Class / assetModuleRole
URSETacticsBattleRSECoreThe headless grid battle: CT, AP, movement, targeting, positional combat, zones.
FRSETacticalGrid, FRSEGridCoordRSECoreThe grid and tile coordinates.
URSEGridSettingsRSECoreTile size, height step, terrain rules, cost rules.
RSEGridPathfinding, RSEGridQueriesRSECoreReachable tiles, A* paths, ranges, shapes, line of sight (pure functions).
FRSEDeploymentRSECoreDeployment rules.
URSETileZoneData, URSEFieldObjectDataRSECoreZone and object data assets.
ARSETacticsZoneRSEThe zone actor: bake, overrides, drawing.
ARSETacticsBattleDirectorRSERuns the battle and presents it.
ARSEGridUnitRSEThe unit actor on the grid (placeholder body, or the character's look).
ARSETacticsPlayerController, ARSETacticsCameraPawnRSEInput and the battle camera.
ARSEPathPreview, ARSETargetPreviewRSEThe path line and the target preview.

10.4 Settings

Project Settings → RPG Saga Engine:

GroupWhat it holds
GridTile Size (100 cm), Height Step Size (50 cm), Default Terrain, Terrain Rules, Cost Rules (climb, descend, levitate). Tile size, height step and default terrain are global only, because levels are built for them. A rules-profile section.
BattleCT and AP rules, KO Countdown Turns (3), Jump Down Bonus (1), the positioning rules (side, back, height, line-of-sight eye height).
Tactics ZoneBake trace settings (Bake Trace Channel, Required Clearance, Min Walkable Normal Z, Bake Min Surface Size, Bake Ignore Tag), the grid look (Grid Visual Mode: Projected or Tiles), highlight colors, unit placeholder look and movement speed.
Tactics CameraPitch (-50), initial yaw (45), field of view (35), distance limits, zoom and pan speeds, rotation step (90 degrees).
Tactics Path PreviewThe look of the path line.
Target PreviewThe targeting preview: Default Style (Classic or Modern), colors, labels, what to mark. Players can pick their own in the options.
InputThe input actions, including Danger Zone Action.

See Appendix B for every property.

10.5 Blueprint usage

Start a grid battle from a button:

  1. Event (a menu button) → Find Tactics Director (Encounter = DA_Encounter_Starter_Z1_Skirmish).
  2. Branch on Is Valid. True: Set Encounter, then Begin Encounter. If you want to skip deployment, tick Auto Deploy on the director and call Start Battle.
  3. Bind On Event Presented on the director to show your own numbers, or use the shipped HUD.

Useful director nodes: Begin Encounter, Start Battle, Restart Encounter, End Encounter, Get Phase (Idle, Deployment, Battle, Finished), Get Battle, Get Battle Outcome, Is Awaiting Command, Is Playback Idle, Get Unit Actor, Get Last Rewards.

Rebake from a tool: the zone's Bake Grid and Clear Grid are callable in the editor, and RSE.Tactics.BakeZones rebakes every zone in the level in development builds.

The full node list is in Appendix A.

10.6 C++ usage

Move and attack in a headless grid battle (a test, a tool, an AI):

URSETacticsBattle* Battle = NewObject<URSETacticsBattle>();
Battle->Initialize(Grid, Spawns, /*Seed*/ 7);
Battle->StartBattle();

TArray<FRSEGridReachableTile> Reach;
Battle->GetActiveUnitReachableTilesWithCost(Reach);

if (Battle->MoveActiveUnit(Goal))
{
    const ERSEAbilityUseResult Result = Battle->UseAbility(Ability, Target);
    if (Result == ERSEAbilityUseResult::Ok)
    {
        Battle->EndTurn(ERSEGridDirection::South);
    }
}

ERSEAbilityUseResult explains refusals: Not Active Unit, Blocked, Unknown Ability, Not Enough Action Points, Not Enough Resources, Uses Per Turn Reached, Invalid Target, Item Unavailable, Requirement Not Met. For the player's UI use ForecastAbilityAt, GetTargetingTilesFrom and GetAreaPreviewFrom. They use the same path as the real resolution and never change the battle.

From a director, the same commands are CommandMove, CommandAbility, CommandItem, CommandEndTurn, DeployPlace and DeployWithdraw.

Extension points:

10.7 Advanced

10.7.1 Terrain from the world

The bake traces straight down for every tile. A tile is walkable when the surface is flat enough and has clear space above. Surfaces that do not block pawns, pawns, objects narrower than Bake Min Surface Size and anything tagged RSE.GridIgnore are skipped. Combat roles on level actors (cover, obstacle, difficult terrain, high ground) can change tiles during the bake (see World building). The bake keeps the exact surface under each tile, so units, the path line and the highlights sit on the real ground even on slopes.

10.7.2 Grid visuals

Grid Visual Mode is Projected by default: one decal over the zone drawn from a small texture, which looks right on uneven ground and costs one draw call. Tiles draws instanced meshes. Projected needs a grid decal material. Without it the mode falls back to Tiles. You can show the grid only in battle (Show Grid Only In Battle) and play a reveal animation when the battle starts.

10.7.3 Rules profiles for tactics

Tile size and height step are global because levels are built for them. Everything else (costs, positioning, CT, KO countdown) can change per encounter through a rules profile. A boss can use a profile with no side bonus, a swamp level a profile with cheaper water.

10.7.4 AI

The AI plans on the same reachable tiles and costs. It scores flanks, height, line-of-sight blocking and danger tiles according to its intelligence value (see Enemy AI and adaptive difficulty). The director's AI Think Delay and Event Pause set the presentation pace.

10.7.5 Networking

The host runs the grid battle and guests send commands (FRSECmd family). The battle is deterministic, so every machine can mirror it (Co-op and online).

10.7.6 Performance

10.7.7 Development commands

In development builds: RSE.Tactics.ShowReach [Unit], RSE.Tactics.MoveUnit X Y [Unit], RSE.Tactics.BakeZones, RSE.Tactics.Demo approach|use|wait, RSE.Tactics.Deploy [start], RSE.Tactics.Preview style Classic|Modern|Default and RSE.Battle.AutoPlay 1. See Appendix C.

10.8 Troubleshooting

SymptomCause and fix
No grid appears, or "zone without a baked grid"Press Bake Grid on the zone and save the level.
Many tiles are unwalkableThe surface is too steep (Min Walkable Normal Z) or something is within Required Clearance above it. Use Tile Overrides, or tag props RSE.GridIgnore.
The grid floats above or sinks into the groundThe zone's origin is too high or low, or Bake Trace Height Above misses the ground. Move the zone and rebake.
A unit cannot reach a tile that looks closeHeight difference above its jump, a costly terrain, or an enemy blocks the path. Hover the tile to read the path cost.
An ability shows no valid targetsMin Range, Max Range, Vertical Tolerance or line of sight. Use Test ability in Grid mode to read the step-by-step reasons.
Units start on invalid tilesA start tile is off the grid or blocked. The game moves them to the nearest free tile. Fix the layout in Encounter Layout.
The grid looks wrong in the Projected modeThe grid decal material is not set or the surface is too steep for Projected Min Normal Z. Switch to Tiles.
The enemy never moves closeThe AI's intelligence, or the encounter's profile. Check the AI chapter.
The player cannot start the battleA required character is not placed, or nobody is placed. The message names the character.

10.9 See also

11. ATB and turn-based

In short: The classic battle modes are menu-driven fights on a stage where two sides face each other in rows. ATB gives every unit a time bar that fills until the unit can act. Turn-based drops the bar: one unit acts at a time, in a round (everyone once, fastest first) or on a timeline (fast units come around more often). They share the same party, abilities, items and menus as the grid mode, and one director and one stage run both.

11.1 Basics

11.1.1 The words

WordMeaning
ATB (Active Time Battle)Each unit has a gauge that fills over time. A full gauge makes the unit ready for one command.
Wait / ActiveThe two time settings. In Wait (default) time stops while the player picks from a menu. In Active it keeps running.
Round-basedTurn-based style where each round every unit acts once, fastest first.
CTB (timeline)Turn-based style where a hidden gauge jumps straight to the next full one, so fast units act more often and slow actions delay the next turn.
RowsFront row and back row. By default the back row deals and takes half physical melee damage. Magic and bows ignore rows.
ScopeHow many a classic ability hits: Single, Row or All.
ATB stageThe actor (ARSEATBStage) that holds the two sides' slots and the battle camera.
ATB directorThe actor (ARSEATBBattleDirector) that runs the battle on a stage. It runs ATB and turn-based.
Command menuThe list of commands a ready unit chooses from (Attack, Skills, Magic, Items, Actions).

11.1.2 Set up your first classic battle

  1. Put an RSE ATB Stage in your level on open ground (or inside a dedicated arena). It shows the two sides' slots in the editor.
  2. Put an RSE ATB Battle Director next to it. Set its Stage and its Encounter (an encounter whose Battle Mode is Battle.Mode.ATB or Battle.Mode.Turn).
  3. Add an RSE Encounter Trigger that points at the director, or use Make Battle Zone Here (which can add a stage), or the Studio's World → New battle (see Editor tools).
  4. Play. Walk into the trigger. The party stands in its formation (set in the party menu), the enemies in their rows, and the bars start to fill.

Layout the enemies and their rows with the Encounter Layout mode on the stage: drag an enemy to another slot or row, or press R to swap its row. Each enemy's ATB Row is also a field on the encounter.

11.1.3 Play a classic battle

  1. A unit's gauge fills. When it is full the command menu opens for it. A banner says "Mira's turn".
  2. Choose a command (the menu's structure is data, see below), then a target. The target list shows enemies by name, allies for heals, or groups ("Front row", "All enemies" with the number of targets).
  3. The action plays. Abilities with a Charge Time wait before they resolve. If the target fell meanwhile, the ability hits another valid target on the same side.
  4. Commands given while an action is still showing are not lost. They queue and run right after it.
  5. Flee (if the encounter allows it) tries to escape. The chance depends on the speed of your party compared to the enemies. A failed attempt costs the unit's turn.

Switch characters with the next-unit key. Wait or Active can be toggled in the battle with its key (and the player can store a preference in the options).

11.2 How it works

11.2.1 One director, two time models

URSEATBBattle is the ATB battle (headless, in RSECore). URSETurnBattle derives from it and replaces only the time model. Everything else is shared: commands, rows, scopes, items, flee, summons, statuses, objectives, AI. The director picks the class with URSETurnBattleSettings::ResolveClassicMode:

  1. the profile's Classic Mode Override (empty, Battle.Mode.ATB or Battle.Mode.Turn), else
  2. the encounter's Battle Mode (Turn means turn-based, anything else ATB).

That is how a rules profile can switch every classic battle of a game at once.

11.2.2 ATB timing

Wait and Active are a presentation rule: the director stops calling Advance while a menu is open in Wait mode.

Initiative. If the player touches an unaware visible enemy from behind, the battle is Preemptive: the party's gauges start filled and the enemies' empty. If a chasing enemy catches the party from behind it is a Back Attack, the reverse. The shares are Initiative Gauge Fraction and Surprised Gauge Fraction in Encounters settings. The turn-based round mode has no gauges and only records it.

11.2.3 Rows, scopes and flee

11.2.4 Turn-based styles

Set in Project Settings → RPG Saga Engine → Turn-Based Battle (a rules-profile section):

SettingMeaning
Turn Order StyleRound-based (classic) or CTB (timeline).
Initiative Variance (Round)Initiative is Speed times (1 plus or minus this), rolled per unit each round. Default 0.1. 0 = strict Speed order.
Reorder On Speed Change (Round)A haste or slow reorders the units still waiting in the round.
Charge Delay Scale (CTB)An ability's charge time becomes extra waiting before its user's next turn, times this. The action itself resolves at once. 0 = every action costs the same.
Tie BreakPlayer First, Enemy First or Random (a fixed coin flip per unit and battle). Then Speed, then the unit id.
Turn Order Preview CountHow many upcoming turns the HUD strip shows (8).
Classic Mode Override, Classic Encounters EnabledSwitch all classic battles to one mode, or switch classic encounters off for a Tactics-only game.

In Round mode every active unit acts once per round, in order of initiative. A unit that falls or steps out loses its place. A summon that arrives mid-round acts from the next round. Charge times are ignored: abilities resolve at once.

In CTB mode the ATB gauge still exists (using the same fill rates as ATB) but the timeline jumps straight to the next full gauge. A unit twice as fast acts twice as often. The HUD shows the turn order strip. GetTurnOrderPreview replays the timeline on copies of the gauges.

Exactly one unit is ready at a time in turn-based modes, so Wait and Active do not matter there.

11.2.5 The command menu

The structure of the menu is data, not code. A Command Menu Layout asset (URSECommandMenuLayout) lists the top-level commands. Each one has an id, a label, a help line and a kind:

Abilities sort into commands by their Ability Type tag (Ability.Type.Attack, Skill, Magic, Action). The first command that accepts an ability's type takes it. Abilities no command takes go to the command with Catch All ticked. A list command can also tick Include Items, Include Flee and Include Summons. Passives never appear.

While a command is highlighted the help area shows its description, target scope, cost, element and charge time. At targeting, a cursor sits over the target and smaller ones over everyone the ability hits.

11.2.6 The stage and formation

ARSEATBStage holds the two sides' slots: Front Row Distance (300 cm), Row Spacing (180 cm) and Unit Spacing (170 cm), Lanes Per Row (a row holds this many units before newcomers use the other row), a camera, and a box showing the area. A stage can sit in an arena or directly on the live map, where the camera is framed so obstructions fade.

FRSEATBFormation (RSE, no world) gives every unit a side, a row and a lane across the row. Lanes are kept for the whole battle (fallen units lie where they stood). A row change from a knockback or swap moves only that unit. Reinforcements take the nearest free lane. A unit pushed out of place by an animation glides back after the action.

The party in a classic battle is the ATB formation (active members, default four, ATB Party Size) and their chosen rows, set in the party menu. Recruitable secondary characters never join classic battles.

11.2.7 The HUD

URSEATBHUDWidget shows the party with HP, MP and gauge state (READY, charging, QUEUED, KO), the enemies as clickable chips, the command column with the banner and help, the target list and card, the time mode, and the log. In turn-based modes it shows the round and the turn order strip (the Turn Order Bar settings control its look). Data flows through view models, so a custom UMG screen can use the same values. Text formats and sizes are in Classic Battle UI.

11.3 Key classes and assets

Class / assetModuleRole
URSEATBBattleRSECoreThe headless ATB battle: gauges, commands, rows, flee.
URSETurnBattleRSECoreTurn-based (round or CTB). Derives from URSEATBBattle.
URSEBattleSettingsRSECoreATB timing, rows, flee (Project Settings → Battle).
URSETurnBattleSettingsRSECoreTurn-based styles (Project Settings → Turn-Based Battle).
URSECommandMenuLayoutRSECoreThe command menu layout data asset.
RSEATBCommandsRSECoreThe command queue and the active unit rule.
ARSEATBStageRSEThe stage actor.
ARSEATBBattleDirectorRSERuns and presents the battle.
URSEATBCommandComponentRSEPlayer command input on the controller: menus, targeting, unit switching.
URSEATBHUDWidgetRSEThe classic battle HUD.
DA_Rules_Genre_ClassicATB, _TurnRound, _TurnCTB, _TacticsOnly, _HybridContentRules profiles in /RPGSagaEngine/Data/Rules/ that set the classic mode.

11.4 Settings

Project Settings → RPG Saga Engine:

GroupKey settings (defaults)
Battle → ATBATB Gauge Max (100), ATB Fill Per Speed (2), ATB Initial Gauge Per Speed (3), ATB Step Seconds (0.033), ATB Back Row Physical Multiplier (0.5), ATB Party Size (4), Default ATB Time Mode (Wait), Wait Pause (Any Menu), Wait Pauses Enemies (on), Active Menu Time Scale (1), Busy Commands (Queue).
Battle → ATB → FleeFlee Base Chance (40), Flee Chance Per Speed (3), Flee Min Chance (5), Flee Max Chance (95).
Turn-Based BattleThe table above.
Command MenuDefault Layout, Fallback Entries, Empty Groups, remember cursor, back and flee labels.
Classic Battle UIBanner, titles, help placement, cursor and target list look and text.
Turn Order BarThe strip's size, scale and colors.
EncountersAllow Preemptive, Allow Back Attack, Initiative Gauge Fraction, Surprised Gauge Fraction.
Ability ToolkitReactions In Classic Modes and the other rules that touch classic battles.

The player's own Wait or Active choice is stored in their options and overrides the default. See Appendix B for the full list.

11.5 Blueprint usage

Start a classic battle on the stage next to the player:

  1. Event (an NPC dialog's effect, or a button) → Find ATB Director (Encounter = DA_Encounter_Starter_Z1_Skirmish).
  2. Start Battle (Encounter Override = your encounter). The director keeps its own encounter again after End Battle.
  3. For a surprise attack, call Set Next Initiative (Preemptive or Back Attack) first.

Useful director nodes: Start Battle, End Battle, Set Next Initiative, Get Battle Initiative, Get Phase (Idle, Battle, Finished), Is Active, Get Battle, Get Battle Mode, Get Time Mode, Set Time Mode, Get Time Scale, Is Command Queued, Is Playback Idle, Get Battle Outcome, Get Encounter. The On Event Presented event carries every shown battle event.

Switch between Wait and Active from an options menu: Set Time Mode (Wait or Active) on the director. The settings class stores the player's choice with URSEBattleSettings::SetPlayerATBTimeMode.

Change a character's row from the party menu: the party library has Get ATB Row and Set ATB Row, plus Get ATB Formation, Is In ATB Formation and Set In ATB Formation.

In a battle effect, Get Unit and Get Unit Ids give units, and Shift Turn moves a unit sooner or later: in ATB it changes the gauge, in a round it moves the unit to the front or back of the round, on the CTB timeline it changes the gauge.

See Appendix A.

11.6 C++ usage

The classic battle runs headless exactly as the simulator and tests drive it:

URSETurnBattle* Battle = NewObject<URSETurnBattle>();
Battle->Initialize(Spawns, /*Seed*/ 11, /*bCanFlee*/ true);

while (!Battle->IsBattleOver())
{
    Battle->Advance(0.f);                       // turn-based: makes the next unit ready
    for (int32 UnitId : Battle->GetReadyUnits())
    {
        if (Battle->CanUseAbility(UnitId, Ability) == ERSEATBCommandResult::Ok)
        {
            TArray<int32> Targets;
            Battle->GetValidTargets(UnitId, Ability, Targets);
            Battle->IssueCommand(UnitId, Ability, Targets[0]);
        }
        else
        {
            Battle->PassTurn(UnitId);
        }
    }
}

ERSEATBCommandResult explains refusals: Not Ready, Blocked, Unknown Ability, Not Enough Resources, Invalid Target, Item Unavailable, Requirement Not Met, or Queued (accepted while an action is shown). Use GetAffectedUnits for a scope's real targets and GetFleeChance for the HUD. Turn-based previews come from URSETurnBattle::GetTurnOrderPreview.

Extension points on URSEATBBattle (virtual): Advance, GetActionTimeCost, UsesChargeTime, OnActionFinished, OnBattleInitialized, ApplyTurnShift. A new time model is a subclass that overrides these, which is exactly what URSETurnBattle does.

11.7 Advanced

11.7.1 Presets by genre

The rules profiles DA_Rules_Genre_ClassicATB, DA_Rules_Genre_TurnRound, DA_Rules_Genre_TurnCTB, DA_Rules_Genre_TacticsOnly and DA_Rules_Genre_Hybrid set the classic mode for a whole game. Choose one as the project default (Rules Profiles → Default Profile or Set as default in the Configurator), switch it from the story with the Set Rules Profile effect, or put it on one encounter. Hybrid has no override, so every encounter picks its own mode.

11.7.2 More than one classic encounter on a map

A map has one classic director, and the controller uses the first. An encounter trigger's Classic Encounter replaces the director's encounter for the fight that trigger starts, and the director gets its own encounter back at the end. The same works from code with StartBattle(EncounterOverride).

11.7.3 Customizing the menu

Write a new layout asset per class for different command sets (a "Songs" command, a "Tricks" command with a hidden Magic). For a completely different screen, replace the HUD widget class and bind to the view models (CurrentList, MenuPath, HelpText, the target list). The actions on the view model (HoverTarget, ChooseTarget, ToggleTimeMode...) are the same ones the default screen uses.

11.7.4 Action commands and timing

Abilities with an Action Command ask for a timed press before they are issued. The grade becomes part of the command, so it stays deterministic. Enemy attacks on a unit with a shield can open a block prompt. Setting Action Commands → Default Player Mode (or the player's option) to Offense Only or None removes prompts (see Abilities).

11.7.5 Networking and AI

The host runs the battle. Guests send commands. Enemy AI acts as soon as a unit is ready after a short AI Think Delay, and a gauge-aware AI interrupts charging units according to its intelligence (see Enemy AI). In co-op, each local player has its own command component.

11.7.6 Performance

The battle logic is a fixed-step loop with a small state. A very large number of units mainly costs presentation. Keep ATB Step Seconds at the default unless you need finer timing.

11.7.7 Development commands

In development builds: RSE.Battle.StartATB, RSE.Battle.StartTurn [EncounterName], RSE.ATB.Mode Wait|Active, RSE.ATB.Input select | cancel | up | down | next | toggle | block | ... (menu input without a keyboard), RSE.Battle.AutoPlay 1 (the AI plays your party too) and RSE.Exploration.Encounter ATB|Turn.

11.8 Troubleshooting

SymptomCause and fix
The trigger does nothingThe map has no ATB Battle Director, or the director has no Stage. Add them (or Make Battle Zone Here).
Classic encounters never startClassic Encounters Enabled is off in Turn-Based Battle. Turn it on, or the active rules profile is Tactics Only.
Every battle is ATB even though the encounter says TurnThe profile's Classic Mode Override is set to ATB. Clear it.
Time never stops in menusDefault ATB Time Mode is Active, or the player chose Active. Check Wait Pause too.
Enemies act while I chooseWait Pauses Enemies is off, or the mode is Active.
The back row does the same damage as the frontThe ability is magic or has Ignores Row. Only melee physical damage is halved.
A command seems lostIt was queued and dropped when its turn came (the target fell with no replacement, or the unit lost its MP). The HUD message says why.
No flee optionThe encounter has Can Flee off, or the menu layout has no list command with Include Flee ticked.
The turn order strip is missingOnly turn-based modes show it. ATB shows gauges.
Units overlap on the stageLanes Per Row or the spacing values are too small for your unit count.

11.9 See also

12. Free Tactics (Live)

In short: Free Tactics is a turn-based battle mode that is fought right on the exploration map, with free movement in meters instead of grid tiles. There is no loading screen and no battle map: enemies notice the party, the camera lifts into a tactical view, and everyone fights from where they stand. Use it for modern party-tactics fights: cover, height, surfaces, doors, summons and a battlefield you can break.

12.1 Basics

12.1.1 What the player sees

  1. Being noticed. Enemies have a vision cone and hearing. A bar fills above their heads while they see or hear the party. When it is full, a ! appears and the battle starts. The bar empties again if the party gets out of sight. Sneaking makes the party harder to see and hear. Tall grass and shadows hide it even better.
  2. How the battle opens. There are three openings:
    • They noticed you: normal initiative.
    • You reached them unseen (from behind, sneaking): a surprise round. The party acts first and the enemies lose their first turn.
    • They were waiting in ambush: the enemies act first and the party loses its first turn.
  3. A turn. The active character sees a soft outline on the ground that shows how far it can walk. Pointing at the ground shows the path and its length. Pointing at a target shows the damage, the chance to hit and the chance of a critical hit, with cover, height and flanking already counted. Walking and acting happen in any order until the turn's budget is spent or the player picks End Turn. Commands that cannot be used right now are dimmed and say why.
  4. Others join. Groups standing close to the fight join from the start. Enemies that walk past and notice the battle join at the start of the next round. Party members near the leader fight from where they stand.
  5. Running away. Flee works when no enemy that can see the character is within the escape radius. Fled units keep their HP. When everyone still standing has fled, the battle ends as an escape.
  6. The end. On victory, a banner lists experience, money and items, and the player keeps exploring from where they stand. On defeat, the Game Over screen offers Retry battle, which puts everything back as it was just before the fight.

12.1.2 Make a group fight in Free Tactics

  1. Select an Encounter Spawner in your level.
  2. In the Details panel, under Free Tactics, tick Free Tactics.
  3. Optional: tick Ambush so the group attacks first when it notices the party.

Or open an Encounter asset and set its Battle Mode to Free Tactics. Every spawner that uses it, and every trigger that starts it, then fights in Free Tactics. See Battle fundamentals for encounters and the battle mode override. A camp that should stand guard instead of wandering needs a Roaming Behavior whose Idle is Stand; Detection Speed on the behavior makes a group notice faster or slower.

12.1.3 Try it in two minutes

Open /RPGSagaEngine/Examples/Maps/L_RSE_StarterExample, press Play, open the console and type:

RSE.FreeTactics.Setup 16

A camp with walls, crates and tall grass appears 16 m in front of you. Walk toward it, or sneak around and strike from behind for a surprise round. RSE.FreeTactics.Setup 16 ambush makes the camp lie in ambush instead. These test commands are not in shipping builds. The map /RPGSagaEngine/Examples/Maps/L_RSE_FreeTacticsInterior is a two-floor house with stairs, a balcony, ladders, doors, windows and a basement. See Appendix C for every console command.

12.1.4 Hide a spot in tall grass or shadow

Place a volume over the grass and add the actor tag RSE.TallGrass (or RSE.Shadow). How much each tag hides is set in Project Settings → RPG Saga Engine → Stealth → Concealment Tags. You can add your own tags there.

12.1.5 Keep something out of the battle area

The battle area is measured from your level when the fight starts: walls, rocks and crates become cover. Any actor tagged RSE.FreeTacticsIgnore is left out (foliage, decorations, effects). The combat roles you give your assets decide what counts as full cover, half cover, rough ground or nothing at all (see Enemy AI and adaptive difficulty for the Combat Role Configurator).

12.2 How it works

Exploration (enemy notices party, or a trigger / dialog starts an encounter)
  -> URSEFreeTacticsSubsystem gathers who takes part (the group, the called-for-help enemies, nearby party members)
  -> ARSEFreeTacticsDirector captures the area into a navigation snapshot (meters, floors, cover, doors)
  -> URSEFreeTacticsBattle (RSECore) runs the rules: turn order, budgets, commands, surfaces, objects, AI
  -> the director shows the battle's events (camera, overlay, HUD, effects) and turns input into commands
  -> victory / defeat / escape -> back to exploration, no transition

The rules run without a world. URSEFreeTacticsBattle is plain data and logic in RSECore, so the same battle runs in the headless battle simulator and in automated tests. The director in RSE only captures the area, presents the events and turns the player's input into commands.

Every decision is a command. A move, an ability, a flee, a door, a jump and End Turn are each one FRSEFreeTacticsCommand. The battle validates a command (ExecuteCommand) and either applies it or refuses it with an ERSEFreeCommandResult (not your turn, cannot reach, action rejected, cannot flee, cannot use door, cannot jump). Commands are plain serializable data, which is why the same battle can be saved, replayed and driven over the network.

Who decides is a Free Tactics Controller (URSEFreeTacticsController): the local player (a queued controller that waits for input), the companion AI or the enemy AI. You can swap controllers per team or per unit at any time.

Turn order is individual Charge Time by default (fast units act more often), with an optional team-based round mode. Turn budget is either one shared Action Point pool, or three separate budgets: movement in meters, an action and a bonus action (the default).

Determinism. Every random roll (a slip, a status) uses the battle's seed, so the same commands give the same battle.

12.2.1 Battle feel

A live battle should feel like a fight, not like a menu. The classic modes are not changed by any of it, and every piece can be turned off.

12.3 Key classes and assets

Class / assetModuleRole
URSEFreeTacticsBattleRSECoreThe rules and state of one battle: units, turns, budgets, surfaces, objects, doors, overwatch, flee
FRSEFreeTacticsCommandRSECoreOne decision (Move, UseAction, EndTurn, Flee, Door, Jump) as plain data
URSEFreeTacticsControllerRSECoreAbstract, Blueprintable: decides commands for a unit or team (ProvideCommand)
URSEFreeTacticsQueuedControllerRSECoreA controller fed from outside; the local player and remote players use it
URSEFreeTacticsAIControllerRSECoreThe enemy and companion AI (see Enemy AI and adaptive difficulty)
URSECoverProviderRSECoreDecides what cover a blocker gives; subclass to change the rules
URSEFreeTacticsSettingsRSECoreRules (Project Settings → Free Tactics), a rules-profile section
URSEFreeTacticsFieldSettingsRSECoreBattlefield rules: surfaces, objects, pushes, jumps, falls
URSESurfaceDataRSECoreData asset: one ground surface (fire, water, oil...)
URSEFieldObjectDataRSECoreData asset: what a breakable or explosive object does when it breaks
FRSEAbilityFreeTacticsRulesRSECorePer-ability meters-based rules (range, area, cost, Overwatch)
URSEFreeTacticsSubsystemRSEWorld subsystem that starts battles and gathers participants
ARSEFreeTacticsDirectorRSEThe map director: captures the area, presents events, turns input into commands
ARSESurfaceSpotRSEPlaced actor that lays a surface when a battle starts
ARSEDoor, ARSELadder, ARSEInteriorVolumeRSEDoors, ladders and interior camera/battle-area volumes
URSEPartyFieldSubsystemRSEThe visible party: leader switching, formation, party orders
URSEPartyCommandDataRSECoreData asset: one party order
URSEFollowerProfileRSECoreData asset: formation values and idle behaviors of followers
URSEExplorationCameraSubsystemRSEThe tactical exploration camera shared with battles

12.4 Settings

Everything is in Project Settings → RPG Saga Engine. The groups that matter for Free Tactics:

GroupWhat you tune
Free TacticsSpace (meters per tile, unit radius, start nudge), navigation (snapshot cell size, step limits, any-angle paths), turns (action model, movement meters, actions and bonus actions, turn order), combat (arcs, height bonus), cover, opportunity attacks, openings, joining, fleeing, summons, doors, the AI's weights. A rules-profile section, so zones and bosses may override it.
Free Tactics (Presentation)Slow motion at the start, battle area size and growth, camera, ground overlay style, pace, victory banner, fallen enemies, texts.
Free Tactics FieldSurfaces, the reaction table, breakable objects, pushes, the fall damage curve, jumping, how much the AI cares about surfaces and barrels. A rules-profile section.
Free Tactics Field (Presentation)How surfaces, explosions, cover shields, forecasts, lines of fire and cutaways look.
Free Tactics (Co-op)Who commands unassigned units, turn timeout, guest pacing, pulling far players in.
Battle FeelThe entry, per-action pacing, juice, status visuals, intent icons and lines.
StealthDetection bar speeds, sneaking, hearing, concealment tags.
Party FieldFormation, follow distances, party orders.
ExplorationCamera style, tactical camera limits, camera input actions.
Camera OcclusionWhat fades or hides in front of the party.

Defaults worth knowing (all in Free Tactics):

SettingDefault
Action ModelMovement + action + bonus action
Movement Meters (Fixed source)9 m per turn, 1 action, 1 bonus action
Turn OrderIndividual (Charge Time)
Meters Per Tile1.5 m
Opportunity AttacksOff. Reactions then come from Overwatch abilities.
Surprise RoundsOn
Call For Help Radius12 m
Party Join Radius20 m
Escape Radius / Escape Hidden Radius8 m / 3 m
Pursuit Leash Radius20 m
Summon Placement Range6 m
Doors in battleOn, a door costs a bonus action

Every value is checked when you save (IsDataValid). For example the editor warns when the overlay material does not match the overlay style, or when the tactical camera's zoom limits are the wrong way round. See Appendix B for the full list.

12.5 Blueprint usage

12.5.1 Start a battle from a trigger or a dialog

  1. Event (Box Trigger overlap, or a dialog effect) → Get RSE Free Tactics Subsystem (a world subsystem node).
  2. Start Encounter Battle (Encounter = DA_Encounter_Camp, Opening = Normal, Enemy Actors = the enemies standing in your level, Source = Self).
  3. Branch on the returned Boolean: false means a battle cannot start now.

Start Group Battle does the same for a visible group of an Encounter Spawner (Spawner, Group Index, Opening). The opening is ERSEFreeOpening: Normal, Player Surprise or Enemy Surprise.

12.5.2 Ask what is going on

12.5.3 Write your own controller

  1. Create a Blueprint class from Free Tactics Controller.
  2. Override Provide Command (Battle, Unit Id → Out Command, return value). Fill the command (for example Make Move style: Type = Move, Unit Id, Point) and return true, or return false to wait.
  3. Optional: override On Command Rejected to react when the battle refuses a command.
  4. On the battle, call Set Team Controller (a team tag) or Set Unit Controller (a unit id).

12.5.4 Change the battlefield from a script

12.5.5 Presentation events

The director exposes On Event Presented, On Callout (a bark or an intent over a unit), On Notice and On Custom Menu Command. Bind them in a HUD Blueprint. See Appendix A for every node.

12.6 C++ usage

Drive a battle from code, for example from a custom controller:

UCLASS()
class UMyHoldPositionController : public URSEFreeTacticsController
{
	GENERATED_BODY()

protected:
	virtual bool ProvideCommand_Implementation(URSEFreeTacticsBattle* Battle, int32 UnitId,
		FRSEFreeTacticsCommand& OutCommand) override
	{
		// Never move: end the turn facing north.
		OutCommand = FRSEFreeTacticsCommand::MakeEndTurn(UnitId, 0.f);
		return true;
	}
};

// Somewhere that owns the battle:
Battle->SetUnitController(UnitId, NewObject<UMyHoldPositionController>(Battle));
const ERSEFreeCommandResult Result = Battle->ExecuteCommand(
	FRSEFreeTacticsCommand::MakeMove(UnitId, FVector(4.f, 0.f, 0.f)));

Start a battle from C++:

if (URSEFreeTacticsSubsystem* Free = URSEFreeTacticsSubsystem::Get(this))
{
	Free->StartEncounterBattle(Encounter, ERSEFreeOpening::PlayerSurprise, EnemyActors, this);
}

Extension points:

12.7 Advanced

12.7.1 The battlefield

The ground itself takes part in the fight.

Surfaces. Fire, water, electrified water, ice, oil, poison, blood and steam lie on the ground as areas measured in meters and drawn on the real terrain. When two surfaces meet, or an attack of an element hits one, they react: fire on oil makes a bigger fire, lightning on water electrifies it, cold freezes water, fire melts ice, water puts fire out. Reactions can chain (burning oil reaches a barrel, the barrel explodes). The AI avoids harmful surfaces and likes to ignite oil or electrify the water its enemies stand in.

To make your own surface:

  1. Create an RSE Surface Data asset (or duplicate one of /RPGSagaEngine/Data/Field/DA_Surface_*).
  2. Give it a Zone Tag (for example Zone.Tar), a name, a color and a Look (Liquid, Fire, Frozen, Oil, Toxic, Electric, Vapor).
  3. Fill in what it does: Effects On Enter, Effects On Turn Start, Duration Turns, Move Cost Multiplier, Slip Chance, Slip Status and the Visual.
  4. Add its reactions in Project Settings → Free Tactics Field → Interactions: one row per pair (this surface + this element, surface or weather = that surface, or nothing to remove it).
  5. Let an ability make it with a Create Zone effect.

Surfaces already lying in the level. Place an RSE Surface Spot actor over a ford, a puddle of oil or a marsh and set its Surface. Scale its box to the area (or tick Circle). When a battle starts, every spot inside the battle area lays its surface. Duration Rounds 0 keeps it for the whole battle, -1 uses the surface's own duration. Outside battles the spot does nothing and is not drawn.

Breakable and explosive objects. Give a mesh the combat role Destructible or Explosive. The role sets the hit points, and its Break Object (a Field Object Data asset) sets the explosion's damage and radius, the surface it leaves and the effects it plays. Examples: DA_Object_ExplosiveBarrel, DA_Object_Crate. A broken object stops being cover.

Pushes, jumps and falls. Shove and every Knockback effect push a unit back in meters: into a wall it takes collision damage, off a ledge it falls and takes damage by height (the Fall Damage curve). Jump is a command next to Move that crosses gaps and climbs low ledges; it costs movement or the bonus action, as you set in Free Tactics Field → Jumping. Leap, Dash, Teleport and Swap work in meters too.

Reading the battlefield. Pointing at a spot you can walk to shows cover shields on the side of each enemy it covers from, plus the hit and critical chance each enemy would have against you there. A line of fire shows green when clear, yellow through cover and red where a wall blocks it. Roofs, upper floors and tree canopies tagged with the combat role Overhead (or an actor tag from Cutaway Tags) are cut away while the camera looks under them.

12.7.2 Abilities in meters and Overwatch

An ability without its own Free Tactics rules is converted from its Tactics rules (1 tile = Meters Per Tile). To tune it, open the ability and turn on Free Tactics Rules → Override: Action Cost, Action Point Cost, Min and Max Range, vertical tolerance, line of sight and trajectory (direct or arc), area shape (single, circle, cone, line), radius, falloff, uses per turn and whether it ends the turn.

Overwatch (a stance) is set in the same struct. Tick Overwatch → Enabled on an ability: using it puts the unit on watch until its next turn. The first enemy that enters, or moves within, its watch Range is answered at once with the Response ability at Damage Factor (0.7 by default). By default it spends the rest of the turn and ends it. Overwatch is how reactions come into the live mode while Opportunity Attacks stays off.

If you turn Opportunity Attacks on, a unit that walks out of an enemy's melee reach provokes a strike. The traits Trait.Reaction.OpportunityAttack and Trait.Reaction.NoOpportunityAttack (on a class, character, equipment or status) decide for their unit whatever the setting says.

12.7.3 Summons

Summons appear where the summoner points. The ground shows every legal spot (within Summon Placement Range, standable, with room for the creature, not on anybody, in the summoner's sight). A refused spot says why. A big creature takes more room: set Summon Footprint Radius on the Pact, or Footprint Radius on the Summon Units effect.

12.7.4 Inside buildings

The battle map is measured with every floor of every spot, so units can fight on a balcony over the yard, a bridge, a basement.

Each floor needs its own collision (one slab per actor or per component): one mesh holding several floors is read as its top floor only.

12.7.5 The visible party

Outside battle the party walks behind the leader in formation. Switch Leader and Party Command are input actions in Project Settings → Exploration. Party Command opens a radial menu of orders (Search here, Open / unlock, Guard here, Come to me, Stay, Scout ahead). Each order is a Party Command Data asset (requirements, chance of success with a bonus for preferred classes, effects on success and on failure, the noise of a failure, texts), added in Project Settings → Party Field → Commands. Members keep a loose place that drifts, close up in corridors, stroll and play idle animations when the leader stands still. That comes from a Follower Profile asset (formation values and a weighted list of idle behaviors with cooldowns). Add a behavior by adding an entry, or by subclassing RSE Idle Behavior (URSEIdleBehavior) in Blueprint. RSE Idle Spot actors give them benches and walls to use.

In Blueprint, the party field subsystem offers Cycle Leader, Set Leader, Follow, Stay, Refresh Followers and Toggle Command Menu.

12.7.6 The exploration camera

Outside battle the party is seen from above at a tactical angle, and the same camera runs the battles, so a fight starts with the camera simply taking over. Zoom, tilt, turn and pan are all player-controlled (and rebindable in Options). Walls and trees fade only where they hide a character:

To add the exact fade to your own materials, select them in the Content Browser, then right click → RPG Saga: Add Camera Occlusion Fade (and RPG Saga: Remove Camera Occlusion Fade to undo). The tool changes only materials under Camera Occlusion → Opt In Content Roots (/Game/ by default) and keeps backups in Saved/RSE/CameraOcclusionBackups/. Tag an actor RSE.NoFade to keep it from ever fading, and RSE.Ground for ground meshes. Place an RSE Exploration Camera (Level) actor to give one level its own camera style or limits (a town can keep the classic close third-person camera while the rest of the game uses the tactical one). In Blueprint, Get Camera Style, Set Camera Style and Clear Camera Style on the exploration camera subsystem switch it live. See Camera and battle presentation.

12.7.7 Co-op

Free Tactics is host-authoritative. The host's battle owns the rules; guests present the host's events and send commands for the units they play. Settings in Project Settings → Free Tactics (Co-op):

Single-player games read none of this. See Co-op and online.

12.7.8 Performance notes

The navigation snapshot cell size (Snapshot Cell Size, 0.25 m) trades path detail against memory and capture time; raise it for large battle areas. Max Search Cells guards path searches. The AI samples AI Candidate Positions per decision, so lower it on weak hardware. Nothing in the mode needs Tick outside an active battle.

12.8 Troubleshooting

SymptomCauseFix
The group never starts a Free Tactics battleThe encounter's Battle Mode is not Free Tactics, or the spawner's Free Tactics box is offSet the Battle Mode on the Encounter, or tick Free Tactics on the spawner
Units stand inside a wall at the startThe wall was captured as walkable, or has no collisionGive it collision and a combat role (Full cover or Obstacle)
Foliage or a decoration blocks movementIt was captured as an obstacleTag the actor RSE.FreeTacticsIgnore, or give it the Neutral decoration role
Units on different floors block each other, or the upper floor is not walkableOne mesh holds several floorsSplit the floors into separate slabs, one per actor or component
Stairs cannot be climbedSteps are separate narrow meshesTag each step RSE.Floor, or raise Max Step Up a little
Flee is dimmed ("Enemy near")A seeing enemy is within Escape RadiusWalk away first, or use Escape Rounds for a delayed escape
Flee does nothing for a bossThe encounter's Can Flee is offTurn it on, or keep the boss unfleeable on purpose
No opportunity attacksOpportunity Attacks is off by defaultTurn it on in Free Tactics, or give abilities an Overwatch stance
A surface does not reactNo row in Free Tactics Field → Interactions for that pairAdd the row
A wall hides the party instead of fadingThe mesh is translucent or not a meshAdd the fade to its material, or tag it for a ghost; see the camera tool above
A battle in a house shows the wrong cameraTwo volumes overlap with equal priorityRaise the Priority of the one that should win

12.9 See also

13. Action battles

In short: Action battles are fought live. The player swings a sword, rolls, guards, parries, aims a gun or casts a spell, and the enemies do the same, all on the party, classes, abilities, items and statuses you already built for the other modes. Use it for a sword game, a shooter, or a hybrid. The fight happens where the party stands (in a bounded arena or in the open), alone or in co-op.

13.1 Basics

13.1.1 What an action battle is

An encounter is an action battle when its Battle Mode is Action (Battle.Mode.Action). Nothing else about the encounter changes: enemies, levels, rewards, loot and story effects are the same fields as in any other encounter. Start it like any battle: a story effect that starts an encounter, or an Encounter Trigger with its Action Encounter set (walk in and the battle starts where the party stands).

Every action battle is framed one of two ways (a rule of its rules profile):

FramingWhat the player seesHow it ends
Bounded (default)A combat area with a banner and a ring on the ground, then a results screenThe enemies fall, the party falls, or every party member stays outside the area for a few seconds (fled)
OpenNo results screen: loot appears as toasts and the world carries onThe enemies fall, the party falls, or the party gets far enough from every enemy for long enough (fled)

Bounded fits arenas, bosses and set pieces. Open fits roaming enemies in a living world. Victory and defeat use the same objectives as every other mode. Defeat shows the game over screen, and Retry puts everyone back where they stood. There is no saving during a battle, as in every mode.

13.1.2 Three presets

All numbers of the mode are one settings section, Action Battle, and also a section of every rules profile. Three presets set every number to a starting point (Apply Preset on the section, or one of the shipped rules profiles):

PresetProfileFeel
MeleeDA_Rules_Action_MeleeCooldown abilities, guard and parry, 0.3 s of i-frames on a dodge
ShooterDA_Rules_Action_ShooterCooldown abilities, no guard or parry, a short roll, strong aim assist, long lock-on
HybridDA_Rules_Action_HybridA gauge that hits fill and abilities spend (no cooldowns), guard and parry

The Game Foundation can also start a project as an action game: the presets Action: Swords and Action: Shooter (Studio → Foundation) turn the Action mode on, write the matching preset into the Action Battle rules and make Action the mode new battles start with. See Game foundation and archetypes.

13.1.3 Your first action battle

  1. In RPG Saga Studio, open World → New Action Battle.
  2. Pick a preset, a bounded area (with its radius) or an open fight, the enemies, and optionally a weapon per class.
  3. Press Simulate. The real-time AI plays quick headless battles on both sides and tells you how fair the fight is (Easy, Fair, Hard, Very hard).
  4. Press Create. The wizard makes the Action encounter, plus a small rules profile if the framing or the area differs from the preset. It can place an Encounter Trigger in front of the camera.
  5. Play. The example map /RPGSagaEngine/Examples/Maps/L_RSE_ActionArena has a Melee, a Shooter and a Hybrid encounter.

If a character has no weapon, everyone punches: link an Action Weapon from the character's equipment, or set a Default Weapon in the rules.

13.1.4 Default controls

All keys are remappable in Project Settings → Action Battle (Presentation) → Input, or give your project its own Input Mapping Context.

ActionKeyboard and mouseGamepad
Light attack / fireLeft mouseRight trigger
Heavy attackFRight shoulder
AimRight mouseLeft trigger
GuardQLeft shoulder
ParryETop face button
DodgeSpaceRight face button
Lock onMiddle mouseRight stick click
Next / previous targetMouse wheelD-pad right / left
Switch characterTabD-pad up
ReloadRLeft face button
Party ordersG, then 1 to 5

13.2 How it works

Encounter (Battle Mode = Action) starts where the party stands
  -> URSEActionBattleSubsystem::StartEncounterBattle spawns the director
  -> ARSEActionBattleDirector builds a URSEActionBattle (RSECore) and binds each character
  -> input -> URSEActionControlsComponent -> FRSEActionCommand -> URSEActionBattle::ExecuteCommand
  -> the battle steps at a fixed rate (Step Seconds): phases, stamina, poise, cooldowns, projectiles
  -> hits are claimed by the presentation (animation windows, traces, projectile actors); the host validates every claim
  -> events -> URSEActionCombatComponent plays montages, effects and hit reactions; the HUD follows

The simulation is separate from the picture. URSEActionBattle in RSECore advances in fixed steps (StepSeconds, 1/30 s by default), so a seed replays exactly and the battle can run headless in the simulator and in tests. The presentation in RSE moves characters, plays animation, claims hits and draws the HUD.

Every action has phases. Windup (telegraphed), Active (it can hit now), Recovery. Dodges have i-frames. Guarding reduces damage and drains stamina, and a block that runs out of stamina is a guard break. A parry is a timed guard that staggers a melee attacker. Poise absorbs hits until the unit staggers.

Hits are claimed, then checked. The character's attack opens a hit window (from an RSE Action Hit Window animation notify state, or from the action's own timing). The presentation claims what the attack touches. The battle accepts a claim only if the action exists, it is inside the active window (plus a latency tolerance), within reach (plus a tolerance), and only once per victim. This is the same check that keeps co-op honest.

Abilities in real time. Every ability you already have works at once. Without its own Action rules, an ability gets derived rules from its other data: self abilities stay on the caster, allies are healed or buffed directly, enemies within a tile or so are melee, enemy areas become areas (tiles times meters per tile), everything else is a projectile. Damage, element, statuses, shields, reactions and costs remain the ability's shared data, so the same effects resolve in every mode. Statuses run on a per-unit clock (Seconds Per Turn is "one turn").

Ability pacing is one big choice (Ability Pacing in the rules): Cooldown (each ability has a cooldown), Gauge (hits dealt, hits taken and parries fill segments, abilities spend them) or Resource Only (MP and similar, no cooldowns).

13.3 Key classes and assets

Class / assetModuleRole
URSEActionBattleRSECoreThe rules and state of one battle: units, phases, stamina, poise, cooldowns, projectiles, claims
FRSEActionCommandRSECoreOne decision (attack, ability, dodge, guard, ...) as plain data
URSEActionRulesRSECoreRules (Project Settings → Action Battle), a rules-profile section
URSEActionWeaponDataRSECoreData asset: a weapon with combos, fire modes, block and parry permissions
URSEActionComboDataRSECoreData asset: a chain of combo steps (power, windup, windows, hitbox, montage section)
FRSEAbilityActionRulesRSECorePer-ability real-time rules (ActionRules on an ability)
URSEActionAIRulesRSECoreReal-time AI numbers (Project Settings → Action AI)
URSEActionAIControllerRSECoreThe real-time AI for enemies and companions nobody plays
URSEActionBattleSubsystemRSEWorld subsystem: starts action battles, finds the active director
ARSEActionBattleDirectorRSEThe presenter of one battle (Blueprintable, not placeable): flow, hits, HUD, camera
URSEActionCombatComponentRSE"RSE Action Combat": what a character does in an action battle
URSEActionControlsComponentRSE"RSE Action Controls": the player's input, lock-on, party orders, switching character
ARSEActionCameraRigRSEThe action camera (combat, aim and lock-on profiles)
ARSEActionProjectileActorRSEThe projectile actor (Blueprintable)
URSEAnimNotifyState_ActionHitWindowRSEAnimation notify state that opens a hit window
URSEActionPresentationSettingsRSEPresentation settings (Project Settings → Action Battle (Presentation))
URSEActionHUDWidgetRSEThe action HUD

The shipped weapons live in /RPGSagaEngine/Data/Action: Sword, Dagger, Greatsword, Rifle, Pistol, Shotgun, Bow, Staff and Gunblade. Make your own by duplicating one. The Studio never edits the shipped ones.

13.4 Settings

WhereWhat
Project Settings → RPG Saga Engine → Action BattleEvery rule of the mode: time step, stamina, dodge, guard, parry, poise, ability pacing and gauge, framing, movement, targeting and aim assist, input buffer, items, derived ability rules, network tolerances, simulator. Also a rules-profile section.
… → Action AIThink rate, positioning, reactions, stamina habits, party orders. Also a rules-profile section.
… → Action Battle (Presentation)Encounter flow, hits, weapon visuals, feel (hit-stop, shake, afterimages), camera profiles, targeting, input, HUD.
… → Features → Action CombatSwitches the whole mode off. Action encounters then refuse to start.
… → Battle → Default Encounter ModeThe mode new battles start with in the wizards.

Defaults worth knowing (Action Battle rules):

SettingDefault
Step Seconds1/30 s
Seconds Per Turn5 s
Stamina Max / regen100 / 35 per second (after a 0.8 s delay)
Dodge25 stamina, 0.5 s, 0.3 s of invulnerability
Block Damage Multiplier0.25, Block Angle 140 degrees
Parry Window0.2 s
Poise Max100
FramingBounded, Bounded Area Radius 25 m, Leave Area Seconds 3
Lock On Range20 m
Input Buffer Seconds0.15 s

Every number is validated (URSEActionRules::Validate). See Appendix B for the full list.

13.5 Blueprint usage

13.5.1 Start an action battle from a script

  1. Event (Box Trigger overlap, or a dialog effect) → Get RSE Action Battle Subsystem.
  2. Start Encounter Battle (Encounter = a Battle Mode = Action encounter, Enemy Actors = the enemies standing in the level, Source = Self).
  3. Branch on the returned Boolean.

For no-script setups, place an Encounter Trigger and set its Action Encounter. The trigger's validation warns if a Tactics or ATB director is also set, or if the encounter's mode is not Action.

13.5.2 Ask what is going on

13.5.3 Drive the controls yourself (custom input, touch, scripted scenes)

13.5.4 React to what happens

Bind On Action Event on the RSE Action Combat component (one battle event about this character: it acts, it is hit, it guards...), On Hit Claimed (a hit of this character's attack was claimed), or On Battle Event on the director. A Blueprint character that wants to play its own animations turns Play Action Anims off and plays montages from On Action Event.

13.5.5 Add hit windows to your animations

In a montage or animation, add an RSE Action Hit Window notify state across the frames where the weapon is dangerous. Without it, hits come at the action's timing, which still works but ignores the animation.

13.6 C++ usage

Start a battle and read a character's combat state:

if (URSEActionBattleSubsystem* Action = URSEActionBattleSubsystem::Get(this)) // via the world
{
	Action->StartEncounterBattle(Encounter, EnemyActors, /*Source*/ this);
}

if (URSEActionCombatComponent* Combat = URSEActionCombatComponent::FindActionCombat(Character))
{
	if (Combat->IsInActionBattle() && Combat->IsHitWindowOpen())
	{
		// A custom effect while the weapon is dangerous.
	}
}

Feed input to a custom pawn without the stock input mapping:

if (URSEActionControlsComponent* Controls = URSEActionControlsComponent::FindActionControls(PlayerController))
{
	Controls->PressInput(ERSEActionInput::Dodge, true);
	Controls->PressInput(ERSEActionInput::Dodge, false);
}

Extension points:

13.7 Advanced

13.7.1 Weapons and combos

A weapon is a RSE Action Weapon Data asset, linked from an equipment item (Action Weapon on the item). Units without one use the rules' Default Weapon; units with neither fight with their basic attack and derived rules.

A weapon has:

13.7.2 Per-ability real-time rules

On an ability, Action Rules → Override lets you set the delivery (melee, projectile, hitscan, area, direct, self), the hitbox, windup, active time, recovery, cancel window, cooldown, stamina, gauge cost, poise damage, reach, projectile speed, radius, gravity, homing and pierce. Leave it off and the derived rules from the rules asset's Derived Ability Rules apply (melee range 2.2 m, windup 0.35 s, recovery 0.45 s, a cooldown from a base plus the resource cost).

13.7.3 The AI

Enemies, and companions nobody plays, are driven by URSEActionAIController: one real-time AI with the same intelligence dial (0 to 1) as the other modes. It thinks on a throttled cadence (0.6 s at intelligence 0 down to 0.25 s at 1, staggered across units), scores options with the shared utility brain plus real-time terms (travel time, windup to interrupt, stamina reserve), samples where to stand (rings, distance, danger, flanking, cover, line of sight, retreat, the combat area), and has a reactive layer that answers telegraphs and incoming projectiles with a parry, a block or a well-timed dodge. The reaction chance runs from 5 percent at intelligence 0 to 90 percent at 1, and reaction time and timing error follow it. Combat roles act in real time: tanks intercept and guard, snipers keep their range, controllers disable first, supports heal and buff, berserkers press. See Enemy AI and adaptive difficulty.

13.7.4 Party orders

Companions follow live orders: Free, Follow, Attack My Target, Hold Position, Defend Me. The order wheel opens on G (or keys 1 to 5). Switch Character hands control to another member, and the one left behind is driven by the AI with its order. Orders go through the command bus, so Co-op Rules → Companion Orders decides who may order whom.

13.7.5 Camera and feel

The camera has three profiles (Combat Camera, Aim Camera, Lock On Camera) with a collision probe and a trauma shake, blended over Camera Blend Seconds. Feel settings give hit-stop (their own time only, never the world's, so co-op is safe), shake on hits dealt, taken and heavy, dodge afterimages, bursts for hit, block and parry, a muzzle flash and a shot color. See Camera and battle presentation.

13.7.6 Finishers

A kill or stagger by a player can play a finisher, a paired animation between attacker and victim from the Animation & FX Library's paired clips. Players choose Off, Sometimes or Always in Options → Finishers. It never changes who wins and is skipped when no pair fits. See Character visuals and animation.

13.7.7 Co-op

The host runs the battle. Guests see it live and claim the hits of their own character. Hit claims are validated by the host (the action, the active window plus a latency tolerance, the reach plus a tolerance, once per victim). The tolerances, the position history length and the mirror rate are rules (Network section of Action Battle), and a guest's predicted dodge is smoothed rather than snapped (Dodge Reconcile settings). Action encounters stay live in co-op; they are never converted to turn-based. See Co-op and online.

13.7.8 Make a sword game or a shooter

A sword game:

  1. Foundation preset Action: Swords.
  2. Give each class a weapon: duplicate Sword, Dagger or Greatsword, tune the combo steps, link it from an equipment item.
  3. Build an animation style in the Animation & FX Library, apply it to your characters, then run Dress My Abilities so combo, dodge, block and parry clips fill the action animation slots.
  4. New Action Battle: Melee, bounded area, enemies, Simulate until it reads Fair, Create.
  5. Tune the feel: parry window, dodge i-frames, poise, stamina.

A shooter:

  1. Foundation preset Action: Shooter.
  2. Choose Rifle, Pistol, Shotgun or Bow. Set Ammo Item on the fire modes for a limited reserve.
  3. Put cover in your level (the simulator scatters its own from Sim Cover Count).
  4. New Action Battle: Shooter, an open fight for roaming enemies, Simulate.
  5. Tune aim assist, lock-on range and HUD layout.

A game that mixes both uses the Hybrid preset.

13.7.9 Performance notes

The component adds no Tick outside a hit window, a dodge or a hit-stop. The AI thinks on a throttle and a stagger, so a big crowd never decides on the same step. Lower Position Directions and Position Rings in Action AI on weak hardware.

13.8 Troubleshooting

SymptomCauseFix
The battle does not startFeatures → Action Combat is off, or the trigger's Action Encounter is emptyTurn the feature on, set the encounter
The trigger reports an errorA Tactics or ATB director is set as well, or the encounter's mode is not ActionClear the director, set Battle Mode to Action
Everyone punchesThe unit has no weaponLink an Action Weapon from its equipment, or set Default Weapon in the rules
No animations, but hits landThere are no action clipsBuild a style and run Dress My Abilities
Hits feel ignored by the animationNo RSE Action Hit Window notify stateAdd the notify state to the montage
Fights are too easy or too hardEnemy levels or the AI floorSimulate in the Studio, then adjust levels or the AI floor in Action AI
Shots start at the wrong placeNo Muzzle socketAdd a socket named like Muzzle Socket on the mesh, or change the property on the component
The player cannot guardThe weapon forbids it, or guard is offCheck Can Block on the weapon and Guard Enabled in the rules

13.9 See also

14. Enemy AI and adaptive difficulty

In short: Every enemy (and every companion nobody plays) fights with an AI profile: a small data asset that says what the unit goes after. One utility AI serves every battle mode. A single number per mode, the intelligence (0 clumsy, 1 sharp), says how well it does it, and adaptive difficulty moves that number slowly from how the player is doing. Boss phases, team roles, rules and scorers make special enemies without code. If you already have Behavior Trees or StateTrees, nodes let them ask the utility AI what to do.

14.1 Basics

14.1.1 The idea: profile plus intelligence

The same profile drives grid Tactics, Free Tactics, ATB, turn-based and Action battles. Each mode has an adapter that turns the shared scoring into its own commands.

14.1.2 Pick a ready style

  1. RPG Saga Studio → New enemy, step Abilities and AI: pick a style card. Each card has a one-line description.
  2. Want something else? Studio → New AI style (or Configurator → Tools → AI Profile Preview → New AI style...):
    1. pick a base style (the Boss tab lists the boss styles);
    2. name it, choose its team role and move the sliders;
    3. check the curves over intelligence;
    4. Simulate: your starting party fights test enemies that play the new style, then the base style;
    5. Create. The profile appears in the New Enemy wizard's list.

The ready styles:

StyleRoleWhat it does
BerserkerDamageCharges the nearest foe and never backs off; hits harder the more hurt it is
SniperDamageShoots from as far as it can and backs away from anyone who closes in
SummonerSupportCalls its creatures first and stays safely behind them
TankTankStands between enemies and its fragile allies, taunts, guards, blocks corridors
ControllerControllerSleeps, slows and weakens before dealing damage; casters and healers first
CowardNoneWeak hitter that runs away when hurt
HealerSupportKeeps allies alive: raises and heals first, buffs, stays out of reach
SkirmisherDamageDarts in to strike from the side, then pulls back
AmbusherDamageHolds position until a foe is within reach, then strikes hard
Pack HunterDamageEvery member goes for the same prey until it falls

Older profiles (Aggressive, Cautious, Guardian, Hunter, Support, Trickster) stay available. Boss styles are a profile plus phases: Juggernaut, Summoner Lord, Phase Shifter, Glass Cannon Caster, Enrage Timer and Duelist. They use only plugin content, so they work in an empty project. Replace the abilities and summons with yours.

14.1.3 Bosses and phases (no code)

A boss profile has Phases, entered in order at safe points (before any AI decision). In the AI Style wizard's Boss tab each step is one phase:

Everything else of a phase (extra triggers, rules) stays editable in the profile. Create writes DA_AI_<Name> in your project. Creating again with the same name updates the profile in place, so enemies using it keep it. Plugin styles are never changed.

14.1.4 Set per-encounter limits

On an Encounter asset, Min Intelligence and Max Intelligence bound what adaptive difficulty may do for that fight. A boss with Min Intelligence 0.7 never drops below 0.7, however poorly the player does. To pin a fight at one value, set both to it.

14.2 How it works

Battle starts
  -> URSEDifficultySubsystem::BeginBattle resolves the intelligence for the mode and encounter
  -> each AI turn: the mode's adapter builds options (abilities x targets x positions)
  -> the shared utility brain scores them: profile weights (curves over intelligence) + rules + scorers + role terms
  -> "decision quality" noise: at low intelligence the 2nd or 3rd best option may win
  -> the Decision Policy (optional Blueprint) may override the choice
  -> the mode turns it into a command (Free Tactics, Tactics, ATB, turn-based or Action)
Battle ends
  -> URSEDifficultySubsystem::RecordBattle measures it and nudges the intelligence for that mode

14.2.1 Utility scoring

Every option gets a score from the profile's weights. A weight is an FRSEAIScalar: a constant, a range over intelligence (Min at 0, Max at 1) or a curve. Weights include damage, kill bonus, flanking, status value, healing, danger avoidance, preferred distance, protecting allies, retreat HP, resource cost, and the intelligence knobs: Decision Quality, Weakness Knowledge, Danger Awareness, Focus Fire, VIP Focus, Pact Awareness, Charge Interrupt and Resource Management. Gates switch whole behaviors (flanking, protecting the support, combos) on only from a given intelligence. Global numbers (the noise temperature at low and high intelligence, focus-fire weight, item use penalty, summon value) are in Project Settings → AI.

14.2.2 Team roles

A profile's Role gives the unit team behavior in every mode:

RoleBehavior
TankHolds the line: stands on the enemy's way to a fragile ally (support, controller, VIP, a healer, a badly hurt ally), prefers taunts and guards allies the enemy can reach
DamageGoes for kills (a likely kill is worth more) and high-value targets: dangerous enemies, casters, healers
ControllerDisables and debuffs before raw damage, casters and healers first, areas that catch several enemies
SupportHeals, plus buffs on allies enemies can reach; the others guard it

Only the weights of the unit's own role apply (the Team Role category of the profile).

14.2.3 Rules and scorers

14.3 Key classes and assets

Class / assetModuleRole
URSEAIProfileRSECoreThe AI profile data asset: weights, gates, role, rules, scorers, phases, last stand, decision policy
FRSEAIScalarRSECoreA value that may change with intelligence (constant, range or curve)
FRSEAIRuleRSECoreOne if-then rule
FRSEAIPhaseRSECoreOne boss phase
URSEAICondition, URSEAIScorerRSECoreAbstract, Blueprintable extension points
URSEAIDecisionPolicyRSECoreAbstract, Blueprintable: the last word on every decision
URSEAIBattleBrainRSECoreThe AI state of one battle: phases, team blackboard, debugger records
URSEFreeTacticsAIController, URSEActionAIControllerRSECoreMode controllers for Free Tactics and Action
URSEAISettingsRSECoreGlobal AI numbers (Project Settings → AI), a rules-profile section
URSEDifficultySubsystemRSECoreGame-instance subsystem: owns the adaptive state, resolves intelligence, records battles
URSEDifficultySettingsRSECoreProject Settings → Difficulty
URSEAIStyleLibraryRSECoreBlueprint/Python helpers behind the AI Style wizard
URSEAIInteropRSEShared logic of the Behavior Tree and StateTree nodes
URSEActionInterop, URSEActionAgentsRSEAction battle side of the interop, and finding an actor's action agent
URSECombatRoleRegistry, URSECombatRoleSettingsRSECoreWhat your props mean in battle (cover, obstacles, ...)

14.4 Settings

WhereWhat
Project Settings → RPG Saga Engine → AICandidate limits (Max Move Candidates), noise (Noise Top Options, temperature at min and max intelligence), danger awareness floor, focus fire, VIP multiplier, ATB charge interrupt, item penalties, revive and summon value
… → Action AIReal-time numbers: think rate, positioning, reactions, party orders (see Action battles)
… → Free Tactics → AICandidate positions, cover, height, spacing, overwatch and opportunity risk weights, single move, jumps
… → DifficultyThe adaptive controller (below)
… → AI DebuggerThe in-game debugger
… → Combat RolesRoles, suggestions, registries

14.4.1 Adaptive difficulty settings

Tactics and ATB each have their own intelligence and their own history, so an ATB fight never moves the Tactics value (the turn-based modes use the ATB value).

SettingDefaultMeaning
EnabledonOff: the encounter's own intelligence is used and nothing is recorded
Tactics / ATB → Start Intelligence0.5 / 0.5"Medium" at a new game
Tactics → Target / Worst Turns Per Enemy4 / 10Tempo that counts as "even" and as "struggling"
ATB → Target / Worst Turns Per Enemy3 / 8The same for ATB
Min / Max Intelligence0.15 / 1Global limits
Window Size5Battles averaged per mode
Min Battles To Adjust3Battles needed before the first change
Gain0.2Speed of adjustment
Dead Zone0.05Distance from "even" that changes nothing
Max Step Up / Down0.05 / 0.03Largest change per battle; falling is slower than rising
Tempo / Damage / Fallen Weight1 / 1 / 1Weights in the battle score
Target / Worst Damage Taken Share0.35 / 1Share of the party's max HP lost
Target / Worst Fallen Share0.1 / 0.75Share of units that fell
Retry Penalty0.1Score lost per retry of a won fight
Retry Weight Falloff0.5Weight of repeated defeats at one encounter (1, 0.5, 0.25...)
Record EscapesoffWhether fleeing counts

How it works: after each battle the subsystem scores it from 0 (the player struggled) through 0.5 (even) to 1 (the player dominated), from turns per enemy, damage taken and units fallen. A defeat scores 0. The controller is relative: it moves the intelligence only while the average of the last few battles sits above or below 0.5, so a player who plays an even game at 0.8 stays at 0.8. Repeated losses at one encounter count less and less, so losing on purpose does not fool it.

The intelligence a battle actually uses comes from, in order: the RSE.Difficulty.Override console variable (0 to 1, debug), else the adaptive value for the mode clamped to the global limits and then the encounter's Min and Max (the encounter's own Intelligence field is ignored while adaptive difficulty is on), else the encounter's Intelligence when adaptive is off. Rules profiles can override the Difficulty section per zone or boss.

14.5 Blueprint usage

14.5.1 Make a "royal guard" with a Decision Policy

A Decision Policy has the last word on a unit's decision, after the utility scored and picked an option.

  1. Create a Blueprint with the parent AI Decision Policy.
  2. Override Override Decision: you get the context, the options (best first: kind, ability, item, target, score) and the index the AI picked. Set Out Index and return true to take another option.
  3. Override Override Target: when the final option uses an ability, you get every unit that ability was scored on. Return true with another Out Target Id to aim it there.
  4. Set it on the profile (Decision Policy). Keep it deterministic: read the battle, never change it, no global random. Rules marked Force are not sent to the policy.

Use the RPG Saga | AI nodes to read the battle: Get Unit, Get HP Percent, Has Status, Get Resource, Get Attribute, Is Weak To, Get Distance, Are Enemies, Count Units, Get Team Focus Target, Get Unit Ids, Evaluate Scalar.

For a "royal guard" that never attacks the player's leader while the queen lives: in Override Target, if the candidate is the VIP and a Queen team value is set, return another candidate.

14.5.2 Add your own scorer or condition

14.5.3 Read or set intelligence

On the difficulty subsystem: Get Mode Intelligence, Set Mode Intelligence and Get Intelligence For Encounter.

14.5.4 Change a unit's behavior mid-fight

A battle script effect Change AI Profile (URSEBattleScriptEffect_ChangeAIProfile) swaps the profile from a scripted beat. Boss phases do the same through their Profile field.

14.6 C++ usage

A custom scorer:

UCLASS(meta = (DisplayName = "Prefer Burning Targets"))
class UMyBurningScorer : public URSEAIScorer
{
	GENERATED_BODY()

protected:
	virtual float Score_Implementation(const FRSEAIContext& Context) const override
	{
		FRSEBattleUnit Target;
		if (!URSEAIBlueprintLibrary::GetUnit(Context, Context.TargetId, Target)) { return 0.f; }
		return URSEAIBlueprintLibrary::HasStatus(Context, Context.TargetId, MyTags::Status_Burning) ? 1.f : 0.f;
	}
};

Read the adaptive value from the game-instance subsystem:

if (URSEDifficultySubsystem* Difficulty = GetGameInstance()->GetSubsystem<URSEDifficultySubsystem>())
{
	const float Tactics = Difficulty->GetModeIntelligence(RSEGameplayTags::Battle_Mode_Tactics);
	UE_LOG(LogTemp, Log, TEXT("Tactics intelligence %.2f"), Tactics);
}

The state (FRSEDifficultyState) is SaveGame data: each mode's value and window, plus retries per encounter. It is part of the save (see Save and load). ResetToNewGame() puts everything back to Medium.

Extension points: subclasses of URSEAICondition, URSEAIScorer and URSEAIDecisionPolicy (C++ or Blueprint), the URSEFreeTacticsController for a fully custom Free Tactics decision-maker, and the interop below.

14.7 Advanced

14.7.1 Combat roles: what your props mean in battle

Battles run on your real map. A thick tree trunk should protect a unit behind it, a bush should not, a pebble should not matter and a pile of buckets should not end up in the middle of a fight. Combat roles tell the engine what each object means. You set them once per asset (a folder at a time if you like), and every placed copy follows. Nothing in your asset packs is modified: roles live in a registry asset in your project (/Game/Generated/DA_CombatRoles), listed in Project Settings → Combat Roles → Registries.

RoleIn battle
Full coverBlocks line of sight and projectiles; occupies its tiles
Half coverAttacks against a unit behind it hit less often; occupies its tiles
ObstacleCannot be crossed, protects nobody
Difficult terrainCan be crossed, costs more movement
Climbable / high groundUnits stand on it and get the height advantage
Destructible coverHalf cover that can be broken (Free Tactics gives it hit points)
ExplosiveHalf cover that explodes when broken
OverheadLooked through; the Free Tactics camera cuts it away
Neutral decorationDoes not matter; the grid looks through it
Avoid in combat areasSmall clutter that placement tools keep out of combat areas

Quick start:

  1. In the Content Browser, right click an asset-pack folder → RPG Saga: Suggest Combat Roles (Unassigned Only). Every mesh and Blueprint gets a suggestion from its shape and its name.
  2. Right click the folder → RPG Saga: Combat Roles... to review the list in the Combat Role Configurator. Check rows, pick a Role, Apply to Checked. Manual choices always win over suggestions.
  3. Press Bake Grid again on Tactics zones (roles are read at bake time).

One placed object can differ from its asset: add the RSE Combat Role component to the actor, or an actor tag named like the role tag (for example CombatRole.Neutral). Place an RSE Combat Area over spots where you want battles and press Check to count free tiles and list clutter. In Blueprint, the node group RPG Saga | Combat Roles has Get Component Role, Get Actor Role, Get Asset Role, Get Cover Info, Is In Combat Area and Can Place At. Roles are data: add your own in Project Settings → Combat Roles → Roles with a new CombatRole. gameplay tag.

14.7.2 Behavior Tree and StateTree interop

Already have enemies, companions or NPCs run by a Behavior Tree or a StateTree? Keep them. Nodes for both let your trees ask the utility AI what to do, carry the answer out, keep a distance, start a battle and test the plugin's conditions. Movement, animation and combat code stay yours. Behavior Tree nodes are built into the RSE module; StateTree nodes are in the RSEStateTree module (enable RPG Saga Engine - StateTree Bridge in Edit → Plugins).

What it doesBehavior TreeStateTree
Asks the utility AI what the pawn should dotask RSE: Pick Best Actiontask RSE: Pick Best Action
Carries an action outtask RSE: Execute Abilitytask RSE: Execute Ability
Walks to a distance from a targettask RSE: Move To Preferred Rangetask RSE: Move To Preferred Range
Starts a battle with the partytask RSE: Start Battle With Targettask RSE: Start Battle With Target
Runs an Interaction asset(your own task)task RSE: Run Interaction
Tests plugin conditionsdecorator RSE: Conditioncondition RSE: Condition, RSE: Flag Is
Is the pawn in a battle / its turndecorator RSE: In Battlecondition RSE: In Battle
Does a unit have a statusdecorator RSE: Has Statuscondition RSE: Has Status
Tracks target, threat, distanceservice RSE: Update Threat / Targetevaluator RSE: Update Threat / Target

For action battles there are nodes of their own, with the same names in both systems: RSE Action: Attack, RSE Action: Use Ability, RSE Action: React To Threat, RSE Action: Keep Preferred Range, RSE Action: Target In Reach (decorator or condition) and RSE Action: Incoming Telegraph (decorator or condition).

Behavior Tree setup. Make a Blackboard with the keys you want (Target Actor as Object of base class Actor; Kind as Name; Ability as Object of base class RSE Ability Data; Item as Object of base class RSE Consumable Data; Target Location as Vector; Door Index as Int; Score, Threat and Distance as Float; In Battle as Bool). In your tree, pick the keys in each node's Output and Input groups. Every key is optional. BT_RSE_ExampleEnemy with BB_RSE_ExampleEnemy is in the plugin's example content. Its branches, from the top: fight on its turn (RSE: In Battle with Require Own Turn → Pick Best Action → Execute Ability), hunt the party (Move To Preferred Range → Start Battle With Target) and wait. If it is missing, run RSE.AIInterop.CreateExampleBT in the editor.

StateTree setup. Use the StateTree AI Component schema or the StateTree Component schema. Bind Pick Best Action's Output properties (Kind, Ability, Item, Target Actor, Target Location, Door Index, Score) to the inputs of Execute Ability. ST_RSE_ExampleEnemy is the example; RSE.StateTree.CreateExample creates it if missing.

Who decides. The battle stays the judge: whatever a tree does in a battle is a command like any other, validated and applied by the battle (the same in every mode and in the simulator). In Free Tactics the enemy side is played by the battle's own AI controller, and trees read and act around it. In Grid Tactics and ATB a tree can play a whole side: give it to an AI controller with no pawn and call Claim Battle Side (library RSE AI Interop, with the controller and the side's team tag). Release Battle Side hands it back. In action battles each unit is either the framework's or your pawn's own brain.

Your pawn in an action battle. Implement the RSE Action Agent interface (Class Settings → Interfaces) on your pawn or a component:

FunctionWhat it does
Can Accept Action OrderThe pawn can take an order now
Order Move To (Location, Acceptance Radius)Walk or run there; return true when you took it
Order Use Ability (Ability, Target Actor, Target Location)Play the ability with your animation and code
Order StopCancel the order
Is Busy With OrderAn order is still being carried out
Get Action Battle ControlFramework (our action AI plays the unit, the default) or Own Brain (your tree plays it)
On Action Battle Joined / On Action Battle LeftOptional notifications

To drive a boss with your own Behavior Tree: make the boss a Character with an AI controller, add the interface and return Own Brain, start the Action encounter passing your pawn in Enemy Actors, copy BT_RSE_ExampleBoss from the example content and run it. It answers the telegraph (RSE Action: Incoming Telegraph → React To Threat), strikes when in reach (Target In Reach → Attack) and closes in (Keep Preferred Range with Use Ability Reach). Add your own phase decorator above Strike and put Use Ability with the boss's special move in it.

The action nodes act only on the machine that hosts the battle; on a guest they read and do nothing. Decisions happen when a node runs, never every frame, and use the battle's seed, so the same state gives the same decision.

Without a tree. The library RSE AI Interop offers Is Actor In Battle, Is Actors Turn, Actor Has Status, Pick Best Action For (returns a decision without doing anything: good for hints) and Execute Decision.

14.7.3 Debugging the AI

14.7.4 Performance notes

Decisions are sampled and capped: Max Move Candidates in AI settings, AI Candidate Positions in Free Tactics, a think interval in Action AI. Weights resolve once per decision, so curves cost nothing inside the scoring loop. Lower the caps for weak hardware.

14.8 Troubleshooting

SymptomCauseFix
Enemies always play perfectly or terriblyIntelligence pinned by the encounter's Min and Max, or by RSE.Difficulty.OverrideWiden the limits, set the override to -1
Changing the encounter's Intelligence does nothingAdaptive difficulty is on, and it ignores that fieldPin with Min and Max Intelligence, or turn Difficulty → Enabled off
The AI never gets harderFewer than Min Battles To Adjust battles, or the player sits inside the Dead ZonePlay more battles, or lower the dead zone; use RSE.Difficulty.Log 1
A custom style does not appear in the New Enemy wizardIt was not created with CreateRun Create in the AI Style wizard
Pick Best Action always failsThe pawn is not a unit of a running battle, or it is not its turnCheck with Is Actor In Battle and Is Actors Turn; put RSE: In Battle with Require Own Turn above it
Execute Ability fails in battleThe battle refused the command (not active, not enough AP or MP, target out of range)See the log category LogRSEAIInterop
Our AI and my tree both move the bossThe unit is not excluded from the framework AIReturn Own Brain from Get Action Battle Control before the battle starts
A Grid Tactics or ATB side does nothingThe controller has a pawn, or was not claimedUse a controller with no pawn and Claim Battle Side with the side's team tag
A tree gives no coverA combat role missing, or collision only on the canopyCheck the blocking volume in the Combat Role Configurator and set the role by hand
Roles did nothing on the gridThe grid was not baked againBake the Tactics zones again and check Bake Uses Combat Roles

14.9 See also

15. Story, dialog and quests

In short: One small language tells the whole story. Conditions ask a question ("does the party carry the key? is the flag set?") and effects change the world ("give an item, start a battle, recruit a character"). Dialogs, quests, puzzles, scenes and encounters all use them, and they all read and write one saved story state of flags and variables. Branching dialogs, quests with several endings, parallel scenarios and cinematics are data you assemble in editors, with no code.

15.1 Basics

15.1.1 The story state

The story state is one saved record of what has happened. Its keys are Gameplay Tags under five roots:

RootHoldsMissing value
Narrative.Flag.*true or falsefalse
Narrative.Var.*an integer (counters, choices, affinity)0
Narrative.Puzzle.*a puzzle solvednot solved
Narrative.Area.*an area, door or shortcut unlockedlocked
Narrative.Event.*a scene or optional event seennot seen

Examples: Narrative.Flag.Chapter1.MetMira, Narrative.Var.Chapter1.MiraTrust, Narrative.Puzzle.Mansion.ClockTower.

Keys are tags so that you pick them from a list (no typos), organize them by chapter, and rename them with a redirect without breaking data. Declare new keys in a tag file under the plugin's or your project's tags (Project Settings → GameplayTags). Validation rejects a key under the wrong root, for example a flag used as a variable. A new game starts from the values in Project Settings → RPG Saga Engine → Narrative (starting flags, variables and unlocked areas).

Never delete a tag that a save may contain: rename it with a redirect.

15.1.2 Conditions and effects

Conditions are questions. A condition set has a mode (All or Any) and a list of conditions. An empty set passes. The common ones:

ConditionTrue when
Has ItemThe shared inventory holds at least that many
Flag IsA flag has the wanted value
Variable CompareA variable compares true (==, !=, <, <=, >, >=; missing = 0)
Member In Party / Member Not KOA character is in the party (and standing)
Puzzle Solved / Area Unlocked / Event SeenThe matching state key is set
Instigator IsWho or what triggered this (the player, a certain actor)
Has MoneyThe party has that much money
Quest State / Quest Objective Complete / Ending IsA quest or ending condition
Time Of Day Is Between / Phase Of Day Is / Weather Is / Day Number / Season IsThe clock and weather
Place Discovered / Area VisitedTravel state
NPC Is At ActivityA living NPC is doing something
Has Card / Beat Card OpponentThe card game
Dialog Node Visited / Dialog Option Chosen / Dialog SeenDialog history (dialogs with history on)
All Of / Any Of / NotCombine other conditions
Custom (Blueprint)Your own class

A condition that lacks the state it needs (for example no party) does not pass.

Effects change the world. Every effect has an optional Only If gate (itself a condition set), so you can write small branches without a separate asset. The common ones:

GroupEffects
StateSet Flag, Modify Variable (Set or Add), Mark Puzzle Solved, Unlock Area, Mark Event Seen
Items and moneyGive Item, Take Item, Give Money, Take Money, Open Shop, Rest At Inn
PartyAdd Member, Remove Member (Permanent or Parallel Scenario), Restore Party, Set Level, Give Experience, Learn Ability, Forget Ability, Teach Ability, Award Growth Points, Open Teacher
Story flowStart Battle, Start Dialog, Play Scene, Start Quest, Set Quest Stage, Complete Quest Objective, Complete Quest, Fail Quest, Add Ending Score, Request Point Of No Return
WorldSet Time, Advance Time, Set Weather, Lock Weather, Set Clock, Set NPC Schedule, Discover Place, Travel To, Open World Map, Change Encounter Rate, Remove Encounter Rate, Alert Enemies, Report Crime, Set Data Layer State
PuzzlesOpen Code Lock, Use Item On Object, Apply Examine
PresentationPlay Music, Stop Music, Restore Music, Play Sound, Show Tutorial
RulesSet Rules Profile
CustomCustom (Blueprint)

An effect only broadcasts a real change: setting a flag to the value it already has sends no event.

15.1.3 An Interaction asset

URSEInteractionData (RSE Interaction Data) is the standard shape for examinable objects, doors, simple NPCs and puzzle pieces: Conditions → Effects on success, Failed Effects otherwise (for example "It is locked."), and with One Shot, Completed Effects after the first success ("The chest is empty."). The world actor only points at the asset. See Exploration.

15.1.4 Your first branching dialog

  1. In the Content Browser, right click a folder → RPG Saga → Dialog, fill the short form, press Create.
  2. Double-click the dialog to open the visual dialog editor.
  3. Right click the graph → Add Line, connect it from the green Dialog Start, and type the speaker and text.
  4. Add a Choice node: one output pin per option. Give each option text, and optional conditions and effects.
  5. Add an Effect node on one branch (for example Set Flag Narrative.Flag.Chapter1.MetMira).
  6. Press Play from Here in the toolbar. It starts the dialog in Play In Editor at the selected node.
  7. To start it in the world, place an RSE NPC and set its dialog (see Exploration), or use the Start Dialog effect from anywhere.

Dialog node types:

NodeDoesOutputs
LineA speaker says something (text, portrait, expression, media, voice)Next
ChoiceThe player picks from options (conditions, once-only, unavailable modes, hints)One per option
BranchTests conditionsOne per "If", then Else
EffectRuns an effect listNext
CueCamera, sequence, emote, expression, look-at, sound, screen effect, wait, or a generic cueNext
JumpGo to a node, or to another dialog (a call that returns)Go to, After return
EndEnds the dialognone

Text markup inside a line: <color=Danger>...</color> named colors (the look is in the UI style, never in the text), styles (emphasis, shout, whisper, shake, wave), {p=0.4} for a pause, {speed=0.5}...{/speed} for speed, and {cue=N} to fire the line's cue at that character.

Presentation is a tag on the dialog (Dialog Start → Presentation): Box (default), Cinematic (a title card and letterbox), Bark (a short line over a head, no choices) and Battle (in-battle banter, cannot start battles).

15.1.5 Your first quest

  1. Right click → RPG Saga → Quest. Double-click to open the visual quest editor.
  2. Select Quest Start to set the category (Main, Side, Card, Event, or your own Quest.Category.* tag), the description, the giver, and Available When.
  3. Add Stages (blue). Each has a journal entry and objectives. An objective completes when its Complete When conditions pass, when its Progress Variable reaches Required Progress, or explicitly (the Complete Quest Objective effect, usually from a dialog).
  4. Add Outcomes: green for success, red for failure, each with a final journal entry and effects (the rewards).
  5. Wire transitions: each stage output goes to another stage or to an outcome. With no transitions a stage continues to the next in the list, and after the last stage the quest ends with the default success outcome.
  6. Start it with the Start Quest effect, or tick Auto Start (optionally limited to certain maps).

15.2 How it works

Content (dialog, quest, interaction, scene, encounter) holds a condition set and an effect list
  -> URSENarrativeSubsystem (game instance) owns FRSENarrativeState and runs them
  -> conditions read a read-only FRSEConditionContext (story state + party + inventory + money + time)
  -> effects write through an FRSEEffectContext and raise events
  -> RSECore effects that need the world (battle, dialog, scene, screen) raise a request;
     the RSE presentation layer carries it out

Everything story-related lives in RSECore, which knows no actors, UI or input. The dialog UI, scene player, NPCs and triggers in RSE react to requests such as Start Dialog, Play Scene and Start Battle. This keeps the story testable without a world and makes it part of the save.

Quest states are Not Started, Active, Completed, Failed, Missed and Abandoned. Failed means the player failed inside the quest. Missed means the story moved on before the quest was finished: a failure rule marked Missed, or the point of no return (see below). Only Side quests can be abandoned (Can Abandon).

Endings. An Ending Set (URSEEndingSetData, linked from Project Settings → Quests → Ending Set) defines endings, key choices and a hidden score. The Add Ending Score effect raises the score from anywhere. Request Point Of No Return asks the player to confirm that the story cannot go back, and quests marked to fail there become Missed. Ending Is tests the result.

15.3 Key classes and assets

Class / assetModuleRole
FRSENarrativeStateRSECoreThe saved flags, variables, solved puzzles, unlocked areas, seen events and one-shot interactions
URSENarrativeSubsystemRSECoreGame-instance subsystem: owns the state, creates contexts, runs interactions, raises events
URSENarrativeSettingsRSECoreProject Settings → Narrative: the state of a new game
URSECondition, FRSEConditionSetRSECoreOne question, and a list of them (All or Any)
URSEWorldEffect, FRSEEffectListRSECoreOne change, and an ordered list of them
URSEInteractionDataRSECoreData asset: conditions, effects, failed effects, one-shot
URSEDialogDataRSECoreData asset: a dialog graph of instanced nodes (URSEDialogNode_Line, _Choice, _Branch, _Effect, _Cue, _Jump, _End)
URSESpeakerDataRSECoreData asset: a speaker (name, portraits, expressions)
URSEDialogSubsystem, URSEDialogRunnerRSECoreRuns a dialog; headless
URSEDialogSettingsRSECoreText speed, auto-advance, co-op choice rules
URSEQuestDataRSECoreData asset: stages, objectives, transitions, outcomes, failure rules
URSEQuestSubsystem, URSEQuestSettingsRSECoreQuest state and commands; Project Settings → Quests
URSEEndingSetDataRSECoreData asset: endings, key choices, score
URSESceneDataRSECoreData asset: a Sequencer scene with bindings, dialog sync, end effects, music
URSEOptionalSceneData, ARSEOptionalSceneTriggerRSECore, RSEAn optional scene and the actor that offers it
URSEScenePlayerSubsystemRSEPlays scenes: letterbox, skip, input lock, HUD hide, save block
ARSESceneTriggerRSEVolume that plays a scene when the player walks in
ARSENPC, URSESpeakerComponent, URSENPCTalkComponentRSENPCs and the component that registers a speaker for dialogs and scenes
URSECinematicLibraryRSEEditorEditor library behind Cinematic from Screenplay

15.4 Settings

WhereWhat
Project Settings → RPG Saga Engine → NarrativeThe starting flags, variables and unlocked areas of a new game
… → DialogCharacters per second (40 default), text speed steps, auto-advance times, fast-forward, co-op choice deciders and vote rules
… → Dialog UIPlayer speaker tags, portraits, boxes (see User interface)
… → QuestsEnding Set, load quests from the Asset Manager, auto-track started quests, evaluation passes
… → CinematicsOutput folder, timing, shots, camera, staging, animation of generated cutscenes
… → ScenesThe scene player's defaults (letterbox, blend out)

See Appendix B for the full list.

15.5 Blueprint usage

The story library URSEBlueprintLibrary_Narrative has static nodes that need no object reference.

15.5.1 Read and write the story state

Example, gating a door in a level Blueprint:

  1. Event (the player overlaps a trigger) → Is Flag Set (Flag = Narrative.Flag.Chapter1.MetMira).
  2. Branch: True → open the door. False → Start Dialog (Dialog = DA_Dlg_DoorLocked, Initiator = a speaker tag).

15.5.2 Run conditions and effects from a Blueprint

15.5.3 Dialogs and quests

15.5.4 Write a custom condition or effect

Create a Blueprint with the parent Custom (Blueprint) condition or effect. The library's Context... and Effect... nodes read and change the story from inside it: Context Is Flag Set, Context Get Variable, Context Get Item Count, Context Is Party Member, Context Get Level, Context Get Money, Effect Set Flag, Effect Modify Variable, Effect Give Item, Effect Take Item, Effect Add Money, Effect Add Member, Effect Remove Member, Effect Run Effects, Effect Request Battle.

See Appendix A for every node.

15.6 C++ usage

A custom condition and a custom effect:

UCLASS(meta = (DisplayName = "Moon Is Full"))
class UMyCondition_MoonIsFull : public URSECondition
{
	GENERATED_BODY()

public:
	virtual bool Evaluate(const FRSEConditionContext& Context) const override
	{
		return Context.Narrative && Context.Narrative->GetVariable(MyTags::Var_MoonPhase) == 4;
	}
};

UCLASS(meta = (DisplayName = "Ring The Bell"))
class UMyEffect_RingBell : public URSEWorldEffect
{
	GENERATED_BODY()

public:
	virtual void Execute(FRSEEffectContext& Context) const override
	{
		URSEBlueprintLibrary_Narrative::EffectSetFlag(Context, MyTags::Flag_BellRung, true);
	}
};

Both show up in the instanced picker of every condition set and effect list. They run headless, so unit-test them without a world.

Drive the story from code:

if (URSENarrativeSubsystem* Story = URSENarrativeSubsystem::GetNarrativeSubsystem(this)) // or GameInstance->GetSubsystem
{
	const bool bMet = Story->GetFlag(MyTags::Flag_MetMira);
	Story->RunInteraction(MyInteraction);
}

Extension points: subclasses of URSECondition and URSEWorldEffect; dialog node classes (your own node type appears in the editor's Add Node menu); URSEDialogCue for your own cue; URSEDialogControlPolicy for co-op rules of who may advance or choose.

15.7 Advanced

15.7.1 Parallel scenarios

The plugin has no special "scenario" class: a parallel scenario is a pattern of the primitives above, in the style of a classic multi-party story.

  1. A story beat splits the party. Run Remove Member with Departure = Parallel Scenario for each character leaving. Their equipment stays on them (a Permanent departure returns it to the inventory; guests always keep theirs).
  2. Run Add Member for the characters of the other group, and Set Flag Narrative.Flag.Act2.GroupB so the rest of the content can ask which group you are playing.
  3. Play the segment in its own level or area, with its own quests, dialogs and encounters gated by that flag.
  4. At the convergence, Add Member the first group back. A returning character keeps what it wore.

Because the story state is one record, a decision made in either segment (a flag, a variable, an ending score) is visible to the other.

15.7.2 Optional events

Optional scenes, where the player may watch what other characters are doing elsewhere, have their own pieces.

  1. Create an Optional Scene Data asset (URSEOptionalSceneData): a Display Name (the title shown to the player), an Event (a Narrative.Event.* tag that records it was seen), Conditions (when it is available), the Dialog that plays as the scene, Effects run when it is watched, and Missed When Skipped.
  2. Place an Optional Scene Trigger (ARSEOptionalSceneTrigger, an interactable actor with a large radius) in the level and set its Scene.
  3. While the player stands in range and the scene is available (conditions pass, the event is not yet seen), a discreet prompt offers it: "Optional scene: {Title}". Interacting watches it: the event is marked seen, the effects run and the dialog plays. Walking away ignores it: it stays available, or is missed for good when Missed When Skipped is on.
  4. Use the Event Seen condition to branch later content on whether the player saw it.

A scene can also be a full Sequencer scene (below) offered by an RSE Scene Trigger volume, or started from any effect list with Play Scene. A scene already seen is not queued again.

15.7.3 Scenes with Sequencer

A Scene Data (URSESceneData) plays a Level Sequence. Its parts:

While a scene plays: letterbox, skip with confirmation, input locked, HUD hidden, saving blocked, then the camera blends back. Scenes queue: one at a time. Start one with RSE.Scene.Play <scene>, Skip with RSE.Scene.Skip.

15.7.4 Cinematic from Screenplay

Making a conversation into a staged cutscene by hand takes hours. Cinematic from Screenplay turns a dialog (or a pasted screenplay) into a Level Sequence plus scene data in one step. It places the speakers, sets up cine cameras with a shot grammar, times every line and writes LS_Cine_<Dialog> and DA_Scene_Cine_<Dialog>. The result is a first pass you can polish in Sequencer.

  1. Open the level where the scene happens.
  2. Right click a Dialog → RPG Saga: Cinematic from Screenplay... (or RPG Saga Engine → Advanced tools).
  3. Leave Staging and Anchor on Auto, or select the NPC or marker the scene happens around.
  4. Press Dry Run and read the report (cast, shots, cameras, warnings). Nothing changes.
  5. Press Generate, then Open Sequence. Tick Place Scene Trigger (or use the Play Scene effect) and press Play.

The tool follows a shot grammar: an establishing wide, an over-the-shoulder shot for each line, close-ups for emotional lines, reaction shots, two-shots for quick back-and-forth and the 180 degree rule so screen directions never flip. Timing comes from the voice, or the text length divided by a reading speed. Speakers talk, gesture and turn toward each other using the character's animation set.

Stage directions go at the start of a line in a screenplay: [shot:close], [camera:over:Mira], [pause:1.5], [move:Mira:to:Door], [anim:Mira:AM_Bow]. They are stored on the line and never shown in game.

Running it again updates only what the tool made: it lives in a Sequencer folder named RSE Generated, and tracks you add on its bindings are kept. Command line and console:

UnrealEditor-Cmd <Project>.uproject -run=RSECinematic -Map=/Game/Maps/L_Town -Dialog=<path> [-DryRun] [-Report=<file>]

In the open editor, RSE.Cinematic.Generate Dialog=... does the same. Settings are in Project Settings → Cinematics.

15.7.5 Dialogs: the details

15.7.6 Quests: the details

15.7.7 Networking

The story state, dialogs, quests and scenes run on the host in co-op. Dialog advance and choice are commands that the host validates (FRSECmd_DialogAdvance, FRSECmd_DialogChoose and so on), so who may advance or choose is a rule, not a hack. See Co-op and online.

15.7.8 Performance notes

Conditions and effects are cheap synchronous reads and writes. Quest evaluation re-runs when story state changes, up to Max Evaluation Passes (64) per change so that cascading transitions settle. Dialogs and scenes load their soft references when they start.

15.8 Troubleshooting

SymptomCauseFix
A flag never changesThe effect has an Only If gate that fails, or the tag is under the wrong rootRun RSE.Narrative.Dump, check the gate and the root
A tag is "invalid" after a loadThe tag was deleted from the tag fileRestore it, or rename with a redirect
A dialog option is missingIts conditions fail, or its Unavailable Mode hides itCheck the option; use the Show disabled with hint mode if you want it greyed
A once-only option repeatsThe dialog does not Track HistoryTurn it on
A quest never advancesIts objective has no condition and no counter (explicit only), or no transition passesComplete it with the effect, or add a condition; check RSE.Quests.Dump
A quest says MissedA failure rule marked Missed passed, or the point of no return was passedCheck Fail When and Fails At Point Of No Return
A scene plays twiceIt has no Seen EventSet a Narrative.Event.* tag
Nothing happens on Play SceneThe scene has no Sequence, or the scene queue is busyCheck Scene Data validation and RSE.Scene.Dump
Generated camera looks through a wallThe tool does not avoid objectsMove the anchor, or edit the camera in Sequencer
A character stands still while speakingIts animation set has no Talk animationAdd one to the animation set
"The Dialogs content type is disabled"Pasted screenplays import through Content ImportEnable the Dialogs type in Project Settings → Content Import

15.9 See also

16. Exploration

In short: Exploration is everything the party does between battles: examining and talking, opening locks, solving puzzles, walking through zone exits, saving at save points, meeting enemies on the map (random or visible), reading the map and the clock, and sharing the world with NPCs who live their own day. All of it is placed as actors in your level and filled with data assets, and all of it reads and writes the same story state as dialogs and quests.

16.1 Basics

16.1.1 The pieces in one picture

You wantYou placeYou fill
An object the player examines, or an NPC who talksInteractable Actor, or RSE NPCAn Interaction asset, a Dialog, an Examine asset
A chest, campfire, signpost, shrine, herb patchRSE World InteractableAn Interactable Data asset (the kind)
A locked door or chest, a trapRSE Lockable, RSE TrapA Lock or Trap data asset
A door that opens when the story says soPuzzle DoorOpen Conditions
A passage to another levelZone ExitThe destination map and arrival point
A place to saveSave PointA Save Point Id
Battles on the mapRSE Encounter Spawner, RSE Random Encounter AreaEncounter pools and roaming behaviors
Help arriving mid-battleA Reinforcement data assetOn the spawner, encounter or pool
A map, minimap and compassRun Generate MapNothing
A sun, moon and weatherTime of Day & Weather actorA profile and a weather table
Villagers with a dayRSE NPC plus NPC Place actorsA Schedule asset or an NPC Style

16.1.2 Interactions and examining

Almost everything the player walks up to is an ARSEInteractableActor or a subclass. While the player stands in its range, a prompt appears ("Examine", "Talk", "Open") and pressing Interact runs, in order:

  1. a puzzle piece if the actor has one (item use, examine text, a code lock; see Puzzles below);
  2. its Interaction asset (conditions, then effects; failed effects otherwise);
  3. its Dialog, after a successful interaction or always (Dialog Only On Success).

The prompt is gated by Prompt Conditions, the same condition sets as everywhere else. Priority and Interaction Radius / Reach decide which of several close objects is focused. See Story, dialog and quests for the condition and effect language.

A first example, a note on a desk:

  1. Create an Examine Data asset (Content Browser → Miscellaneous → Data Asset → RSE Examine Data). Add responses: each has conditions and lines, and the first one whose conditions pass is shown. Add a Pickup item with a Taken Flag so it is given once, and the save remembers it.
  2. Place an Interactable Actor (Place Actors, search "Interactable") and set its Examine.
  3. Play. The lines appear in the narrator box. Examining again after taking the item shows the second response.

16.1.3 The interaction library

RSE World Interactable (ARSEWorldInteractable) is one actor that becomes a chest, campfire, torch, lantern, signpost, danger warning, examine spot, shrine, gathering node, viewpoint, obstacle or class action, depending on the Interactable Data asset (URSEInteractableData) you give it. The plugin's kinds are in /RPGSagaEngine/Data/Interactables (DA_Interactable_*). Place the actor, pick the kind, and the placeholder look appears. Turn Use Data Look off to keep a mesh you set on the actor.

KindWhat it does
ChestLoot rolled once, scaled by the danger of the place; may be locked
LightLit by hand, at night, or always; a campfire can rest the party and open the save screen
SignpostLists what lies each way and reveals those places on the world map
Danger warningSays what lies ahead and the recommended level, rated against your party
ExamineLines, a one-time find, story effects the first time
ShrineA lasting blessing, then a cooldown in game hours
Gather nodeGives items, then grows back
ViewpointReveals places on the world map and the fog around it
ObstacleCrossed with a ladder, rope or jump once the party can; some only once it learned something
Class actionsA thief picks a lock, a mage lights or burns, a warrior breaks or pushes
DestructibleBarrels, crates and pots with weighted outcomes (loot, a poison cloud, an explosion)
ReactiveReacts to abilities (fire lights a torch, frost freezes a pond)

Every kind also has Use Conditions, Effects (run after every successful use), an Icon, a Prompt, a Look (meshes per state) and Placement rules that Populate Interactions uses (see World building).

Requirements are one shared block: required class tags, member tags (a class's granted tags or a personal Trait.*), abilities, items, story conditions and a requirement text. The first party member who meets it does the action.

16.1.4 Puzzles, doors and locks

Puzzles are data built from the same primitives, plus a few generic pieces:

PieceWhat it does
Examine DataState-dependent text and a one-time pickup
Item Use DataWhich key items the object accepts, what they do, whether they are consumed
Code Lock DataDigits, symbols or clock hands; a solution, attempts, success, failure and lockout effects
Item Recipe DataA + B makes C; listed in Project Settings → Puzzles → Recipes. The player may freely try any two key items
Puzzle DoorOpen while its Open Conditions pass (for example Area Unlocked), animated, saved through the story state
Lock Data + RSE LockableA door or chest with a key, a lockpicking minigame or auto resolve
Trap Data + RSE TrapHidden traps the party can spot, disarm or set off

A clock-tower puzzle, step by step:

  1. Place an Interactable Actor over the clock face. Set Examine (the description), Item Use (accepts the Minute Hand key item, sets a flag) and Code Lock (a Clock Hands lock with the solution 7:15).
  2. The player examines it, is asked "Use the Minute Hand?", then the lock screen opens.
  3. The lock's Success Effects run Unlock Area Narrative.Area.Mansion.Vault.
  4. A Puzzle Door with Open Conditions = Area Unlocked Narrative.Area.Mansion.Vault opens by itself.

Combining items is also in the party menu (Key Items → item → Combine → second item). Locks, traps, stealing, dialog battles, distractions and fallen members are the Exploration RPG layer:

16.1.5 Travel between zones and the world map

Place an Zone Exit (ARSEZoneExit) at the edge of a level. Set Destination Map, the Destination Arrival Point (a named player-start-like point in the other level), optional Exit Conditions and Requires Confirmation. An Area Volume names an area for the map and for danger rating. Travel Destination data assets describe fast-travel places for the world map screen. The travel subsystem blocks fast travel in battles, cutscenes and no-travel zones and says why.

16.1.6 Save points

Place an Save Point (ARSESavePoint) and give it a Save Point Id. Interacting opens the save screen. A campfire kind of the interaction library can also be a save point. Other rules (the consumable save item, no-save zones) are in Save and load.

16.1.7 Enemies on the map

Two classic styles, both without code:

Random battles while walking:

  1. Create an Encounter Pool (URSEEncounterPoolData): entries (character, weight, max per group, level mode), group size, optional elite groups.
  2. Place an RSE Random Encounter Area (ARSERandomEncounterArea), scale its box over the ground, tick Enabled and add an entry with Kind = Generated and your pool. A table can mix Predefined and Generated entries.
  3. The map needs a classic battle director for ATB encounters (an RSE ATB Battle Director with its ATB Stage).

Visible enemies that patrol, flee or chase:

  1. Place an RSE Encounter Spawner (ARSEEncounterSpawner). Set Pool (or a predefined encounter) and a Behavior (URSERoamingBehaviorData, DA_Roam_*).
  2. Behaviors are Passive, Cautious (flees) or Aggressive (notices in a sight cone or by hearing, shows "!", chases, gives up).
  3. For Free Tactics battles tick Free Tactics on the spawner (see Free Tactics (Live)).

Touching a group starts its battle. From behind while unnoticed is a preemptive strike; being touched from behind by a chaser is a back attack. Respawn policy, patrol points, follower counts, activation radius and grace times are on the spawner and in Project Settings → Encounters.

Repel and Lure: create an ability with the Encounter Rate effect (Multiplier 0 = none, 2 = double; duration in steps or seconds) and a consumable that uses it. Equipment traits and the player's Battle frequency option multiply the rate too.

16.1.8 Time of day and weather

Place a Time of Day & Weather actor (ARSETimeOfDayActor) anywhere. It drives the sun, moon, sky, fog, clouds and colors. By default one real hour is one game day. Preview any hour in the editor from the actor's Preview section. Looks live in Time of Day Profile assets (Bright stylized, Moody, Realistic ship with the plugin). Weather is six types (Clear, Cloudy, Rain, Storm, Fog, Snow) chosen by a Weather Table; give a level or a Weather Volume its own table. A Night Light component turns lamps on at dusk.

The clock changes gameplay: roaming enemies see, hear and chase differently by phase and weather, encounter pools can change at night, and battle modifiers can weaken fire in rain. See Settings below.

16.1.9 Living NPCs

Every RSE NPC has a Living NPC component (URSENPCBehaviorComponent). Without a schedule it stands where you put it. To give an NPC a day:

  1. Place NPC Place actors (ARSENPCPlace): a Spot (where it stands), an Area (where it wanders), or a Route (waypoints with pauses). Give each a Place Id.
  2. Create a Schedule (URSENPCScheduleData): entries with a When (hours, phases, weathers, conditions) and a Do (activity tag, movement Stay, Wander, Route or Away, a place, speed, dialog while in this activity). The first entry that holds wins; the Default applies otherwise.
  3. Set the NPC's Schedule, then test with RSE.Time.Set 19.9.

Faster: the plugin ships sixteen NPC Styles (URSENPCStyleData: shopkeeper, farmer, guard patrol, night watch, child, priest and more) that bundle a day, reactions, bark lines and names. Populate NPCs (in the world tools) applies one.

16.1.10 Maps, minimap and compass

Open your level, save it, and run Generate Map (Studio → World → Generate the map). It draws a printed-looking map from above, writes T_Map_<Level> and DA_Map_<Level>, and the level finds its map by itself. In play you get a minimap, a compass bar and a full area map (M or View). Markers (save points, exits, shops, recruits, quest givers, enemies) appear by themselves, and quest objectives with a Map Target show on all three. Players drop typed pins from a pin wheel. Fog of war and a zone-difficulty tint are optional.

16.2 How it works

Placed actor (Interactable Actor, NPC, Lockable, Trap, Zone Exit, Save Point, Spawner ...)
  -> player Interact (command through the command bus; the host applies it in co-op)
  -> URSENarrativeSubsystem: conditions -> effects; effects that need the world raise requests
  -> RSE presentation: dialog UI, battle start, scene, lock screen, travel, save screen

The rules and data of each system live in RSECore (pools, schedules, locks, traps, the clock, map data, puzzles). Actors, overlays, widgets and cameras live in RSE. Exploration state (spotted, disarmed, opened, lit, gathered, defeated groups, world steps, the clock, the weather, pins, fog) is saved with the game.

Hand-off to battle. A visible group, a trigger, a dialog effect or a random area asks the exploration subsystem to start a battle. Free Tactics fights where you stand with no transition; ATB and grid Tactics use their directors and stages. After the battle the party is back where it was.

Stealth. Enemies have a vision cone and hearing. A detection meter fills while the party is seen or heard (faster near, slower far, slower while sneaking, hidden by tall grass or shadow) and the ! appears when it is full. Surprise decides the opening (see Free Tactics (Live)). Stealth settings are in Project Settings → Stealth.

16.3 Key classes and assets

Class / assetModuleRole
ARSEInteractableActorRSEBase of everything the player interacts with
URSEInteractableComponentRSELets any actor take part in the interaction system
URSEInteractionDataRSECoreConditions and effects of an interaction
ARSENPC, URSENPCBehaviorComponentRSENPCs and the Living NPC component
ARSEWorldInteractable, URSEInteractableData, URSEInteractableBehaviorRSE, RSECoreThe interaction library: actor, kind and behavior base
URSEExamineData, URSEItemUseData, URSECodeLockData, URSEItemRecipeDataRSECorePuzzle data
ARSEPuzzleDoor, ARSEOptionalSceneTriggerRSEA door that follows the story; an optional scene offer
ARSELockableActor, URSELockDataRSE, RSECoreLockable door or chest and its lock
ARSETrapActor, URSETrapDataRSE, RSECoreA trap and its data
URSEExploreRPGSubsystemRSESkills, searching, distractions, fallen members, revive
ARSEZoneExit, URSETravelSubsystem, URSETravelDestinationDataRSE, RSECoreZone exits, fast travel, the world map
ARSESavePoint, ARSEAreaVolumeRSEA save point; a named area
ARSEEncounterSpawner, ARSERandomEncounterArea, URSEEncounterSubsystemRSEVisible enemies, random battles, rate and frequency
URSEEncounterPoolData, URSERoamingBehaviorDataRSECorePools and roaming behaviors
URSEReinforcementData, URSEBattleScriptRunnerRSECoreReinforcements and scripted battle events
ARSEReinforcementSpawnPointRSEWhere help may come from (Free Tactics)
URSEMapData, URSEMapStyle, URSEMapSubsystemRSECoreMap data, look and runtime state
ARSEMapBoundsVolume, ARSEMapRegionVolume, URSEMapMarkerComponentRSEMap bounds, region names, markers
ARSETimeOfDayActor, URSETimeOfDayProfileRSESky and lighting
URSETimeSubsystem, URSEWeatherTableDataRSECoreClock, weather and their tables
ARSEWeatherVolume, URSENightLightComponentRSELocal weather rules; lamps at night
URSENPCScheduleData, ARSENPCPlace, URSENPCStyleData, URSENPCReactionDataRSECore, RSENPC days, places, styles and reactions
URSENPCActivityBehaviorRSECoreScriptable activity (Blueprintable)
URSEWorldReactionSubsystemRSEAbilities changing the world

16.4 Settings

Project Settings → RPG Saga Engine, groups used by exploration (full lists in Appendix B):

GroupWhat it holds
InteractablesCompass points, danger ratings, default verbs, which kinds Populate Interactions places
Living WorldHighlights, hints and sparkles over usable objects, default interact animations
World ReactionsThe rule table: which ability on which object gives which result
Puzzles, Puzzle UIDefault texts, recipes, lock and door looks
Exploration RPG, Exploration RPG (Presentation)Skills, traps, locks, stealing, distractions, fallen members, texts
Encounters, Encounters (World)Default teams, rate effects and traits, frequency levels, contact, grace times, visible enemy look
Reinforcements, Reinforcements (Presentation)Call rules, interrupting statuses, spawn point rules, banners, runners
StealthDetection speeds, sneaking, hearing, concealment tags
Map Generator, Map & MinimapPicture generation, categories, minimap, compass, pins, fog, quests
Time of Day, Time of Day Visuals, Weather Visuals, Time & Weather RulesDay length, start, phases, seasons, the sky, enemy and battle effects
Living NPCsReactions, crimes, defaults for NPC movement
TravelFast travel rules and the world map

Time defaults: one real hour is one game day (Day Length Minutes 60), the game starts at 08:00 on day 1, Dawn / Day / Dusk / Night phases, and the clock pauses in battles, dialogs, cutscenes and menus.

16.5 Blueprint usage

Run a story effect from a trigger. Event (Box Trigger overlap) → Is Flag Set (the story library from Story, dialog and quests) → Branch → Start Dialog or Run Interaction.

React to an interaction. On an Interactable Actor (or a subclass), bind On Interacted (Interactable, Interacting Pawn, Succeeded). Or override On Interact in a Blueprint subclass: such a Blueprint is interactable even without any data (a lever, a switch). Override Can Interact (Custom) for an extra availability rule. Other nodes: Interact, Request Interact, Set Interaction Enabled, Get Prompt Text, Can Interact Now.

Read and change the clock. Get Game Instance Subsystem (class RSE Time Subsystem), then Get Hour, Get Day, Get Phase, Is Phase, Get Weather, Is Weather, Get Time Text, Set Time, Advance Time, Set Weather, Lock Weather, Set Time Scale. Events: On Hour Changed, On Phase Changed, On Day Changed, On Time Skipped, On Weather Changed.

Encounters. On the Encounter Subsystem: Get Encounter Rate Multiplier, Add Rate Effect / Remove Rate Effect, Get Frequency Index / Set Frequency Index, Get World Steps, Compose Encounter (a fresh group from a pool), Start Classic Encounter (an encounter with an initiative). On a spawner: Set Spawner Enabled, Get Group Count, Is Group Defeated, Respawn All, Force Contact.

Travel. On the travel subsystem: Travel To Destination, Is Traveling, Get Current Area, Get Destinations, Get Fast Travel Block.

NPCs. On a Living NPC component: Get NPC Id, Get Current Activity, Is Available, Refresh Schedule, Begin Talk / End Talk, Notify Danger, Report Crime, Try Start Chat. On the NPC world subsystem: Raise Danger, Clear Raised Danger, Report Crime.

Scripted activities. Create a Blueprint with parent NPC Activity Behavior and override Begin, Tick, End, Can Interrupt; pick the class in the schedule entry's Do → Behavior. Built-ins: Use Spot, Wander, Chat, Work At Station.

See Appendix A for every node.

16.6 C++ usage

A custom interactable that reuses the whole interaction pipeline:

UCLASS()
class AMyLever : public ARSEInteractableActor
{
	GENERATED_BODY()

public:
	virtual bool Interact(APawn* InteractingPawn) override
	{
		const bool bOk = Super::Interact(InteractingPawn); // runs Interaction, Dialog, puzzle pieces
		if (bOk) { Toggle(); }
		return bOk;
	}

private:
	void Toggle();
};

A new interaction-library behavior (appears in the Behavior picker of every kind):

UCLASS(meta = (DisplayName = "Ring Bell"))
class UMyBellBehavior : public URSEInteractableBehavior
{
	GENERATED_BODY()
	// Override the prompt, availability, use and visual of the behavior, as the shipped ones do.
};

Read the clock from code:

if (URSETimeSubsystem* Time = GetGameInstance()->GetSubsystem<URSETimeSubsystem>())
{
	if (Time->IsPhase(MyTags::Phase_Night)) { /* spawn the owl */ }
	Time->AdvanceTime(8.f); // a night's rest
}

Extension points: subclasses of ARSEInteractableActor, URSEInteractableBehavior (a new kind of behavior), URSENPCActivityBehavior, URSEBattleScriptEffect (a scripted battle effect), and implementing IRSEMapMarkerSource (Should Show Map Marker) or IRSEWorldReactive on your own actors to join the map or the world reactions.

16.7 Advanced

16.7.1 Reinforcements and scripted battle events

A lone sentry shouts "To me!", three friends run out of the trees and join at the next round. Kill him first and nobody comes.

  1. Create a Reinforcement Data asset (URSEReinforcementData). Set Caller (Leader or Any Member), Call Turns (1 = the call completes at the caller's next turn), Call Bark, and Cancel If Caller Interrupted.
  2. Add a Wave: a trigger (When Alerted, Battle Start, Round Reached, HP Below, Unit Defeated, Reinforcements Arrived, Objective Changed, Condition, After Previous Wave, Manual), the units (or a pool), delays and the min and max distance they appear at.
  3. Put it on the spawner's Reinforcements, on its encounter, its pool or its roaming behavior.
  4. Try it with RSE.Reinforcements.Setup, then RSE.FreeTactics.Start. RSE.Reinforcements.Status lists calls and runners.

In Free Tactics the battle picks hidden points between the minimum and maximum distance: out of the camera's view and out of every party member's line of sight, on standable ground with a path to the fight, and inside the battle area. Place RSE Reinforcement Spawn Point actors where help should come from (the end of a road, a cave): Spawn Points decides whether they are Fallback, Prefer or Only. Runners show on the minimap and compass, and join at the start of the next round. Leftover decides what happens if the battle ends first: they vanish, or become a visible roaming group.

Other modes: in grid Tactics the units enter at the edge tiles nearest the caller; in ATB and turn-based they step into the formation. The bark, banner and sounds work everywhere.

Scripted battle events are an ordered list on an encounter (Battle Events): a trigger, a speaker, a line or a dialog, a camera (Reframe, Cinematic, None), Talk Only or Act Now, and effects (Call Reinforcements, Change AI Profile, Apply Status, Spawn Surface, Change Objective, Play Cue, or your own URSEBattleScriptEffect). For example a boss at half HP shouts, calls his sellswords, gains a status and acts at once. From Blueprint, the director's Get Script Runner returns a URSEBattleScriptRunner with Start Reinforcements, Fire Event, Get Calls, Get Incoming Count, Is Calling and the events On Call Started, On Wave Called, On Wave Arrived, On Script Event.

16.7.2 Dialog battles and who strikes first

The Start Battle effect has an Opening (From Context, Normal, Party First, Speaker First), Scene NPCs Fight (the NPC who speaks and combatant NPCs nearby fight where they stand in Free Tactics), a Faction, Combatants and an Encounter. From Context means a dialog choice lets the party strike first and a speaker's line lets the speaker's side strike first. Make an NPC a combatant in its NPC | Combat category.

16.7.3 Reactions and crimes for living NPCs

When a battle starts nearby, living NPCs react instead of freezing, then return to their day: an NPC Reaction asset (URSENPCReactionData) chooses Flee, Watch, Cower, Help or Ignore, with trigger distance and delays. Guards answer crimes (NPC.Crime.* tags: Theft, Trespass, Assault, or your own) they see or hear by warning, chasing and running effects (a fine, a battle). Crimes come from pickpocketing, attacking an NPC, and the Report Crime effect.

16.7.4 Abilities on the world

One rule table in Project Settings → World Reactions → Rules lets a fire spell light torches, ice put out lights and freeze a pond, and wind clear fog. Mark an ability Usable On World and give objects Reactive Tags. Use URSEWorldReactionSubsystem (Apply Ability At, Cast On World, Would React) from Blueprint.

16.7.5 Maps in depth

16.7.6 Time and weather in depth

16.7.7 Multiplayer notes

An interaction is a command: in co-op the host applies it for the player who pressed the key, and lines and notifications show for that player. NPC decisions, reactions and chases run on the host; movement replicates as usual. See Co-op and online.

16.7.8 Performance notes

Groups of visible enemies sleep beyond their Activation Radius and think a few times a second. NPCs update on schedule changes and on a timer, not every frame. Interactables have no Tick. Night lights cap the number of real lights near the camera.

16.8 Troubleshooting

SymptomCauseFix
No prompt on an objectPrompt Conditions fail, the object is spent, or it is disabledCheck the conditions; Set Interaction Enabled; for World Interactables check the kind's Use Conditions
An examine pickup repeatsThe Taken Flag is missingSet it; it is required and saved
A door never opensIts Open Conditions read the wrong tagCheck the Area or flag the unlock effect writes
No random battlesThe area is not Enabled, its box misses the ground, no ATB director on the map, or a Repel or x0 trait is activeRSE.Encounter.Status shows the rate
A visible enemy is a grey placeholderIts character has no AppearanceSet one, or the spawner's Appearance Override
Enemies walk into wallsNo navigation meshAdd a Nav Mesh Bounds Volume
Aggressive enemies never notice the partyA Repel is active with Rate Scales Enemy Detection, or sight is too shortRSE.Encounter.Debug 1 draws the cones
Battles start again right after one endsGrace time too shortRaise Post Battle Grace Seconds
A lantern does not light at nightIts schedule is not Night, or the level has no Time of Day actorSet it, and place the actor
NPC stays at one spotNo schedule, or its places do not existSet a schedule; place NPC Places with matching ids
An NPC does not return after a battleReactions are off or its activity cannot be interruptedCheck Reactions → React To Battles
"Save the level first" on Generate MapThe level was never savedSave it
A forest shows as buildings on the mapName rules guessed wrongTag the meshes MapForest / MapBuilding
No minimap in playNo DA_Map_<Level>, or the player turned it offRun Generate Map
The reinforcements never arriveThe call was interrupted, or the battle ended firstRSE.Reinforcements.Status; see Leftover

16.9 See also

17. World building

In short: a handful of editor tools turn an empty stretch of your map into playable content: a battle site, a populated zone, buildings you can walk into, interiors built from your own asset packs. Test rooms prove the framework works, and the World Partition support keeps saves, locks and battles correct in big streamed worlds. Use this chapter when you stop testing in a grey box and start building your real maps.

17.1 Basics

17.1.1 The tools at a glance

You wantUseWhere
A place where a battle happens on the live mapMake Battle Zone HereStudio: World → New battle zone
Random encounters, enemies, chests, a save point and a trader for an areaPopulate ZoneStudio: World → Populate a zone
Signposts, warnings, fires, lanterns, notes along roadsPopulate InteractionsModes → RPG Saga: World Tools
People who live in an area, caravan routes, barrels and crates, ladders and ledgesThe living world toolsModes → RPG Saga: World Tools
Buildings the party can enterBuilding Analyzer, RSE Building EntranceWorld Tools, or by hand
Interiors built from a pack's own walls and furnitureInteriors from Asset Packs wizardRPG Saga Engine → World → Interiors from Asset Packs
Small proof maps with a smoke testTest RoomsRPG Saga Engine → Advanced tools → World → Test Rooms

All the placement tools work the same way: choose an area, press Preview (nothing changes, markers and a report show what would happen), then press Apply. Apply is one undo step, and running a tool again on the same place or with the same group name replaces its earlier result instead of doubling it.

17.1.2 Your first battle site

  1. Open your level and point the viewport at the ground where the battle should be.
  2. Open the tool: in the Studio, World → New battle zone; or right-click the viewport and choose RPG Saga → Make Battle Zone Here; or Modes → RPG Saga: World Tools for the panel with every option.
  3. Set the area. Drag a rectangle on the ground (left-drag while the mode is open), or click a point and pick a Size Preset (Small 8 × 8, Medium 12 × 12, Large 16 × 16, Wide 20 × 12 tiles). Use Camera Focus and Use Selection Bounds are the other two ways.
  4. Pick an encounter, or a progression zone to generate an enemy group from its encounter pools.
  5. Press Preview. Green tiles are walkable, dark ones blocked, blue ones are deployment tiles, red markers are enemies (the arrow is their facing), orange marks the classic stage. Problems get a pink cross.
  6. Press Apply. Press Ctrl+Z if you do not like it.

You get, in the Outliner folder BattleSites/<Site>: a baked Tactics zone, its battle director (waiting for its trigger), the encounter layout (deployment tiles and enemies written into the encounter), an optional trigger over the deployment tiles, and an optional classic battle stage on flat, clear ground nearby. Give the site a name: running the tool again with the same name updates it.

17.1.3 Your first populated zone

  1. Open World → Populate a zone.
  2. Pick a progression zone, the area, optionally a Populate Rules asset (Content Browser → Add → Miscellaneous → Data Asset) and a shop for the trader.
  3. Preview shows one labeled marker per placement and its distance from the Player Start.
  4. Apply places them in the folder Populate_<Zone>. Press Re-roll and Apply again until you like the layout: each Apply first removes what the previous run of the same zone placed.

17.1.4 Your first building you can enter

  1. Open Modes → RPG Saga: World Tools → Building Analyzer and press Preview. Every building is outlined in the color of its proposed mode with its door and the reason.
  2. Correct any proposal in Mode Overrides or Template Overrides, then Apply.
  3. Open the new interior asset's template map, replace the placeholder props (tagged RSE.InteriorPlaceholder) with your own, and put your NPCs on the RSE Interior Slot markers.
  4. Play and walk to the door.

17.2 How it works

17.2.1 Battle sites and the grid on the live map

A battle zone is an ARSETacticsZone placed on your level as it is. Bake Grid traces the real ground under every tile (exact height and slope, besides the whole-step height the rules use). Units, the turn marker and every highlight stand on the measured surface. The tool previews with the same trace as Bake Grid, so what you see is what you get. Anything a character cannot stand on is skipped: surfaces that do not block pawns (grass), pawns, objects narrower than Bake Min Surface Size, and anything tagged RSE.GridIgnore.

Grid Visual Mode (Project Settings → RPG Saga Engine → Tactics Zone, overridable per zone):

Several battle sites can share a map: the player's controller switches to the site whose battle starts. When a battle starts, a unit standing off the grid or on a blocked or taken tile moves to the nearest free walkable tile, with a log warning.

17.2.2 Populate rules

Populate Zone places these kinds: random encounter areas, enemy spawners with patrol points, chests (money and loot by level, higher the farther from the Player Start, each with its own Opened flag), a save point near the Player Start, a trader NPC, and optional signposts and zone exits. The Populate Rules asset sets, per kind, a count (plus more per 100 m² up to a maximum), a minimum spacing, and a band of path distance from the Player Start. Kinds keep a distance from each other and from what is already in the level, stay away from Tactics zones and classic stages, and obey a total density cap.

Placement follows the navmesh when the level has one, so every placement is reachable. Without one, Apply adds a Nav Mesh Bounds Volume over the area and builds it. The seed decides everything: the same seed gives the same layout.

17.2.3 Populate Interactions and the living world tools

Populate Interactions places the interaction library: signposts at crossroads (their arms named after the point of interest down each road), danger warnings where a road enters a dangerous zone, chests, fires, lanterns and notes beside roads, and gathering nodes, remains and shrines in the wilds. Roads are RSE Road spline actors (any actor tagged RSE.Road also counts). Without roads, the navmesh paths between points of interest are used. Each interactable kind has a Placement block that says where it may go, its weight, spacing and density.

The living world tools are four more entries of the Tool list in the World Tools mode:

17.2.4 Buildings

Every building is entered in one of three ways, set on one actor placed at its door, RSE Building Entrance (ARSEBuildingEntrance):

The entrance finds its real door in order: a door actor next to the building, a socket of the building's mesh named with a door word ("Door", "Entrance_Front"), a door-shaped opening found by probing the facade with rays, and last the Assumed Door Side. Detect Door (button on the entrance) runs the same search. To place an entrance yourself, move and turn it so its arrow points out of the building, set Door Width and Door Height, and tick Keep Placement: the analyzer then leaves it alone. Place Exit Point puts the exit on walkable ground in front of the door, on the navmesh when there is one.

An Interior Data asset (URSEInteriorData) describes where the door leads: the map, the template, the entry point (an RSE Arrival Point id such as Entry, or an actor tag), the blackout time, Closed Phases (for example night), a Key item, story Conditions, and the texts shown when closed or locked. The ready templates (DA_InteriorTemplate_Inn, _House, _Shop, _Smithy, _Temple, _Cellar, plus Tower, Manor and Workshop) live in /RPGSagaEngine/Interiors/Templates.

Interior Rules (on the template, overridable per interior, else Buildings → Default Rules) decide how a visit behaves:

RuleDefaultMeaning
Party InsideLeader OnlyCompanions wait hidden at the door and rejoin at the exit. Whole Party takes everyone.
Allow BattlesoffEncounters are refused while inside.
SealonA black shell around the room: nothing of the world shows.
Hide World LightingonSun, sky light, fog and clouds are hidden for the visit.
Interior SunlightoffDirectional lights left in the interior map stay off.
Fixed Exposure / Exposure EV100off / 8A fixed exposure instead of eye adaptation.

While the screen is black the exposure is set at once, so the eye never fades slowly from a sunny street into a lit room.

17.2.5 Generated interiors

Set Interior Data → Generation → Enabled and the interior is built under the blackout by one RSE Generated Interior actor in the generated-interior map (Buildings → Generated Interior Map). Inputs:

FieldMeaning
ProgramWhich rooms on which floor (an inn: common room and kitchen downstairs, bedrooms upstairs, a cellar)
ThemeThe personality: Common, Craftsman, Hunter, Witch, Merchant, Noble, Innkeeper, Scholar
Footprint, Floors, CellarThe size and the number of floors (the analyzer measures the building)
Door OffsetWhere the door is along the facade, so the doorway matches the outside
SeedAnother layout and dressing for each seed (the analyzer derives it from the building's name)

A floor is a hub (hall, common room, landing) with rooms around it, joined by stairs that hug a wall. Floors above the one you stand on are hidden (cutaway). Programs, themes and furniture are data assets under /RPGSagaEngine/Data/Interiors. Preview Interior on the actor builds any interior in the editor.

Each Furniture asset (URSEFurnitureData) names its tags, its mesh, its Front (the mesh axis it faces) and a placement rule: Against Wall, Corner, Center, Around Anchor, On Anchor, Wall Mounted, Ceiling or Free. The generator keeps doorways, stairs and each piece's front clearance free and checks that everything stays reachable. Check Furniture on the actor flags pieces facing the wrong way, off their wall, overlapping, blocking a door or unreachable.

Furniture with an interactable becomes a world interactable: fireplaces and lanterns, wardrobes, chests, beds (rest), books and letters (read, backed by lore entries), workstations (shop counter, anvil, altar) and hidden stashes. Program roles (innkeeper, cook) become NPC Places named <Interior>.<Role>, and the interior's Inhabitants put your story NPCs there.

17.2.6 Interior kits: your own packs

The Interior Kit Wizard points the plugin at the folders of a modular environment pack and builds interiors out of that pack's own pieces. You keep your packs where they are: nothing is copied, renamed or moved, and the plugin never ships them.

  1. Sources: add the pack's folders and choose the language packs for the words read in names.
  2. Scan: every mesh is measured (size, pivot, door and window holes found with rays) and classified. Results are cached, so a second scan of an unchanged pack takes seconds.
  3. Kits: one card per kit shows the module (wall width), floor tile, wall height and thickness. Orange numbers mean pieces disagree: type the right value. Merge into, Split by Folder, Split Off Selected and Exclude Kit fix a wrong grouping.
  4. Review: a table of every mesh with its kind, confidence, front, placement, interaction and kit. The Why panel explains each decision. Bulk edit with Set Kind, Set Front, Rotate Front 90, Set Placement, Set Interaction, Set Kit, Ignore, Accept. Your corrections are remembered and survive a new scan. The wizard prefers asking to guessing: low-confidence rows and unsure fronts are marked needs review.
  5. Preview: a sample two-storey house built from the kit's real pieces. Click a wrong piece to fix it right there.
  6. Create: writes DA_InteriorKit_<Kit>, DA_Furniture_<Kit>_<Mesh> and DA_InteriorTheme_<Kit> (with substitutions by kind). Dry Run reports without writing. Create is idempotent and keeps your hand edits unless Overwrite Manual Edits is on.

With a kit, the layout snaps to the kit's grid and the interior is built from the pieces: plain, door, window and corner walls, floor and ceiling tiles, door frames and leaves, stairs, railings, trims. A piece the kit lacks, or one that would have to stretch more than the allowed limit, becomes a box in the kit's material with a note in the log: an interior is never broken. Stairs and railings may stretch more than walls (Kind Stretch). Single-sided interior walls show their finished face to the larger room.

17.3 Key classes and assets

Class / assetModuleRole
URSEBattleSiteLibraryRSEEditorPlan, apply and check battle sites
URSEPopulateLibraryRSEEditorPlan and apply Populate Zone
URSEPopulateRulesRSEEditorCounts, spacing and bands for Populate Zone
URSEWorldToolsSettingsRSEEditorProject Settings → World Tools
URSEInteractionPlacementLibraryRSEEditorPopulate Interactions
URSELivingWorldToolsLibraryRSEEditorPopulate NPCs, caravan routes, destructibles, traversal analysis
URSEWorldBuildLibraryRSEEditorEditor Python helpers: landscape from raw files, layer infos, instanced scatter
URSEBuildingAnalyzerLibraryRSEEditorThe Building Analyzer
ARSEBuildingEntranceRSEThe door actor: mode, interior, exit point
ARSEDoor, ARSEInteriorVolume, ARSEInteriorExit, ARSEInteriorSlotRSEReal door, camera volume, way out, slot marker
ARSEGeneratedInteriorRSEBuilds and previews generated interiors
URSEInteriorData, URSEInteriorTemplateDataRSECoreWhat a door leads to, and the room templates
URSEInteriorKitData, URSEFurnitureDataRSECoreA pack's pieces on a grid, and one furniture piece
URSEKitLibraryFunctions, URSELegacyKitConverterRSEEditorWizard calls and the converter for older theme meshes
URSEInteriorToolsLibraryRSEEditorInterior map checks
URSEWorldStreamingSubsystemRSEWorld Partition streaming, battle cells, data layers
URSETestRoomDefinitionRSECoreOne test room and its smoke script
URSEBattleLauncherSubsystemRSEThe in-game battle launcher

17.4 Settings

All in Project Settings → RPG Saga Engine. The full list is in Appendix B.

17.5 World Partition

The framework works on World Partition maps. Saves, quests, locks, chests, doors, NPC places and battles survive a cell unloading and loading again, because state lives in the framework's world-state subsystem under a State Key, not in the actor.

Start on World Partition: the New RPG Project wizard has a World Partition option under Maps. For an existing map use File → Convert Level, then Fix State Keys.

Stable keys. Every object that keeps saved state (triggers, spawners, random encounter areas, traps, locks, interactables, building entrances) has a Save Key property. You do not type it: the editor assigns one when you place, paste or duplicate the object. Map Check (Build → Check for Errors) warns on a missing key and errors on a duplicate. Fix State Keys (RPG Saga Engine → Advanced tools → World, or the console commands RSE.StateKeys.Check and RSE.StateKeys.Fix) repairs the whole level, loading unloaded actors in batches. Run it after converting a map, after importing actors, and before shipping. Without a key the framework derives one from the level path and actor name, which works until you rename the actor.

Streaming and battles. Always-loaded by design: battle directors, Tactics zones, ATB scenes, zone volumes and arrival points. Put them in the persistent level. A battle keeps the cells around it loaded until it ends (Keep Battle Cells Loaded, Battle Streaming Margin, Min Battle Streaming Radius).

Data layers. Use runtime data layers for parts of the world the story changes. The effect Set Data Layer State (Unloaded, Loaded, Activated) and the condition Data Layer State drive them without code. The state is saved and applied again after a load.

Interiors. The interior level instance loads at Interior Origin, off the map. The door's cells stay loaded while the party is inside (Keep Exterior Loaded Inside, Exterior Streaming Radius). A save made inside restores the party inside. Do not make an interior map a World Partition map.

Limits. A Level Instance placed more than once shares its actors' keys. References between actors in different cells do not survive streaming; use a key, a tag or a soft reference. World Partition support covers single player and co-op hosts.

17.6 Test rooms

A test room is a small map built to exercise one area of the framework, with a smoke test: a short script that plays the room and fails when something does not happen. Rooms ship in /RPGSagaEngine/Examples/TestRooms, built from engine shapes only.

Open a room from RPG Saga Engine → Advanced tools → World → Test Rooms (Open, or Open + Play), or while playing with RSE.Rooms.Go <RoomId> (RSE.Rooms.List lists them). Run the tests in Session Frontend → Automation: RSE.Rooms.<RoomId> per room and RSE.Rooms.Definitions for validity.

The battle launcher (F10, or RSE.Rooms.Launcher; RSE.Rooms.LauncherKey changes the key) tries battles in any room: an encounter, a mode override, a party, a rules profile, AI intelligence per mode and a seed. Start, Restart same seed, Restart new seed and Auto-play (RSE.Battle.AutoPlay) are its buttons. Console equivalents: RSE.Rooms.Launch <EncounterAssetName> [Mode] [Seed] [auto] and RSE.Rooms.Restart. These are development tools and are not available in Shipping builds.

Make your own room: build a small level, create an RSE Test Room Definition data asset named DA_Room_<Name>, fill Room Id, Map, Description and Smoke Script, then run RSE.Rooms.<Name>. Each script line is a console command or a word of the dev-script runner: wait <seconds>, waituntil <state> [timeout], assert <state>, assertnot <state>, shot <name>. States include battle, exploration, dialog, inside, outside, viewfloor:<N>, used:<label> and hassave. Write the script by playing: every console command you type in the room is a line of the script.

17.7 Blueprint usage

World tools are editor-only. Use them in editor utility Blueprints (or Python) under the category RPG Saga | World Tools: Plan Battle Site, Apply Battle Site, Make Battle Site, Write Encounter Layout, Check Tactics Zone, Plan Populate, Apply Populate, Populate Zone, Plan Populate Interactions. For a quick scripted battle site:

  1. Editor Utility Blueprint, Make Battle Site (Request = a filled RSE Battle Site Request: site name, center, size, encounter).
  2. Check the result's problems list; the result carries the plan's problems when it did not apply.

Runtime nodes you reach for:

Example, a bridge that appears after a story event: Event BeginPlay → Get RSE World Streaming Subsystem → Set Data Layer State (Data Layer = DL_Bridge, State = Activated). Better still, use the Set Data Layer State effect in a quest or dialog so the story drives it and the state saves.

17.8 C++ usage

// Walk into a building from code (host side).
if (URSEInteriorTravelSubsystem* Travel = URSEInteriorTravelSubsystem::Get(this))
{
    FText Why;
    if (!Travel->Enter(*Entrance, Pawn, /*bInstant=*/false, &Why))
    {
        UE_LOG(LogTemp, Log, TEXT("Door refused: %s"), *Why.ToString());
    }
}

// React when a World Partition cell streams in.
if (URSEWorldStreamingSubsystem* Streaming = URSEWorldStreamingSubsystem::Get(this))
{
    Streaming->OnLevelShown.AddUObject(this, &AMyActor::HandleLevelShown); // void(ULevel&)
}

Extension points: subclass ARSEBuildingEntrance in Blueprint for a custom prompt or sound; add new furniture, program and theme assets for new interior content; add a piece kind to an interior kit as a Gameplay Tag plus a taxonomy row. Python can run the placement tools headless (unreal.RSEInteractionPlacementLibrary.populate_interactions, unreal.RSELivingWorldToolsLibrary, unreal.RSEKitLibraryFunctions).

17.9 Advanced

17.10 Troubleshooting

SymptomCauseFix
The grid floats, sinks or is missing on some tilesA zone baked with an older version, or decorative meshes counted as groundSelect the zone and press Bake Grid again; tag decoration RSE.GridIgnore
The grid does not show in a forward or mobile rendererProjected mode needs decalsSet Grid Visual Mode to Tiles
Preview reports too few walkable tilesArea on steep or cluttered groundMake the area larger, move it, or lower the walkable share in World Tools settings
No classic stage was madeNo flat clear ground nearbyClear space, raise the search radius or rings, or place a stage yourself
Units jump to another tile when the battle startsThe encounter was laid out for another zone, or the zone was re-bakedRun the tool again or fix the layout in the Encounter Layout mode
Populate places nothing in a Combat AreaThat kind's combat role keeps it outCheck the kind's Avoid in combat areas role setting
The party arrives in a hole or the wrong spot when leaving a buildingThe exit point is not on walkable groundPress Place Exit Point on the entrance; read Get Points Problem
A prop shows backwards in the kit previewIts front is wrongClick it and Rotate Front 90, or fix it in Review
Interior pieces are replaced by boxesThe piece would stretch too much, or the kit lacks the kindRaise that kind's Kind Stretch, or Set Kind a mesh to fill the gap
A chest is closed again after streamingIts state key changed (renamed actor, copied level instance)Run Fix State Keys and keep the keys
A door entrance is not found by the analyzerThe mesh has no door shapeName a socket "Door", or place the entrance by hand with Keep Placement

17.11 See also

18. Character visuals and animation

In short: a character's looks are data. A look (appearance) names a body, optional modular parts, a thin Anim Blueprint and an animation set, and the battle systems play animations and effects from that data. You can bring characters in with one click from a single mesh, import a whole pack, sort thousands of clips with the Animation & FX Library, add paired finishers, and render portraits and icons, all without writing an Anim Blueprint.

18.1 Basics

18.1.1 The pieces

PieceWhat it is
Look (URSECharacterAppearance)The data asset a character points to in its Appearance field: the parts, material variants, the Anim Blueprint, the animation set, the capsule and the attachment points.
Body presetA project-wide body (mesh, Anim Blueprint, animation set, feet offset, capsule, anchors) stored in Project Settings → RPG Saga Engine → Character Visuals → Body Presets. A look can name one instead of carrying its own.
Animation set (URSECharacterAnimSet)One slot per moment: ready, casting, guard, hits from each side, knock-outs, get-up, victory, dodge, turns, portrait pose, talk, expressions, and the real-time action slots (combos, dodge, parry, block).
Anim BlueprintA thin child of URSECharacterAnimInstance. All battle logic is in C++, so the graph is only locomotion, a slot and an output. You never need to edit one.
AnchorsNamed points on the body (Appearance.Anchor.HandRight, HandLeft, WeaponTip, Muzzle, Chest, Head, Feet, Ground) where effects and projectiles attach. The same ability presentation then works on every body.

If a character has no look, the project falls back to Character Visuals → Fallback Appearance (capsule-and-cube placeholders tinted by team), so a battle is always playable.

18.1.2 Fastest way in: New Character from Mesh

  1. Import your rigged humanoid model (FBX or glTF) into the project. It must be a Skeletal Mesh.
  2. Right-click the mesh → RPG Saga Engine → New Character from Mesh.... (Or RPG Saga Engine → Advanced tools → New Character from Mesh..., or the Studio's New character wizard.)
  3. Check the Display Name (made from the file name), pick a Class and the Kind: Party Member (every battle mode), Recruitable (Tactics units) or Enemy.
  4. Leave Animations on Auto, and optionally set Target Height in cm.
  5. Press Preview to read what will happen, then Create Character.

You get, in a folder named after the character under /Game/CharacterPacks: an Anim Blueprint, an animation set, a body preset, a look, ready attack presentations, and, with a class, the character data. Running it again on the same mesh updates the same assets. Models without animations borrow the UE mannequin's, retargeted: install them once with RPG Saga Engine → Advanced tools → Install UE Mannequin Kit.

18.1.3 A whole pack: the character pack importer

For a pack of many characters or skins that share animations:

  1. Import the pack and leave it where it is. The importer never edits it.
  2. RPG Saga Engine → Advanced tools → Import Character Pack... (or right-click the folder → RPG Saga → Import Character Pack...).
  3. Choose the Source Folder, a Profile and the Target Folder.
  4. Press Dry Run and read the report: skins, triangles per LOD, grounding, animations per slot, anchors, weapons, effects.
  5. Press Apply. Run it again after changing the profile: names are deterministic, nothing is duplicated.

Per character it creates ABP_<Character>, DA_AnimSet_<Character>, montages with an RSEImpact notify on the hit frame, ready ability presentations, and optional character data (DA_Char_<Character>). Per skin it creates DA_Look_<Character>_<Skin> and color variants.

18.1.4 Sorting clips and effects: the Animation & FX Library

Bought three animation packs and a magic effects pack? RPG Saga Engine → Advanced tools → Animation & FX Library... reads every clip and effect, decides what each one is, lets you fix the few it got wrong, builds styles ("Sword & Shield", "Staff", "Bow") and dresses your abilities.

  1. Scan Folder for each pack (select the folder in the Content Browser and press From Content Browser first).
  2. Tick Needs review only and correct the orange-confidence rows with the bar under the grid (Set, Accept, Ignore, Back to Automatic). A rescan never changes your Manual rows.
  3. Type a style name, pick a weapon, press Auto-build Style.
  4. Select characters or classes in the Content Browser, press Assign to Selected, then Apply Styles.
  5. Press Dress My Abilities.

18.2 How it works

18.2.1 How a look becomes a character

URSEAppearanceComponent builds the look on an actor: the leader skeletal mesh with the Anim Blueprint, follower parts that copy the leader's pose (leader pose component, so they are cheap), rigid parts on sockets, material variants, and the visible pieces of the worn equipment. Assets load asynchronously in game. There is no tick: everything happens on events. If the owner has no look, it keeps its placeholder shapes.

Parts are FRSEAppearancePartSpec entries with a slot tag (Appearance.Slot.*), a skeletal or static mesh, an attach socket, materials, and, for weapons, a weapon presentation and hold type (see Weapons). Equipment parts replace the part with the same slot. A look is modular (ERSEModularBody: Auto, Modular, SingleMesh) when it has several skeletal parts; a single-mesh body only shows rigid equipment (weapons, shields, hats) and pieces for slots it already has, so armor never clips through it.

Variants are named material changes per slot (a palette, an outfit color). The character data picks one by name.

18.2.2 The animation flow

Battle code never plays an animation by name. It sets a battle state (ready, charging, casting, guard, down, victory) and fires reactions (hit from a direction, knock-out, dodge, blocked), and the Anim Instance picks the clip from the animation set slot. Several clips in a slot play at random (seeded, so a battle replays the same). Impact timing comes from the RSEImpact anim notify on the hit frame, or is estimated. Knock-outs are played and held on their last pose.

Locomotion is a blend space in the anim set (Locomotion), plus turn-in-place clips and optional orientation and stride warping (Character Visuals → Locomotion Warping).

18.2.3 Profiles: how the importer understands any pack

A profile (RSECharacterPackProfile, a data asset) is a list of name rules: patterns with wildcards or regular expressions. Rule groups: Characters (grouping by skeleton, prefixes to strip, target height), Animations (ordered rules pattern → slot, first match wins, extra matches become random variants), Anchors (socket names to find, then bones), Weapons, Strikes (hit frame and contact reach measured from the clip), Effects (role rules for Niagara, legacy particle systems and sounds), Colors (variants as material instances) and Character Data. A required slot that stays empty takes the fallback body's clip, retargeted when the skeleton differs. Missing anchors follow Character Visuals → Anchor Fallbacks (WeaponTip → HandRight, Muzzle → WeaponTip).

Three profiles ship in the plugin: DA_PackProfile_Generic, DA_PackProfile_LowPolyHumanoid (many characters on a shared skeleton, meshes only) and DA_PackProfile_HeroPack (several skins per skeleton, abilities named after their key). Start from a copy of the generic one and add rules until the dry run is right.

18.2.4 Styles and Dress My Abilities

A style (DA_AnimStyle_<Name>) says which clips fill which slots of an animation set and which clips abilities use. Apply Styles writes one animation set per skeleton (DA_AnimSet_<Style>_<Skeleton>) on top of the character's current one, retargets clips of other skeletons once and caches them. Dress My Abilities gives every ability or character that has no look a pose (strike, shot or cast) plus effects of the ability's element and role, and fills the battle-feel slots (weapon trail, cast, impact, projectile trail) and the status auras. The library remembers what it wrote (Provenance) and never overwrites a field you changed. Abilities from the plugin are never written: their dressed look goes to the characters instead.

What decides the effects is data. The Taxonomy (word rules for animations) and FX Taxonomy (element and role words, Dress Rules) can be duplicated and edited. After editing, press Reclassify.

18.2.5 Paired animations and finishers

Two montages that play together on two units, aligned and synced at one moment: finishers, synced counters and parries, boss grabs, boss phase moments. Pairs are presentation only; the rules already decided the result. A URSEPairedAnimationData asset holds the attacker and victim montages, the sync times, the relative position (distance, angle, victim yaw), alignment mode, motion-warp target, conditions (ability, weapon and target tags, outcome), a camera shot, slow motion and sync cues. A URSEPairedAnimationLibrary lists pairs, and Project Settings → Paired Animations registers libraries and sets frequency, chances, cooldown and side rules. The player's own choice is Options → Game → Finishers (Off / Sometimes / Always). In headless runs and with placeholder units the pair does nothing and the battle continues. Animation & FX Library → Find Paired Animations proposes pairs from clips with shared name stems (attacker/victim words), and Create Pairs builds the assets.

18.2.6 Portraits and icons

Portraits come from data, in this order: the character's Portrait Variants entry for the look variant, then Portrait, then generated art. Dialog portraits can be an image, a video clip, or a live 3D render, set on the speaker and overridable per line. The Portrait & Icon Studio renders portraits for characters and speakers from their looks, and icons for items, abilities and statuses, into textures it names T_Portrait_* and T_Icon_*. It is idempotent (a hash of its inputs decides whether to render again) and never replaces a texture you made by hand. Start it from RPG Saga → Content → Generate Portraits & Icons or right-click assets or a folder in the Content Browser; it shows a dry-run plan first.

18.3 Key classes and assets

Class / assetModuleRole
URSECharacterAppearanceRSEA look: parts, variants, Anim Blueprint, anim set, capsule, anchors, hold profile
FRSEAppearancePartSpecRSEOne part of a look (slot, mesh, socket, materials, weapon presentation, hold type)
URSEAppearancePartRSEA visible piece of equipment that replaces the part of the same slot
URSEAppearanceComponentRSEBuilds a look on an actor; forwards battle state and reactions to the animation
URSECharacterAnimSetRSEAnimation slots of one body
URSECharacterAnimInstanceRSEThe C++ base of every character Anim Blueprint
URSECharacterVisualSettingsRSEProject Settings → Character Visuals (body presets, fallback look, warping, performance)
URSECharacterScriptLibraryRSEEditorNewCharacterFromMesh and ImportCharacterPack for editor scripts
URSEAnimLibraryFunctionsRSEEditorThe Animation & FX Library nodes
URSEPairedAnimationData, URSEPairedAnimationLibraryRSEPaired animations and their libraries
URSEPairedAnimationLibraryFunctionsRSERuntime nodes: Find Pair, Play Paired Animation, Try Play Finisher
ARSEPortraitCaptureRigRSEThe rig the Portrait Studio renders

18.4 Settings

Project Settings → RPG Saga Engine. Full list: Appendix B.

Body presets are written to DefaultGame.ini, which is shared. The importer therefore writes them only when Write Body Presets is on; by default each look carries its whole body and works in any project.

18.5 Blueprint usage

Character content is data, so most of the work is editor clicks. Nodes you reach for:

Example: a custom boss grab from Blueprint.

  1. In your boss graph: Make RSE Paired Context (fill in the kind and the ability, weapon and target tags) → Find Pair (Context = the result, Roll = Random Float).
  2. Is Valid on the returned pair.
  3. Is Valid → Play Paired Animation (Pair = the result, Attacker = the boss actor, Victim = the target actor, Local Camera = true, Victim Falls = false, On Finished = a custom event that continues your logic).

Add the RSE Appearance component to your own actor, set its Appearance (and Variant), and press Rebuild in the editor to preview the look in the viewport.

Components that put the plugin's systems on your own actors (RSE Interactable, RSE Explorer, RSE NPC Talk, RSE Door, RSE Combat Role, RSE Traversal, RSE Map Marker, RSE Night Light) are listed in docs/product/components.md. Any of them can be added in the Components panel of a Blueprint-only actor.

18.6 C++ usage

// Show a look on your own actor, then drive its animation.
UCLASS()
class AMyNPC : public ACharacter
{
    GENERATED_BODY()
    UPROPERTY(VisibleAnywhere) TObjectPtr<URSEAppearanceComponent> Look;
public:
    AMyNPC() { Look = CreateDefaultSubobject<URSEAppearanceComponent>(TEXT("Look")); }

    void BeginPlay() override
    {
        Super::BeginPlay();
        Look->SetAppearance(LookAsset, TEXT("Red"));          // soft ref + variant name
        Look->SetBattleState(ERSEAnimBattleState::Ready);
    }
};

Extension points: subclass URSECharacterAnimInstance for custom animation logic (the shipped Anim Blueprints then keep working); resolve anchors with ResolveAnchor and GetAnchorLocation when you spawn your own effects; add new part slots and anchors as Gameplay Tags.

18.7 Advanced

18.8 Troubleshooting

SymptomCauseFix
The character is invisible or a pointRig exported in metersUpdate the plugin and import again; the report names the corrected batch
Twisted arms or sliding feetRetargeting a fallback onto an unusual rigUse the pack importer with its own animations and tune the profile rules
Knock-outs look bentThe pack's death clips end in a ragdoll lead-inMap a better clip or keep the fallback
An attack has no effects or soundsEffects are paired by name and the names are unrelatedAdd effect rules to your profile; the dry run lists unmatched effects
A weapon went to the wrong characterShared folderAdd a rule with a Characters pattern, or enable Match Assets By Name
A clip is in the wrong categoryName or measurement misled the classifierSelect it, pick the category, press Set. It stays Manual
A plugin look did not changePlugin content is a templateCopy the look into your project first
An ability kept its old lookThe library never overwrites your editsClear the ability's presentation and dress again
The character is too big or smallModel scaleSet Target Height and create it again

18.9 See also

19. Weapons

In short: every attack with a weapon shows that weapon in every battle mode: guns aim and fire, bows release arrows, blades swing with a trail, staves glow. The look is a Weapon Presentation data asset, and how the weapon sits in the hand is fitted in Unreal's own Skeleton Editor with the Fit Weapon tool, with the left hand placed by IK. This chapter covers both, from the first working weapon to sockets, stances, recoil and validation.

19.1 Basics

19.1.1 What you see in battle

The plugin ships one presentation per weapon kind, built only from its own procedural meshes, effects and synthesized sounds, so a project with no effects pack still gets visible gunfire.

19.1.2 Your first weapon, step by step

  1. Make the presentation. Content Browser → Add → Miscellaneous → Data Asset → RSE Weapon Presentation. Set Weapon Kind (Sword, Axe, Dagger, Spear, Blunt, Fist, Pistol, Rifle, Shotgun, Bow, Crossbow, Staff, Thrown). The stance follows the kind unless you override it.
  2. Put it on a character. Open the character's look (URSECharacterAppearance), add a part in the weapon slot with the weapon's mesh, and set the part's Weapon Presentation. Or give an equipment item its own presentation.
  3. Fit it in the hand. Open Tools → RPG Saga Engine → Fit Weapon, pick the character and the weapon, press Fit in Skeleton Editor, and move the socket until the weapon sits right. Save the skeleton.
  4. Check. Press Validate in the same tab.
  5. Play a battle. The attack uses the presentation.

Shortcut: run Dress My Abilities in the Animation & FX Library (option Weapon Presentations). It classifies your weapon meshes, finds their muzzles, and writes DA_WeaponPresentation_<Mesh> assets from your pack's effects, sounds and gun clips. A presentation you set by hand is never replaced.

19.2 How it works

19.2.1 Which presentation an attack uses

In order:

  1. The weapon the unit visibly holds: the look's weapon part (Appearance → Parts → Weapon Presentation) or a worn item's mesh.
  2. Its equipped weapon: Equipment → Weapon Presentation, else the presentation of its equipment type (Project Settings → RPG Saga Engine → Weapon Presentation → Equipment Type Kinds and Kind Presentations).
  3. In action battles, its action weapon.
  4. Otherwise the approach default: Default Melee for melee attacks and Default Ranged for ranged ones. Spells and items show no weapon, except a staff's cast animation.

A unit with a ranged weapon shoots its basic attack from where it stands, even when the rules call that attack melee.

19.2.2 Surfaces

The surface of a hit unit comes from an actor tag named like the surface (Surface.Metal) or a Surface.* tag in the character's personal traits, else Default Unit Surface (Surface.Flesh). A presentation has one impact entry per surface (Surface.Flesh, Metal, Stone, Wood, Energy, or your own child tags) and a Default Impact for the rest. In action battles, world hits use their physical material through Physical Surfaces.

19.2.3 How a weapon is attached to the hand

All attachment goes through one path (RSEWeaponHold). A weapon part of a look, or a worn item mesh, is attached to the wielder's hand for its hold type:

Hold typeFor
PistolHandguns: one-handed grip, the other hand cups it
RifleRifles, SMGs, shotguns, crossbows
One Hand MeleeSwords, daggers, maces, axes, thrown knives
Two Hand MeleeGreatswords, great axes, hammers, tools
PolearmSpears, lances, polearms
BowBows (usually held in the left hand)
StaffStaves, wands, rods
UnarmedFists, claws: nothing held

The hold type is Auto from the weapon kind unless you override it on the part or in Fit Weapon.

The right hand has one socket per hold type on the skeleton, on the hand bone: RSE_Pistol_R, RSE_Rifle_R, RSE_OneHand_R, RSE_TwoHand_R, RSE_Polearm_R, RSE_Bow_L and RSE_Staff_R (the names are in Weapon Hold → Hold Sockets). The weapon's pivot sits on the socket. The Skeleton Editor previews an attached asset exactly that way, so what you see in the editor is what battles and exploration show. When the skeleton has the socket, it wins over any hold profile or generated hold, which remain as the fallback.

A weapon whose pivot differs from its category's gets its own socket on the skeleton, RSE_W_<WeaponMesh> (the prefix is Weapon Hold → Weapon Socket Prefix), which wins over the category socket.

The weapon's own sockets (static or skeletal mesh):

SocketMeaning
GripWhere the right hand holds it (X = barrel or blade forward, Z = top)
LeftHandWhere the left hand goes (two-handed holds)
MuzzleWhere guns fire from
TipThe tip of a melee weapon, where trails and spell effects start

They win over a presentation's stored grip and over the measured one. The names are settings (Weapon Hold → Weapon Sockets). Without a Muzzle or Tip socket, a presentation falls back to its own socket names and offsets, then to the weapon's measured tip: the far end of the mesh from the grip along its longest side.

If the skeleton has no sockets at all, weapons attach through a Weapon Hold Profile (URSEWeaponHoldProfile, one per skeleton) or a hold generated from the skeleton's hand (the finger bones tell the palm and finger directions). RSE.Weapons.Hold.SkeletonSockets 0 turns the sockets off, to compare.

19.2.4 The left hand

The left hand reaches the weapon's LeftHand socket with the Two Bone IK of the character's Anim Blueprint, then turns to the socket's rotation with the RSE Hand Rotation node, so the fingers wrap under the handguard. Rotate the LeftHand socket in the mesh editor and the hand turns by as much, live, also in the Skeleton Editor preview.

The hand is described in a frame that is the same on every skeleton (X along the fingers, Z out of the back of the hand), so one weapon socket works on every body. Weapon Hold → Support Hand Rotations gives, per hold type, the hand's orientation when the socket keeps the weapon's own axes; the plugin sets the rifle and the pistol. A hold type without an entry keeps the IK's own rotation, so add one for two-hand melee or staves if you need it. A hold profile can override it per skeleton and hold type (Override Support Hand Rotation).

The animation curve DisableLeftHandIK (or the profile's Disable Support Hand IK Curve) turns off position and rotation together, for reloads or bashes.

19.2.5 The weapon layers in the Anim Blueprint

Add Weapon Layers to Anim Blueprints puts this chain before the output pose of every RSE character Anim Blueprint. Every node is driven by the anim instance; nothing is set by hand:

  1. RSE Stance Overlay (from the first upper-body bone): the held weapon's stance over the upper body.
  2. Local To Component.
  3. Transform (Modify) Bone on the upper spine: the recoil kick of the chest.
  4. Transform (Modify) Bone on the weapon arm: the recoil kick of the arm.
  5. Two Bone IK on the left hand: the support hand on the weapon.
  6. RSE Hand Rotation on the left hand.
  7. Component To Local.

Bones come from the skeleton's hold profile, else from the name lists in Weapon Hold settings. A node whose bone the skeleton lacks is skipped by the engine. Anim Blueprints you made earlier get the nodes only after you run the tool; running it again updates the nodes it made.

19.2.6 Stance animations

Each hold of a hold profile has stance clips for its skeleton: Ready, Upper Body Overlay, Aim, Fire, Reload, Attack (variants picked deterministically per battle), Heavy Attack and Cast.

19.2.7 Guns: fire clips and recoil

A gun never plays a melee clip. Its shot plays, in order: the presentation's clip for the attacker's skeleton, the hold profile's Fire, the animation set's action Fire, the animation set's Recoil pose clip, each only when its name does not read as a melee swing (Gun Reject Clip Words: slash, swing, punch, kick, stab...). Without a fitting clip the gun uses the procedural recoil: the upper spine pitches back and the weapon arm rises, then both recover. Later shots in a burst kick again at 0.6 strength. The kick per hold type is in Weapon Hold → Recoil Defaults (Spine Pitch, Arm Pitch, Duration, Peak Time, an optional Curve), overridable per hold profile (Override Recoil). Characters without an RSE anim instance (placeholder units) keep a simple recoil slide of the whole unit.

19.2.8 Weapons that are part of the body mesh

Some characters carry the weapon inside the body mesh (a gun arm, a modelled blade). Their muzzle and tip are found on the body by name patterns: Body Muzzle Socket Patterns (*muzzle*, *barrel_end*) and Body Tip Socket Patterns (*weapon_tip*, *blade_tip*), sockets first, then bones. When the look holds no weapon part, shots leave from that muzzle and trails follow that tip. The look's own Anchors mapping still wins.

19.2.9 Ranged attacks without a gun

A character holding no gun or bow (a monster's breath, a caster's palm) fires ranged attacks from its Unarmed Shot Anchor: the look's, else Weapon Presentation → Unarmed Shot Anchor (the chest). It never fires from a melee weapon's tip.

19.3 The Fit Weapon tool

Open Tools → RPG Saga Engine → Fit Weapon. (The older Weapon Hold Workbench actor is no longer in the menus; Fit Weapon replaces it and uses the engine's own editors, with live gizmos, undo and preview.)

Pick the Character (a character, a look or a skeletal mesh) and the Weapon (a presentation, an item or a mesh; empty = the look's own weapon). The tab shows the resolved hold type (override with Hold Override), the socket and the idle it will play.

ButtonWhat it does
Fit in Skeleton EditorAdds the hold socket when missing, seeded from the hold the game used so far. Sets the character's mesh as the preview mesh, attaches the weapon to the socket as a preview asset (earlier Fit Weapon attachments are replaced, others stay), plays a standing idle through the character's Anim Blueprint, and opens the Skeleton Editor with the socket selected.
Edit Weapon SocketsAdds the weapon's Grip, LeftHand (two-handed holds) and Muzzle or Tip sockets when missing, seeded from its grip, and opens the mesh editor.
Apply to CategoryCopies this skeleton's hold socket to the other skeletons of your looks (scaled by hand size) and this weapon's grip to the other weapons of the hold type, adding RSE_W_<Mesh> sockets where a pivot would sit off its category socket. It shows the full list and writes nothing until you confirm, in one undoable step.
ValidateChecks every weapon of the hold type on this skeleton: reversed or off-axis guns (Min Barrel Forward Dot 0.7), grips far from the palm (Max Grip Offset 10 cm) and, for two-handed holds, a left hand farther than Support Hand Tolerance (8 cm) from the LeftHand socket in the stance idle.
Suggest Stance AnimationsFills empty stance slots of this skeleton's hold profile from the library.
Add Weapon Layers to Anim BlueprintsInstalls or completes the chain above in every RSE character Anim Blueprint of the project.

The idle is the hold's stance Ready, else the animation set's Ready, else the standing sample of the locomotion blend space. Without a fitting idle the reference pose shows, never a random clip. Fit Weapon writes only project content (/Game), never the plugin's or the engine's. In the Skeleton Editor, choosing another preview animation ends the Fit session and stops the IK preview, since the IK runs only with the Anim Blueprint.

19.4 Key classes and assets

Class / assetModuleRole
URSEWeaponPresentation (asset: RSE Weapon Presentation)RSEOne weapon's look: stance clips, sockets, flash, shots, impacts, trail, sounds, feel
URSEWeaponPresentationBaseRSECoreThe data the core references (kind, hold type)
URSEWeaponPresentationSettingsRSEProject Settings → Weapon Presentation
URSEWeaponHoldProfileRSEPer-skeleton hold: sockets, support hand IK, stance clips, recoil
URSEWeaponHoldSettingsRSEProject Settings → Weapon Hold
FAnimNode_RSEStanceOverlay, FAnimNode_RSEHandRotationRSEThe two anim graph nodes
URSECharacterAnimInstanceRSEComputes stance, IK and recoil inputs; Play Weapon Recoil
URSEWeaponFitLibraryRSEEditorFit Weapon functions for Python and Editor Utility Blueprints
URSEWeaponHoldEditorLibraryRSEEditorAdd Weapon Layers and Suggest Stance Animations
URSEWeaponLibraryFunctions, URSEWeaponLibrarySettingsRSEEditorClassify meshes and make presentations from your packs

19.5 Settings

Project Settings → RPG Saga Engine. Full list: Appendix B.

Weapon Hold:

SettingDefaultMeaning
EnabledonWeapon holds on or off
Use Skeleton SocketsonRead the RSE_* sockets on skeletons
Hold SocketsRSE_Pistol_R ... RSE_Staff_RSocket name per hold type
Weapon Socket PrefixRSE_W_Per-weapon skeleton socket prefix
Weapon SocketsGrip, LeftHand, Muzzle, TipNames on the weapon mesh
Fallback Hold TypeOne Hand MeleeWhen nothing else decides
Support Hand IK / Rotationon / onThe left hand IK and its rotation
Default Ready ModeUpper BodyStance mode when a hold says Profile Default
Stance Blend Time0.2 sFade of the stance around attacks
Procedural Recoil, Recoil DefaultsonThe kick of guns without a fire clip
Body Muzzle / Tip Socket Patternswildcard listsWeapons in the body mesh
Idle Reject Words, Gun Reject Clip Wordsword listsFilters for stance and fire clips
Weapon Socket Tolerance / Angle Tolerance1 cm / 3 degWhen Apply to Category writes RSE_W_ sockets

Weapon Presentation: Equipment Type Kinds, Kind Presentations, Default Melee and Default Ranged, Approach Defaults, Unarmed Shot Anchor, Max Tracers Per Attack, Decal Lifetime, Physical Surfaces, Default Unit Surface, Default World Surface.

Weapon Library: the name rules that classify meshes (rifle, ak, smg → Rifle; katana, blade → Sword), Muzzle Socket Words, Shape Overrides Name, Stance Suggestions.

19.5.1 The Weapon Presentation asset

SectionFields
WeaponWeapon Kind, Stance (Auto, Melee Light, Melee Heavy, Pistol, Rifle, Shotgun, Bow, Caster)
AnimationStance Anims: per stance an Attack, an Aim and a Reload
SocketsMuzzle Socket / Offset, Shell Eject Socket / Offset, Trail Start / Trail End Socket
FiringMuzzle Flash, Shell Eject, Shot (tracer or projectile, trail, speed, line or arc), Shots Per Attack, Shot Interval, Pellets Per Shot, Pellet Spread, Aim Time, Recoil Distance
ImpactsImpacts per surface, Default Impact
MeleeMelee Trail, Trail Seconds, Swing Impact Time, Lunge Distance
SoundsFire Sound, Swing Sound, Reload Sound
FeelShake On Hit, Shot Shake, Hit Stop

19.6 Blueprint usage

In timelines, four cues use the weapon: Weapon Attack (the whole attack: aim, burst or swing, impacts and hit reactions; fields Weapon, Stance, Heavy, Shots, Approach), Weapon Shot (tracers or projectiles from the muzzle), Weapon Hit Effects (the melee impact on each target's surface) and Weapon Animation (a stance clip on subjects whose skeleton takes it). Abilities without a presentation asset get a default timeline that already writes the weapon attack.

Editor Utility Blueprints and Python can drive Fit Weapon (category RPG Saga | Weapon Fit): Resolve Context, Ensure Hold Socket, Fit In Skeleton Editor, Edit Weapon Sockets, Plan Apply To Category, Execute Changes, Validate, Open Fit Weapon Tab, Is Writable. Category RPG Saga | Weapons has Add Support Hand IK To Anim Blueprints (the node behind Add Weapon Layers) and Suggest Stance Animations.

Example, validate every rifle on a skeleton from an Editor Utility Blueprint:

  1. Resolve Context (Character = the look, Weapon = the rifle presentation, Hold Override = Rifle).
  2. Validate (Context = the result, Whole Category = true).
  3. For Each Loop over the returned strings → Print String.

At runtime, Play Weapon Recoil on the RSE character anim instance kicks the procedural recoil (it needs the recoil nodes of the Anim Blueprint).

ctx = unreal.RSEWeaponFitLibrary.resolve_context(look, weapon, unreal.RSEWeaponHoldType.AUTO)
ok, report = unreal.RSEWeaponFitLibrary.fit_in_skeleton_editor(ctx)
changes, notes = unreal.RSEWeaponFitLibrary.plan_apply_to_category(ctx, False)
unreal.RSEWeaponFitLibrary.execute_changes(changes)
unreal.RSEWeaponLibraryFunctions.dress_weapons_in_folders(["/Game/MyGame/Characters"], False)

19.7 C++ usage

// Kick the recoil of a unit whose Anim Blueprint has the weapon layers.
if (URSEAppearanceComponent* Look = Unit->FindComponentByClass<URSEAppearanceComponent>())
{
    if (URSECharacterAnimInstance* Anim = Look->GetAnimInstance())
    {
        const float Seconds = Anim->PlayWeaponRecoil(ERSEWeaponHoldType::Rifle);
        // 0 = recoil off (CVar RSE.Weapons.Recoil 0) or no recoil nodes.
    }
}

Extension points: author your own URSEWeaponPresentation assets; add a Weapon Hold Profile for a skeleton that needs a custom hand, stance clips or recoil; add rows to Support Hand Rotations and Recoil Defaults for hold types you tune; query the held weapon with URSEAppearanceComponent::GetHeldWeaponHold and GetHeldWeaponPresentation.

19.8 Advanced

19.9 Troubleshooting

SymptomCauseFix
The weapon sits reversed, offset or in the airThe hold socket on the skeleton is missing or wrongFit in Skeleton Editor, move the socket, save the skeleton, run Validate
One weapon is off while others are fineIts pivot differs from its category'sGive it its own RSE_W_<Mesh> socket (Apply to Category adds it)
The left hand does not reach the weaponNo LeftHand socket, or the Anim Blueprint lacks the chainEdit Weapon Sockets, then Add Weapon Layers to Anim Blueprints
The left hand reaches but the fingers point the wrong wayNo rotation entry for the hold typeRotate the LeftHand socket, add a Support Hand Rotations entry, or a profile override
IK does not run in the Skeleton EditorA different preview animation was chosen, or no Anim BlueprintRun Fit in Skeleton Editor again
A gun plays a sword swingIts stance clips are melee clipsSet Fire clips on the hold profile, or Suggest Stance Animations; guns already reject names in Gun Reject Clip Words
The gun does not kickThe recoil nodes are missingAdd Weapon Layers to Anim Blueprints
The character stands in a prone pose in Fit WeaponThe idle chosen was a prone clipSet the hold's Ready clip; prone, crouch and death names are rejected automatically
A revolver is held as a maceThe pack's name said BluntSet Weapon Kind to Pistol on the presentation, or use the Hold Override
Fit Weapon does not saveThe asset is plugin or engine contentCopy the look and the weapon into your project first
Shots leave from the chestNo gun, so the Unarmed Shot Anchor appliesSet a muzzle socket on the weapon mesh, or change the look's Unarmed Shot Anchor

19.10 See also

20. Camera and battle presentation

In short: one camera framing system keeps every camera (exploration, each battle mode, cinematic shots) out of rocks and walls, and the battle presentation system turns the results the rules already computed into a show: timelines of cues for animation, effects, sound, camera, hit-stop and text. Use this chapter to tune how cameras behave, to give an ability a look, and to understand what is data and what is automatic.

20.1 Basics

20.1.1 The cameras you get

WhereCamera
ExplorationThe party RPG camera: either Tactical (high above the party at a tactical angle, zoom, rotation, smooth follow, optional pan) or Third Person (behind the leader). Pick it in Project Settings → RPG Saga Engine → Exploration → Camera.
Grid TacticsARSETacticsCameraPawn on the same camera arm, following the active unit and the cursor.
Free TacticsARSEFreeTacticsCameraPawn, following the active unit and the cursor.
ATB and turn-basedA fixed stage camera, framed once when the battle starts.
ActionARSEActionCameraRig, with the player's own yaw and pitch.
Cinematic shotsCamera Shot cues in an ability's presentation, plus an optional automatic Cinematic Battle Camera.

You do not have to set any of this up. The defaults frame every mode, and the framing system avoids obstructions in all of them.

20.1.2 Make your cameras obstruction-proof (already on)

  1. Open Project Settings → RPG Saga Engine → Camera Framing. Enabled is on by default.
  2. Mark anything that must move the camera instead of fading with the actor tag RSE.CameraBlocker, and anything that must never fade with RSE.NoFade.
  3. Play a battle. If the camera sits inside geometry, switch on the debug view: console RSE.Camera.FramingDebug 1 draws the probe sphere and the candidate poses.

Small things (thin walls, props, trees) fade locally as in exploration (Camera Occlusion). What cannot fade (landscapes, terrain-tagged objects, anything tagged RSE.CameraBlocker or RSE.NoFade, anything at least Camera Occlusion → Max Fade Size wide on both horizontal axes, 1500 cm by default) moves the camera.

20.1.3 Give an ability a look

Every ability can name a presentation asset (Presentation on the ability). Without one, the plugin builds a default timeline: the body of the approach (run in, stay put or shoot) and the hit reaction on the target.

  1. Content Browser → Add → Miscellaneous → Data Asset → RSE Battle Presentation Data.
  2. Add cues to its list, in order: for example Move / Approach (To Target), Montage, VFX, Sound, Impact, Move / Approach (To Home).
  3. On the ability, set Presentation to the asset.
  4. Press Play in a battle and use the ability. Use the Ability Test and preview tools (see 06-abilities-and-statuses.md) to iterate without fighting.

20.2 How it works

20.2.1 The presentation flow

The rules (RSECore) resolve an action instantly and emit events. The presentation (RSE) plays them back. A director hands the action to the cue player component (URSEBattleCuePlayerComponent), which runs the timeline of cues; the Impact cue is the moment the director shows the already-computed results (numbers, falls, statuses) and the targets react. With no Impact cue the results appear at the end of the timeline. Because the result never depends on the show, headless simulations skip it and stay identical.

Each cue starts after its Delay. The next cue waits only if the previous one has Wait For Completion, so cues overlap freely (an effect that starts with the swing, for example). Common cue fields: Delay, Wait For Completion, Only In Modes (Battle.Mode.* tags; empty means every mode; Battle.Mode.ATB also covers turn-based), and Optional (skipped when effects are reduced). Cues act on roles, not on named units: Caster, Primary Target, All Targets or Each Target, Targets Center, Midpoint. One asset therefore works for every character in every mode.

20.2.2 The cue types

Cue (display name)ClassWhat it does
Move / ApproachURSECue_MoveRun to the target or back home. In Tactics this becomes a short step (units stay on their tile).
Pose (procedural)URSECue_PosePlaceholder motion (lunge, hop, spin, shake, recoil) for units without animation
MontageURSECue_MontageA montage on units with a skeletal mesh; RSEImpact notifies time the next Impact cue
VFXURSECue_VFXA Niagara (or legacy particle) system at an anchor (chest or ground) or a body anchor (hand, weapon tip, muzzle, head, feet)
SoundURSECue_SoundA sound or a catalog tag, 2D or at an anchor
Camera ShotURSECue_CameraClose-up on caster or target, over the shoulder, two-shot, orbit, return; blend, hold, distance, height, FOV
Camera ShakeURSECue_CameraShakeA procedural shake
Hit StopURSECue_HitStopA brief freeze
Slow MotionURSECue_SlowMotionTime dilation with blend in and out
Screen Flash / FadeURSECue_ScreenFlashA color flash or fade
Text / BannerURSECue_BannerThe ability's name or your own text, as a banner or a title
WaitURSECue_WaitA pause
ImpactURSECue_ImpactShow the results; several Impact cues make a multi-hit
ProjectileURSECue_ProjectileA projectile flight from the caster to the targets
Weapon Attack, Weapon Shot, Weapon Hit Effects, Weapon AnimationURSECue_Weapon*The weapon's own show (see 18-weapons.md)
Paired AnimationURSECue_PairedAnimationTwo synced montages for a finisher or counter (see 17-characters-visuals-and-animation.md)

Approach on the ability: Auto picks from the data (physical damage to enemies → Melee; row-ignoring → Ranged; everything else → In Place), or choose Melee, Ranged, In Place or Custom (only your cues).

20.2.3 Camera policy

The battle camera stays on the fixed view for ordinary actions. Camera cues run only when the policy allows it (Battle Presentation → Camera Policy):

20.2.4 Cinematic moments

MomentWhenDefault
Super moveAbility with Presentation → Moment = Super MoveClose-up on the caster, slow motion, flash, title, then a side or over-shoulder shot and the attack body with shake and hit-stop
Summon entranceAfter the action that brings a summonFlash, close-up, slow motion, the summon's title, a jump, shake, orbit
Boss introAt battle start, when the encounter has a VIP enemyOrbit around the boss, its name as a title, a tremor

All can be replaced by assets in the settings (Super Move Prelude, Summon Entrance, Boss Intro), switched off (Summon Entrance, Boss Intro toggles), and skipped with Confirm or Cancel. The battle HUD hides while they run.

20.2.5 Speed, skip and reduced effects

Playback Speed (1 = normal) and Fast Forward Speed while a key from Fast Forward Keys is held. Cinematic moments always skip with Confirm or Cancel; ordinary actions only with Allow Skip Actions. On a skip the remaining impacts fire, so results always appear. Reduce Effects turns off shake, flash, hit-stop and optional cues for weak PCs and accessibility. The player's own options (Reduced battle effects, Battle animation speed) override the rule; the order is console variable, then player choice, then the rules.

20.2.6 How framing chooses a pose

The framer (FRSECameraFramer, in RSECameraFraming) runs on a timer (Check Interval, 0.1 s), not every frame:

  1. It tries poses around the desired one, cheapest first: yaw in steps (Yaw Step 20 deg × Yaw Steps 2), a steeper angle (Pitch Step 10 deg × Pitch Steps 2, up to Max Pitch 80), alternative sides (Alternate Yaws), then moving closer (down to Min Distance Share 0.6 or Min Distance 300 cm).
  2. Each pose is tested with a sphere (Probe Radius 24 cm) from the pivot toward the camera, against the focus heights (Focus Heights, up to Max Focus Targets).
  3. Hysteresis stops flicker: a blocked pose is left after Switch Delay (0.1 s); a free pose changes to a cheaper one only after the cheaper one has stayed better for Return Delay (0.8 s) and by Switch Margin.
  4. Offsets glide to the chosen pose at Blend Speed.
  5. Never inside geometry: every frame, a safety sphere (at least the near clip plane plus Near Clip Margin) is swept from the pivot to the displayed pose. It enters instantly and leaves smoothly (Release Speed).

Per mode: Exploration keeps the player's yaw (only angle and distance adapt); Grid Tactics tries small steps, a steeper angle or another side (90 or 180 deg) before moving in, so the grid stays readable; ATB frames once at battle start without changing sides; Action keeps the player's yaw and pitch and uses the framer instead of a simple probe.

20.2.7 The cinematic battle camera

Off by default; for captures and trailers. Turn it on in Camera Framing → Cinematic Battle (Enabled) or with RSE.Camera.CinematicBattle 1. Each action gets shots chosen on the spot and checked for visibility: over the shoulder of the attacker (one target), a wide shot (Wide Shot Targets or more targets, default 2), and the target's reaction at the first impact (Reaction Shot). It follows the 180-degree rule, cuts or glides depending on how far the view turns (Cut Angle, default 40 deg), and holds each shot at least Min Shot Seconds (0.6 s). Distances and field of view are in the same group (Over Shoulder Distance 420 cm, Wide Distance 1100 cm, Field Of View 50).

20.3 Key classes and assets

Class / assetModuleRole
URSEBattlePresentationDataRSEThe timeline of cues (an ability's presentation)
URSEBattleCue, URSEBattleCue_CustomRSEBase cue; the Blueprint-extendable cue with On Cue Start, On Cue Update, On Cue Stop
URSEBattleCuePlayerComponentRSEPlays timelines for the ATB and Tactics directors
URSEBattlePresentationSettingsRSEProject Settings → Battle Presentation
URSECameraFramingSettingsRSEProject Settings → Camera Framing
URSECameraOcclusionSettings, URSECameraOcclusionSubsystemRSEFade and hide of what hides the party
URSERPGCameraArmRSEThe party RPG camera arm
ARSETacticsCameraPawn, ARSEActionCameraRigRSEGrid Tactics and Action cameras
IRSECameraFocusInterfaceRSELets your camera pawn tell the occlusion system what to keep visible (Get Camera Focus)
ARSEFreeTacticsCameraPawnRSEThe Free Tactics camera
URSEAudioSettings, URSESoundCatalogRSEMusic, sound catalog and the mixer

20.4 Settings

Project Settings → RPG Saga Engine. Full list: Appendix B.

20.5 Blueprint usage

Authoring is mostly data. For custom behavior, subclass RSE Battle Cue Custom in Blueprint:

  1. Content Browser → Add → Blueprint Class → search Custom (Blueprint) (class URSEBattleCue_Custom).
  2. In the class defaults set Duration (0 means instant: only start and stop run), Subjects (which units the events receive), Receive Update (only if you need per-frame work) and Is Impact (the results show when the cue starts).
  3. Override On Cue Start (Player, Subject Actors): for example For Each Loop over Subject Actors → Spawn Emitter Attached.
  4. Override On Cue Update (Alpha, 0 to 1 over Duration) for continuous effects and On Cue Stop (Skipped) to leave things in their final state. The events are const: the cue is shared data, so keep state on the subject actors, not in the cue.
  5. Add your cue to a presentation asset's cue list, with its Delay and Wait For Completion.

To tell the occlusion system what must stay visible on your own camera pawn, implement the RSE Camera Focus Interface (Class Settings → Interfaces → Add) and override Get Camera Focus, returning the feet of the characters to keep visible (most important first) and the actors never to hide. Dev commands for tuning the exploration camera while playing: RSE.Camera zoom in|out|min|max|<distance>, RSE.Camera yaw <deg>, RSE.Camera tilt up|down|reset, RSE.Camera pan <x> <y>, RSE.Camera style tactical|thirdperson, and RSE.Camera prop wall|pillar|bigtree|mesh to drop a test obstruction in front of the camera (props are tagged RSE.CameraTestProp).

20.6 C++ usage

// A new cue type: a timed pause the timeline can wait for.
UCLASS(meta = (DisplayName = "My Beat"))
class UMyCue_Beat : public URSEBattleCue
{
    GENERATED_BODY()
public:
    UPROPERTY(EditAnywhere, Category = "Beat", meta = (ClampMin = "0", Units = "s"))
    float Seconds = 0.2f;

    virtual void Start(URSEBattleCuePlayerComponent& Player, FRSECueState& State) const override
    {
        State.Duration = Seconds;           // the player ends the cue when this has elapsed
    }
    virtual float EstimateDuration(const URSEBattleCuePlayerComponent&) const override { return Seconds; }
};

Extension points: subclass URSEBattleCue (or the Blueprint-friendly URSEBattleCue_Custom); implement IRSECameraFocusInterface on your actor to feed the framer a focus; use FRSECameraFramer with your own FRSECameraFramingRules for a camera of your own; add presentation assets per ability. A new battle mode only needs to use the cue player component and call the framer.

20.7 Advanced

20.8 Troubleshooting

SymptomCauseFix
Camera sits inside a rockThe rock is wider than Max Fade Size but not taggedTag it RSE.CameraBlocker; check with RSE.Camera.FramingDebug 1
A small prop never fadesIt carries RSE.NoFadeRemove the tag
The camera jumps around a pillarHysteresis too shortRaise Switch Delay and Return Delay in the mode's rules
An ability has no camera shotThe policy is Fixed, or the action is not specialSet the policy to All, or tick Cinematic Camera on the ability
Effects fire but results never appearThe timeline has no Impact cue and the cue was skipped mid-wayAdd an Impact cue; skipping always fires the remaining impacts, so check the cue asset loaded
Shake and flash are missingReduce Effects is on (setting, option or CVar)Check RSE.Battle.Presentation.ReduceEffects and the player's option
A cinematic moment cannot be skippedInput is captured elsewhere, or a super move without camera lost its preludeCheck the policy; the HUD stays visible in that case
Camera cues play in ATB but not as expectedClassic Camera Policy is Special OnlySwitch to All or mark the ability special

20.9 See also

21. User interface

In short: every built-in screen (menus, party menu, options, dialog, shops, HUDs) takes its look from one UI Style asset, and its arrangement from small layout classes. Ten styles ship in the plugin; change one field and the whole game changes. When you want your own design, you replace any screen with a Widget Blueprint that receives a ready-made view-model, so you never re-implement a rule. This chapter also covers Common UI hosting, accessibility, and touch and phone UI.

21.1 Basics

21.1.1 The three levels of UI work

You wantDo thisNeeds
A different color, font or frameEdit or duplicate a UI Style assetNothing: editor clicks
A different arrangement (bubble dialog, side tabs, shooter-minimal HUD)Pick a layout in the style, or write a small layout classEditor clicks, or a little Blueprint
A completely different screenMake a Widget Blueprint derived from RSE Screen Widget and put it in the screen's slotUMG

21.1.2 Pick a style

  1. Open Project Settings → RPG Saga Engine → UI Theme → UI Style.
  2. Set Default Style to one of the ten shipped styles (the assets are DA_UIStyle_* in the plugin's UI/Styles folder). Keep several in Selectable Styles and the player gets an Interface style row in Options → Display.
  3. Press Play. Every menu, the dialog, the party menu and the HUDs use it.

The ten styles:

StyleLook
ClassicDeep-blue gradient windows, thin light double frame, gold cursor
ParchmentWarm paper, ink-brown double line, sepia text (a light style); visual-novel dialog
GothicNear-black windows, silver double line, crimson accent, capitals; cinematic dialog
HoloTranslucent cyan panels, scanlines, glowing outline; shooter-minimal live HUD, grid inventory
BrassDark wood and leather, brass border with rivets, amber text
MinimalFlat white surfaces, hairline borders, one blue accent (a light style)
Pixel16Stepped pixel corners, hard borders, dithered gradient, pixel fonts
AnimeSaturated plum, magenta and teal, thick outlines, speech-bubble dialog, radial battle menu
TacticalOlive and graphite, hex-grid pattern, stencil capitals; also fits RPG shooters
SylvanTranslucent moss-green panels, soft gold glow, round corners

Each style also suggests a battle menu style, an inventory (list or grid) and a Growth board look; the player's own options always win. The Studio's foundation presets pick a matching default style (for example Dark Fantasy → Gothic, Sci-fi RPG → Holo).

21.1.3 Change the whole look with one field

  1. Open DA_UIStyle_Classic (or better, press Duplicate to project in the Style Editor first; plugin content is read-only for Fab installs).
  2. Colors → Tokens → Primary → Color: pick a green.
  3. Save. Every window, frame line, selected row and tab turns green; text, gold highlights and HP bars stay.

Or drag the Hue, Saturation and Lightness sliders in the Style Editor toolbar: they write Colors → Global Shift (hue-locked tokens such as Health, Positive and Negative keep their meaning).

21.2 How it works

21.2.1 Colors are tokens

A style has a few seed colors (Primary, Secondary, Accent, Neutral, Text; Positive, Negative, Warning, Info; Health, Mana, Charge, Rare). Each seed has ten derived shades, S50 (lightest) to S900, computed in the perceptual OKLCH space, and roles (Surface0–3, Border, Highlight, Selection, TextMuted, Disabled, Shadow) derived from seeds. Every color field of a style, and of the settings that use UI colors, is a UI Color (FRSEUIColor): a token, a shade, an opacity and an optional fine tune. Tick Fixed to use a plain color that ignores the style. You can add your own tokens (element colors, factions) under Tokens → Custom Tokens.

21.2.2 Frames, fonts, sounds, motion

21.2.3 Layouts

A style also decides how screens are arranged. Each screen has a few layouts, and every layout works with every style, with mouse and gamepad, from 1280×800 to 4K:

ScreenLayouts
DialogBottom Box, Bubble (speech bubble over the speaker), Cinematic (letterbox), Novel Portrait (large portrait)
Party menuTop Tabs, Side Tabs
ATB / turn-based HUDBottom Window, Compact Corner
Grid Tactics HUDCorners, Bottom Bar
Live Tactics HUDCorners, Shooter Minimal

Changing the style at run time rebuilds the open screens with the new layout. Sizes the layouts use (bubble width, side tab column, shooter edge inset) are in Project Settings → RPG Saga Engine → UI Layouts.

21.2.4 Battle HUDs and menus

Each battle mode has its HUD, built from a view-model: the Grid Tactics HUD (RSETacticsHUDViewModel), the classic ATB and turn-based HUD (RSEATBHUDViewModel) and the Live Tactics HUD, plus results, game over, banners and the action-command ring. ARSEBattleHUD is the framework's HUD class and hosts them.

Battle menus are data. A Battle Menu Config (URSEBattleMenuConfig) lists providers (URSEBattleMenuProvider: Movement, Command Layout, Pact, Items, Flee, Doors, End Turn, Custom) and category definitions. A Battle Menu Style (URSEBattleMenuStyle) picks the look: List, Radial or Hotbar. The default is chosen in Project Settings → Battle Menus and the player can change it in Options. A new menu look is a new presenter widget class plus a style asset; a new source of commands is a new provider. Menus never act on their own: every entry goes through the same command path, so all menu styles give the same commands.

21.2.5 The screen, the view-model and the slot

Every screen is built the same way:

The built-in screens use exactly the same view-models and actions as yours, so a replacement cannot forget a rule (money, stock limits, formation limits, save restrictions).

21.2.6 Replace a screen

  1. Create a Widget Blueprint whose parent class is RSE Screen Widget (for a character card, RSE Member Card Widget).
  2. Design it freely in UMG.
  3. In its Event Graph, implement On View Model Changed: Cast To the screen's view-model class (for example RSEShopViewModel), then copy its data to your widgets. It runs once when the screen gets its view-model and after every change.
  4. Call the view-model's actions from buttons (On Clicked → Buy, Equip, Continue). Keyboard and gamepad already work: On Confirm, On Back, On Navigate and On Page forward to the view-model by default.
  5. Set your Widget Blueprint in the screen's slot.

Slots include: Tactics HUD (UI → Tactics HUD Widget Class), classic HUD (UI → ATB HUD Widget Class), party menu (UI → Party Menu Widget Class, or one page via Party Menu Page Widget Classes), dialog (Dialog UI → Dialog Widget Class), shop (Economy UI → Shop Widget Class), save and load (Save UI → Slot Widget Class), options (Options → Widget Class), battle results and game over (Battle Flow UI), world map and travel overlay (Travel UI), card table and album (Cards UI), code lock (Puzzle UI), interaction prompt (Interaction → Prompt Widget Class), quest tracker (Quest UI → Quest HUD Class), main menu (Game Flow → Main Menu Widget Class), scene overlay (Scenes), battle banners and the action command ring (Battle Presentation). The full table with the view-model of each is in docs/product/custom-ui.md. A class that cannot be used (missing, abstract, not an RSE Screen Widget) is reported in the log and the built-in screen is used instead.

You can replace part of a screen: one party-menu page, the Tactics forecast panel or deployment panel, or just the character cards. A card Widget Blueprint derived from RSE Member Card Widget fills itself if its widgets are named NameText, ClassText, LevelText, HPText, HPBar, StatusText and Portrait: no graph needed.

Four examples ship in /RPGSagaEngine/Examples/UI (WBP_Example_PartyPage, WBP_Example_MemberCard, WBP_Example_ResultsScreen, WBP_Example_DialogBox). Copy one into your project before editing it.

21.2.7 Accessibility

Accessibility is applied on top of the active style, so every style (and your screens, if they read the style) gets it. Options → Display has: Interface style, Color vision (Off, Protanopia, Deuteranopia, Tritanopia: replaces the signal colors; Health stays red), High contrast (opaque near-black surfaces, white text, strong outlines), Text size (80% to 150%, never below UI Theme → Minimum Font Size) and Reduce motion. Changes apply live. A style that cannot be read is an invalid asset: Validate (contrast) in the Style Editor checks text on surface (4.5:1), selected row (4.5:1) and caption (3:1) for normal vision, the three color-vision modes and high contrast.

21.2.8 Common UI integration

The module RSECommonUI hosts the plugin's screens on Epic's CommonUI layer stacks, so your Common Activatable Widgets and ours share one focus and back order. It is a host layer, not a migration: our screens keep their own build path, style, layouts and view-models, and the host is off by default.

Turn it on in Project Settings → RPG Saga Engine → Common UI: Route Screens (our screens go onto the layers), Party Menu Host (Fallback or Always) and Use Common Input Key Prompts (CommonInput controller icons in key prompts). The four layers are Game, Game Menu (the party menu), Menu (options, save, shops, maps) and Modal (popups). Your own primary layout: derive a Widget Blueprint from RSE Common UI Layout and name its stacks GameLayer, GameMenuLayer, MenuLayer, ModalLayer; or, if you already have a layout, call Register Layer Stack on Get RSE Common UI. Each screen is wrapped in an RSE Common Screen Host that applies the input config and routes CommonUI's back and navigation to it. Key prompt icons come from your CommonInput controller data, else generic glyphs drawn in code (the plugin ships no platform logos).

21.2.9 Touch and phone UI

Touch is a third control device next to keyboard and gamepad. Every on-screen control and gesture presses one of the input actions the game already uses (Enhanced Input injection), so exploration, all battle modes and the menus behave as with a key. Five Touch Layout data assets ship (DA_TouchLayout_Exploration, GridTactics, LiveTactics, ClassicBattle, Action) in /RPGSagaEngine/Input/Touch, picked in Project Settings → RPG Saga Engine → Touch → Layouts. Controls are placed in the safe area in millimetres, so they are the same physical size on every phone. The phone UI adds physical DPI scaling (set User Interface → DPI Scaling → Custom with RSE Physical Scaling Rule), a 9 mm minimum touch target, safe-area handling, and a Phone variant of every screen layout. Options → Controls has touch size, opacity and a left-handed mode.

Status: the touch and phone code is complete and tested headless, but mobile has not yet been tested on a real phone; treat it as pre-release until your own device tests pass (see 23-platforms-and-performance.md). To try it on PC: RSE.Input.Touch.Emulate 1 (mouse as a finger; hold Alt for a second finger), RSE.UI.Phone.Simulate 1, RSE.Input.Device Touch.

21.3 Key classes and assets

Class / assetModuleRole
URSEUIStyleRSEThe style data asset: seeds, frames, fonts, sounds, motion, layouts
URSEUIStyleSubsystemRSEOne per local player: the active style, On Style Changed
URSEUIStyleLibraryRSEBlueprint nodes for style colors, fonts, frames, accessibility
URSEUIThemeSettingsRSEProject Settings → UI Theme
URSEUIStyleEditorSettingsRSEEditorProject Settings → UI Style Editor (the Style Editor and gallery)
URSEScreenWidget, URSEScreenViewModelRSEBase of every screen and of every view-model
URSEMemberCardWidgetRSEA self-filling character card
URSEHUDWidgetBaseRSEBase of the built-in screens; style helpers for C++
URSEDialogLayout, URSEPartyMenuLayout, URSEATBHUDLayout, URSEGridHUDLayout, URSELiveHUDLayoutRSELayout bases
URSEBattleMenuConfig, URSEBattleMenuProviderRSECoreWhat a battle menu offers
URSEBattleMenuStyle (+ _List, _Radial, _Hotbar), URSEBattleMenuPresenterRSEHow a battle menu looks
ARSEBattleHUDRSEThe framework HUD that hosts battle screens
URSELocalPlayerUISubsystemRSEFinds the UI host of each player; opens screens
URSECommonUISubsystem, URSECommonUISettings, URSECommonUILayout, URSECommonScreenHostRSECommonUIThe Common UI host
URSETouchLayout, URSETouchInputSubsystem, URSETouchControlsWidget, URSEPhoneUISettings, URSEPhysicalScalingRuleRSETouch and phone UI

21.4 Settings

Project Settings → RPG Saga Engine. Full list: Appendix B.

21.5 Blueprint usage

RPG Saga | UI Style nodes (editor and runtime): Get UI Color (token, shade, opacity), Resolve UI Color, Get UI Font (text role), Get UI Frame Brush (panel kind, for a Border or an Image), Get Active UI Style, Set UI Style (by Style Id), Get Selectable UI Styles, Get Selectable UI Style Ids, Preview UI Style and End UI Style Preview, Get UI Accessibility, Set UI Accessibility, Set UI Color Vision, Set UI High Contrast, Set UI Text Scale, Set UI Reduce Motion. Widgets derived from the plugin's screen classes get the event On UI Style Changed: rebuild what shows style colors there.

Example, a style picker for your own options screen:

  1. Event Construct → Get Selectable UI Style Ids → For Each Loop.
  2. For each id, Create Widget (a button) and bind its click to Set UI Style (Style Id = the id).
  3. Bind On UI Style Changed to refresh your own colors with Get UI Color.

Example, a custom shop screen:

  1. Create a Widget Blueprint with parent RSE Screen Widget.
  2. Event On View Model Changed → Cast To RSEShopViewModel (Object = View Model) → read its lists into your widgets (Join Text Lines, Fill Member Cards shorten the graph).
  3. Button On Clicked → the view-model's Buy action.
  4. Set it in Economy UI → Shop Widget Class.

Other useful nodes (RPG Saga | UI): Get Theme Font, Get Panel Brush, Get Key Label, Get Action Key Label, Make Menu Prompt, Is Using Gamepad, Play UI Sound, and the screen openers Open Inventory, Open Growth and Open Party Menu (Player), which work with any HUD class. Common UI: Get RSE Common UI → Push Widget To Layer, Push Screen, Pop Screen, Register Layer Stack.

A custom layout in Blueprint: create a class from the screen's layout base (RSE Dialog Layout, RSE Party Menu Layout, RSE ATB HUD Layout, RSE Grid HUD Layout, RSE Live HUD Layout), override Arrange, and use the context nodes Place Part, Place Part Stretched, Place Part Fitted, Place Part Full Screen, Group Parts, Hide Part, Get Margin, Get Canvas Size, Has Flag. Pick it in the style under Layout → Layouts → Custom ... Layout. Layouts only place the parts a screen built and keep no state.

21.6 C++ usage

// A widget derived from URSEHUDWidgetBase: colors and fonts follow the style.
void UMyBadgeWidget::NativeOnStyleChanged()
{
    Super::NativeOnStyleChanged();
    const FLinearColor Border = Color(RSEUITokens::Accent);
    const FSlateFontInfo Label = Font(ERSETextRole::Label);
    // rebuild what shows these
}

// A layout in C++.
UCLASS()
class UMyDialogLayout : public URSEDialogLayout
{
    GENERATED_BODY()
    virtual void Arrange_Implementation(URSEScreenLayoutContext* Context) const override;
};

In your own settings, use FRSEUIColor instead of FLinearColor for any color that should follow the style. For a view-model of your own system, derive from URSEScreenViewModel, expose data and actions, and let OnChanged tell the widget. Layout part names are in UI/Layout/RSEScreenLayouts.h.

21.7 Advanced

21.8 Troubleshooting

SymptomCauseFix
My Widget Blueprint is ignoredWrong parent class or empty slot; the log says whyDerive from RSE Screen Widget and set the slot in the right settings page
My screen shows nothingThe view-model data is read only at constructRead it in On View Model Changed, which also runs after every change
Input fires twiceReading keys yourself while the controller forwards themUse the default On Confirm and the other input events; do not bind the same keys again
A color does not follow the styleIt is a plain Linear Color or marked FixedUse a UI Color (FRSEUIColor), or untick Fixed
I cannot edit a shipped stylePlugin content is read-only on Fab installsDuplicate to project in the Style Editor
The frames are slow on a weak deviceProcedural frames with glow and patternsUse simpler frames, or RSE.UI.ProceduralFrames 0 to test
Common UI back does nothingThe viewport client is not CommonGameViewportClientSet it in Project Settings → Engine → General Settings, and set a Default Back Action
Our screens appear in the viewport, not on layersRoute Screens is offTurn it on in the Common UI settings
Touch controls are tiny or hugeDPI rule not setSet the physical scaling rule (User Interface → DPI Scaling → Custom)
Style change does not show in my screenIt is not derived from the framework screen classesBind On Style Changed on the UI Style Subsystem and refresh

21.9 See also

22. Save and load

In short: the whole game state (party, inventory, story, quests, world, time and more) is saved in slots, from save points in the world, from a consumable save item that works almost anywhere, and by autosave at save points and zone changes. Saving is never allowed in battle, dialog or cutscenes. Every system saves itself as a named section, so adding your own state is one registration line.

22.1 Basics

22.1.1 What the player gets

There is no saving or suspending during a battle: the state of a fight is never serialized.

22.1.2 Your first save point

  1. In your level, place a Save Point actor (Place Actors → search "Save Point", class ARSESavePoint).
  2. Give it a unique Save Point Id (for example Inn_Hearth). Move its Player Spawn where the player should stand when loading from it.
  3. Optionally set its Mesh and Interact Radius.
  4. Play, walk up and interact. The save screen opens.

Save screens, Continue and Load in the main menu need nothing else: they are built in.

22.1.3 A no-save zone

  1. Place a No Save Volume actor (class ARSENoSaveVolume) around the area, for example the corridor before a boss.
  2. While the player is inside, the consumable item is blocked and the save screen says why. Save points still work (the block's scope is Consumable Item Only).

For an area name shown on the slot screen, place an Area Volume actor (class ARSEAreaVolume; the higher priority wins where volumes overlap).

22.1.4 A save item

Create the item as a Save Item data asset (URSESaveItemData, a consumable without a use ability that is never usable in battle). Give it to the player like any item. Using it opens the slot screen; the item leaves the inventory only after a successful save.

22.2 How it works

22.2.1 The principle

The save system knows no gameplay system. Each system that keeps state registers a participant and writes its own section: an id, a version and bytes. The save file is a header (Info: slot, timestamp, play time, request source, location, party summary, money, a JPEG thumbnail) plus a list of opaque sections. Only fields marked UPROPERTY(SaveGame) are saved, with tagged properties, so a field added after a save loads with its default and a removed field is ignored. References to content are written as text and stay stable between versions.

The sections the plugin saves include:

SectionWhat it holds
Partymembers (recruitment, departures, guests), inventory with key items and documents, equipment, vitals (HP, MP and any persistent resource, KO), progression, formation
Narrativestory flags and variables, solved puzzles, unlocked zones, seen events and scenes, one-shot interactions, discoveries
Rulesthe active rules profile id
Quests, Cards, Dialog, Difficultyquest status and steps, card collection, read lines and seen dialogs, adaptive intelligence per mode and recent battles
Worldencounter triggers, random areas, visible enemy spawners, locks, chests, traps, interactables, data layers, interior visits (keyed by stable State Keys)
Audio, Tutorials, Bestiary, Time, NPCs, Seeds, PartyControl, Mapstory music override, seen tutorials, met enemies, clock and weather, story changes of NPC days, random seeds, who controls whom in the field, fog of war and pins

Intentionally not saved: a battle in progress, the dialog runner, a scene in progress, save blocks, travel in progress, zone music, the current zone banner, character looks and animation state (rebuilt from data), and the player's options (volume, language, text speed, UI style, controls), which belong to the user in GameUserSettings.ini. Session-only sections (such as session rules and stealth state) replicate in co-op but never go in files.

22.2.2 Save rules

Blocking is a registry of reasons, counted so overlapping zones stack. The built-in reasons are Battle, Dialog, Cutscene (all scope) and NoSaveZone (consumable only). Check with Can Save Now, which also returns the reasons. A save is refused with Blocked when a reason applies.

Autosave: Autosave Slot Count slots rotate (Autosave, Autosave1...): the first empty one, else the oldest (a damaged slot is replaced first). Autosave runs at every save point and on arrival at a map through travel, after Zone Autosave Delay, never in no-save zones (unless Autosave In No Save Zones) and not within Min Seconds Between Autosaves. A load never autosaves.

22.2.3 Files and recovery

With the default File backend a slot is Saved/SaveGames/<Slot>.sav: a small container (magic, version, size, CRC32) around the save bytes. Writes are atomic: the new file is written to .tmp, the current good file becomes .bak, then the temp file is renamed over the slot. A damaged file never replaces a good backup. When loading, a damaged or missing slot falls back to the complete temp file, then to the backup; the slot screen marks a slot that came from backup. A save written by a newer game version is refused before anything is applied, so a half-loaded state never exists.

22.2.4 Save backends

Project Settings → Save → Backend: File (default, with free-space check), Save Game System (the platform's ISaveGameSystem, the storage consoles implement, with our container around the bytes) or Custom (a C++ class implementing IRSESaveBackend). Saves are per platform user (FRSESaveUser). Failures report Corrupt, NoSpace, UserSignedOut or Failed through On Save Failed.

22.2.5 Loading

Load Game applies every section to its system immediately (in the game instance, so state survives the map change), then opens the saved map and places the party at the saved save point, marker or transform. Each section is read into a fresh value and assigned only if it succeeds, so a corrupt section cannot spoil the current state. New game resets every saved system (Start New Game).

22.2.6 Versions and migration

The file has a version and each participant has its own. ReadSaveSection receives the saved version so a participant can convert old data. A missing section (a system added after the save) calls OnSaveSectionMissing (default: that system's new-game state). A section with no participant (a removed system) is ignored with a warning. A section newer than its participant is refused.

References to deleted content are dropped on load with a warning per reference, instead of failing the load: the stack of a deleted item, a deleted member, a deleted equipment slot entry.

22.3 Key classes and assets

Class / assetModuleRole
URSESaveSubsystemRSECoreGame instance subsystem: slots, save, load, blocks, autosave, participants
IRSESaveParticipant, TRSEStructSaveParticipant<T>RSECoreA system's section writer and reader
URSESaveGame, FRSESaveSlotInfo, FRSESaveLocation, FRSESaveRequestRSECoreThe file, its header, where the party was, why it was saved
URSESaveSettingsRSECoreProject Settings → Save
URSESaveInteropLibraryRSECoreExport and import sections to your own save system
IRSESaveBackendRSECoreCustom storage
URSESaveSessionPolicyRSECoreCo-op rules for who may save and load
URSESaveFlowSubsystemRSEOpens the save screen, opens the saved map and places the party, consumes the save item
ARSESavePoint, ARSENoSaveVolume, ARSEAreaVolumeRSESave point, no-save zone, zone name
URSESaveItemDataRSEThe consumable save item
URSESaveUISettingsRSEProject Settings → Save UI
URSEBlueprintLibrary_SaveRSEThe Blueprint nodes for everything above

22.4 Settings

Project Settings → RPG Saga Engine → Save. Full list: Appendix B.

SettingDefaultMeaning
Slot Count3Manual slots
Slot Name PrefixSlotSlot0, Slot1...
Autosave Slot NameAutosaveEmpty means no autosave
Autosave Slot Count1Rotating autosave slots
Autosave On Zone TransitiononAutosave when arriving on a map
Autosave In No Save ZonesoffAllow it inside no-save zones
Zone Autosave Delay0.5 sWait after arrival
Min Seconds Between Autosaves30 sRate limit
BackendFileFile, Save Game System or Custom
Suspend Flush Timeout2 sHow long a pause waits for pending writes
Keep BackuponKeep the previous good save
Min Free Disk Space MB1Refuse to save below this

Save UI (Project Settings → Save UI) holds the slot screen: autosave at save points, thumbnail size and capture, lock after save, and the texts for corrupt, backup and unavailable slots. Game Flow holds Show Continue and the menu keys.

22.5 Blueprint usage

Category RPG Saga | Save (the RPG Saga Blueprint Library Save nodes):

Example, a minigame that blocks saving:

  1. Event: minigame starts → Block Saving (Reason = Minigame, Scope = All).
  2. Event: minigame ends (and in Event EndPlay) → Allow Saving (Reason = Minigame).

Example, a custom "Continue" button:

  1. Button On Clicked → Get Continue Slot → Branch on the return value.
  2. True → Load Game (Slot Name = the slot).
  3. False → show a "no saves" message (or use Has Any Save to disable the button).

Keeping our state inside your own SaveGame: the RPG Saga | Save | Interop nodes read and write live state of any section without using our slots: Get Save Section Ids, Export Section To Bytes, Import Section From Bytes, Export Sections To Bytes / Import Sections From Bytes (an empty list means every section), and the JSON forms (Export Sections To JSON, Import Sections From JSON, Export Section To JSON, Import Section From JSON). In your save function call Export Sections To Bytes with an empty list and keep the array in a Byte Array variable of your SaveGame; after you load your map, call Import Sections From Bytes. Import replaces the state of those sections and does not open the map: load it yourself. A section the project does not have is skipped, not an error.

22.6 C++ usage

Register a section for your own system, in the Initialize of a subsystem whose state is a struct of SaveGame fields:

USTRUCT()
struct FMyQuestBoardState
{
    GENERATED_BODY()
    UPROPERTY(SaveGame) TArray<FName> CompletedBoards;
    UPROPERTY(SaveGame) int32 ReputationPoints = 0;
};

void UMyBoardSubsystem::Initialize(FSubsystemCollectionBase& Collection)
{
    Super::Initialize(Collection);
    Collection.InitializeDependency<URSESaveSubsystem>()
        ->RegisterStruct<FMyQuestBoardState>(TEXT("MyBoard"), /*Version=*/1, this, [this] { return &State; });
}

Rules: the section id never changes after saves exist; the participant lives as long as its owner; use the returned participant's PostLoad(SavedVersion) to convert old data, OnMissing for a system added after the save, and OnNewGame for new-game state. Load order is registration order (the party is first). Do not save things that can be rebuilt (positions of schedule-driven NPCs, animation state).

Block saving from your own code: Save->PushSaveBlock(TEXT("MyCinematic")) and Save->PopSaveBlock(TEXT("MyCinematic")) (reasons are counted; always pop in EndPlay).

State held by actors (triggers, locks, interactables) lives in the exploration state subsystem under a State Key (the Save Key property, assigned by the editor); the actor reads it in BeginPlay and writes on change. See 16-world-building.md.

22.7 Advanced

22.8 Troubleshooting

SymptomCauseFix
The save item says it cannot be usedA block applies: battle, dialog, cutscene or no-save zoneCheck Can Save Now for the reasons; a block you pushed yourself needs its pop
Saving is blocked forever after a minigameA Push without a PopPop in every exit path and in EndPlay; the log warns on a pop without a push
A manual save fails with Protected SlotIt targeted an autosave slotUse Get Slot Name for manual slots
Autosave does not run on arrivalRate limit, no-save zone or the setting is offCheck Autosave On Zone Transition, Min Seconds Between Autosaves, Autosave In No Save Zones
After loading, a chest is closed againThe actor's state key changed (renamed actor, copied instance)Run Fix State Keys and keep the Save Key values
Load says IncompatibleThe save was written by a newer versionUpdate the game; nothing was applied
My system's data is gone after loadingNo participant, or no SaveGame flag on the fieldsRegister the section and mark fields UPROPERTY(SaveGame)
A load puts the party at the wrong placeThe save point id is not uniqueGive each save point its own Save Point Id
A guest cannot saveCo-op: only the host savesExpected; see the session policy
Slot shows as damagedA corrupt file with no readable backupDelete the slot, or load another; saves rewrite damaged slots

22.9 See also

23. Co-op and online

In short: RPG Saga Engine lets two to four players play one game together: one player hosts, friends find or are invited to the session, and everyone explores, talks and fights in the host's world. You do not write networking code. Your own systems go online by declaring their state and their actions, the same way they already do for saving.

23.1 Basics

23.1.1 The two layers

Co-op is built from two layers that you can use separately.

LayerModuleWhat it does
Online sessionsRSEOnlineGetting players into the same game: host, find, join, invite, leave, reconnect, clear error messages, a lobby screen. Works on a local network (LAN), on Steam and on Epic Online Services (EOS) behind one interface.
Co-opRSENetWhat the players share once they are in: the party, the inventory, the story, quests, the map, the clock and live battles. Every player drives a party member.

Both are optional. They load with the plugin and switch on only when the game runs a network session. Single player never pays for them, and it never notices the co-op rules. You can turn the whole thing off with the Online and Co-op feature (Project Settings → RPG Saga Engine → Features).

23.1.2 The model in one minute

The maximum is four players, host included. The session is a listen server: the host plays too, and no dedicated server is needed.

23.1.3 Try it on a local network in two minutes

LAN needs no account and no setup.

  1. Start the game twice as standalone games (Play → Standalone Game, twice), or on two PCs on the same network. Use a map with an exploration game mode. The plugin's example map works.
  2. In the first window open the console and type RSE.Online.Host. The log shows host listening on ... ok.
  3. In the second window type RSE.Online.AutoJoin. It searches until it finds the host and joins.
  4. The guest appears as a party member that the host's companion AI was driving. Walk around in both windows.
  5. RSE.Online.Status lists the session and the players. RSE.Net.Status lists the players, their members and positions, the state sections and the traffic. RSE.Net.Stats 10 measures the bandwidth for ten seconds.

For a screen instead of commands, RSE.Online.Lobby opens the built-in lobby: Host, Find, a list of sessions to join, the players and your character choice. With the default settings the main menu also offers Host Game and Join Game, and the in-game menu offers Host co-op game, Invite friends, Join a game and Leave co-op game.

23.1.4 The co-op rules you get for free

The group plays the host's story together. These rules are built in. Each has settings and a replaceable policy class, so you change a rule without touching the framework.

23.2 How it works

23.2.1 Sessions

A session goes through a small state machine owned by the session subsystem:

host:    Idle -> Creating -> Hosting
search:  Idle -> Searching -> Idle
client:  Idle -> Joining -> Connected
drop:    Connected -> Reconnecting -> Joining -> Connected
end:     Leaving -> Idle

Only one operation runs at a time. A second one is refused with Busy rather than mixed up with the first. Every step has a timeout (Operation Timeout Seconds), and every failure has its own player-facing message: the service is unavailable, you are not signed in, the session is full, the host runs another version, the host refused new players during a battle, the connection was lost, and so on.

The online service is a provider: LAN, Steam, EOS, or a class of your own. The session flow, the version check, the reconnecting and the lobby are the same for all of them.

23.2.2 Commands

Every player action is a command: a small serializable struct, a validator and an applier.

  1. A widget or a Blueprint submits the command (Submit Command).
  2. On the host or in single player the bus calls the handler's Validate, then Apply, at once.
  3. On a guest the bus sends the command to the host. The host fills in the sender from the connection, never from the packet, so a client cannot pretend to be someone else. It validates, applies and returns the result.
  4. The system's own events fire as usual, and the state section it changed replicates.

Commands refer to content by id (tags, primary asset ids, soft references), never by pointer. Commands that need randomness take their seed from the game's command stream, not from the global random generator, so the host's result is reproducible.

23.2.3 State sections

A state section is one named block of serializable state, the same block the save system writes. The owner marks it changed when its state changes. The network layer then sends it when the revision grew and the bytes differ from what was last sent. A section has a scope:

ScopeSent to
Shared (default)everyone
PerPlayerits owner only (tutorial progress, for example)
HostOnlynobody (difficulty, seeds)

A change you forget to mark is still caught by a safety net, the change detection, a little later and at some cost. Mark your changes anyway.

23.2.4 Live battles

The host's machine runs the battle. Every machine shows it with its own camera, HUD and menus. The host streams the battle's numbered events and state to each guest, and a guest that falls behind catches up at a higher playback rate. A battle's start snapshot travels in confirmed chunks. When another player's unit acts, your HUD says who is choosing, then shows the action. After Turn Timeout Seconds the host may command an unanswered unit for one turn (default), or the AI plays it. A player who leaves mid-battle is replaced by the AI at once, and a player who joins watches until the battle ends.

Real-time Action battles use their own stream for co-op: the host is authoritative for damage, the guest moves its own character with client prediction, plays its swing at once and claims its hits through the command bus. Its transport budgets are in Co-op Network → Action Battle.

23.2.5 Zone travel

The host's travel is a server travel. Guests reconnect to the new map and keep their slots, behind a short loading screen. Seamless travel is not used. A guest cannot start a travel on its own.

23.3 Key classes and assets

Class / assetModuleRole
URSESessionSubsystemRSEOnlineThe one object for the session flow: host, find, join, leave, invites, lobby, state and errors. Blueprint and C++.
URSESessionProviderRSEOnlineBase of an online service. URSESessionProvider_OSS works with any Online Subsystem. URSESessionProvider_LAN, _Steam and _EOS derive from it.
URSEOnlineSettingsRSEOnlineProject Settings → RPG Saga Engine → Online.
URSELobbyWidget, URSELobbyViewModelRSEOnlineThe built-in lobby screen and the data a replacement screen reads.
URSEOnlineMenuEntryRSEOnlineAdds Host Game, Join Game and the in-game entries (a URSEMenuExtension).
URSENetSettingsRSENetProject Settings → RPG Saga Engine → Co-op Network.
ARSENetGameMode, ARSENetGameState, ARSENetPlayerStateRSENetThe exploration game mode with the co-op components built in. Use it for maps meant for co-op.
URSENetSubsystem, URSENetWorldSubsystemRSENetThe transport: commands up, results and events down. URSENetWorldSubsystem::SendToPlayer, SendToGuests and RegisterEventHandler carry your own messages.
URSENetPlayerComponentRSENetOn each player state: the slot (GetPlayerId) and the player's own state sections.
URSENetBattleSubsystem, URSENetActionBattleSubsystemRSENetThe live-battle and Action-battle streams.
URSECommandSubsystem, FRSECommand, URSECommandHandlerRSECoreThe command bus and its building blocks.
URSESaveSubsystem, RSEStateSections::MarkChangedRSECoreThe state sections (the same ones the save system writes).
URSEPlayers, URSEPlayerProvider, URSEAuthorityPolicyRSEWho the players are (GetControllerFor, GetPawnFor) and when the co-op rules apply (HasAuthority, IsMultiplayerSession).
URSECoopNoticeSubsystemRSEOne notice path for every player.
URSECoopRulesSettings, URSECoopFlowSettingsRSECore / RSEThe co-op rules and the flow settings (leash, travel, scene skip, texts).
ARSECoopMapSettingsRSEA per-map actor for the leash radius and the guests' start spacing.

There are no data assets to create for co-op. Your first work is in settings.

23.4 Settings

23.4.1 Online

Project Settings → RPG Saga Engine → Online (URSEOnlineSettings):

SettingWhat it doesDefault
Provider ClassThe service: LAN (Null subsystem), Steam, Epic Online Services, or your own provider class.LAN
Fallback To LANWhen the chosen service is not available (Steam not running, EOS not configured), use LAN instead of failing.on
Game VersionPlayers join only hosts with the same version. Empty uses the project version.empty
Max PlayersPlayers in a session, host included (2 to 4).4
VisibilityPublic, Friends Only or Invite Only. LAN sessions are always visible on the local network.Friends Only
LAN PortThe game port the host listens on.7777
Host MapThe map the host opens when hosting. Empty stays on the current map and opens it to players (drop-in).empty
Join In Progress PolicyA player who joins during a battle: spectate until it ends, join immediately, or be refused.Spectate
Keep Slots For ReconnectA player who drops keeps the slot and character until a new player needs the place.on
Operation Timeout SecondsAny step (create, search, join, travel, leave) that takes longer fails with a clear message.30 s
Auto Reconnect, Reconnect Attempts, Reconnect Delay SecondsA client whose connection drops rejoins the same session.on, 3, 3 s
Lobby Widget Class, Lobby Z Order, Lobby Panel WidthThe lobby screen.built-in

For one run the command line -RSESessionProvider=LAN (or Steam, EOS, or a class path) overrides the provider.

23.4.2 Co-op network

Project Settings → RPG Saga Engine → Co-op Network (URSENetSettings):

SettingWhat it doesDefault
Enable CoopInstalls the co-op layer whenever the game runs a network session. Off means your project replicates on its own.on
Section Send IntervalHow often the host looks for changed state sections.0.1 s
Change Detection IntervalHow often the host compares every section's bytes to catch unmarked changes. 0 = never.0.5 s
Min Section Resend IntervalA section that keeps changing is sent at most this often. The latest state always goes out.0.2 s
Compress Sections, Compression Min Bytes, Compression FormatSections above the minimum are compressed.on, 256, Oodle
Max Section BytesA larger section is not replicated and is reported as an error. Split that state.256 KB
Max Command BytesLarger commands are refused. A much larger packet disconnects the sender.4096
Max Commands Per SecondPer guest. More are refused, not applied.30
Max Queued CommandsCommands a guest keeps while it is still connecting.32
Broadcast Result TypesCommand types whose results every player receives, for notices.none
Player Provider Class, Authority Policy ClassWho the players are, and when co-op rules apply (from the second player). Replaceable.built-in
Assign Member On JoinA joining player takes a party member from the companion AI. Off means you assign members yourself.on
Class RelevancyPer actor class: cull distance, update rate and priority.built-in

The Battle and Action Battle categories hold the stream tuning (intervals, chunk sizes, the Action mirror's byte budget, claim limits). The defaults are measured. Leave them alone until you have a reason to change them.

23.4.3 Rules and flow

WhereMain values
Co-op Rules (URSECoopRulesSettings)Default Encounter Conversion (Free Tactics), Companion Orders (Any Player), Guest Equipment (Own Character), the policy classes
Co-op Flow (URSECoopFlowSettings)Leash on, Host anchor, 40 m, 4 s grace; Scene Skip Rule (Host Only); Group Travel Countdown (3 s); every notice text
Free Tactics (Co-op)Companion Units (AI), Turn Timeout Seconds (45), Turn Timeout Action (Host Takes Over), Pull In Far Players (on), Reconnect Retakes Unit At Once (off)

Per encounter, the Co-op Conversion field chooses what happens in a session: fight it live, use a Co-op Alternative made for co-op, or keep its mode for a set piece. The encounter's validation warns when something would not convert.

See Appendix B for every property.

23.5 Blueprint usage

23.5.1 Host, find and join

All session nodes live on the RSE Session Subsystem (Get Game Instance → Get Subsystem (RSE Session Subsystem)) and in three latent nodes.

Host from a menu button:

  1. On the button's On Clicked, call Host Session (Async). Leave Params at their defaults to use the project settings, or fill the optional fields to override max players, visibility, label or map.
  2. On Success: hide the menu. The game is now hosting and other players can find it.
  3. On Failure: pass the Error to Get Session Error Message and show the text in a message box.

Find and join:

  1. Call Find Sessions (Async). On Success gives the results. Each has a label, map, players, ping and whether it can be joined (Is Session Joinable tells you).
  2. Show them in a list. When the player picks one, call Join Session (Async) with its Result Index.
  3. On Success fires once the client is connected and the map has loaded.

Other nodes on the subsystem: Leave Session (also cancels a search or a reconnect), Show Invite UI, Query Friends, Invite Friend, Set Preferred Character, Open Lobby Screen, Set Battle In Progress, Is In Session, Is Host, Is Multiplayer, Get Session State, Get Last Error. Events to bind: On State Changed, On Session Error, On Sessions Found, On Lobby Changed, On Player Joined, On Player Left, On Player Admission Changed, On Friends Received, On Invite Accepted.

23.5.2 Submit a command from a widget

  1. Pick the command struct. New command structs are declared in C++ (see below). The framework's own commands, such as the party and quest commands, are ready to use.
  2. In the widget: Get Game Instance → Get Subsystem (RSE Command Subsystem).
  3. Make Instanced Struct with the command struct and its fields.
  4. Submit Command. The returned result says Applied, Rejected or Forwarded (a guest sent it to the host).
  5. Bind On Command Result to show the final outcome. On a guest it arrives later, after the host answered.

23.5.3 A handler in Blueprint

  1. Create a Blueprint class from RSE Command Handler.
  2. Set Command Type to the command struct. Set Permission (Any Player or Host Only) and, for host-only commands, a Denied Reason. Untick Uses Seed if the command has no randomness.
  3. Override Validate (return false with a reason the player can read) and Apply (change the state).
  4. List the class in Project Settings → RPG Saga Engine → Commands → Handler Classes.

23.5.4 Notices

Call Notify (one player) or Notify All on the RSE Co-op Notice Subsystem. Bind On Notice to draw the notice in your own widget.

23.5.5 Authority checks

Use Has Game Authority (or Has Authority from the players library) before logic that must run once (spawning, rewards, timers). It is true in single player and on the host, false on a guest. Is Multiplayer Session tells you whether the co-op rules apply.

23.6 C++ usage

23.6.1 Making your system's state replicate

If your system already saves through the save system, it is already replicated. Register the section, set its scope, and mark it when it changes:

// In your subsystem's Initialize (the same registration as for saving):
URSESaveSubsystem* Save = Collection.InitializeDependency<URSESaveSubsystem>();
auto Section = Save->RegisterStruct<FMyReputationState>(TEXT("Reputation"), 1, this, [this]() { return &State; });
Section->Scope = ERSEStateScope::Shared;   // Shared, PerPlayer or HostOnly

// Whenever the state changes (on the authority):
RSEStateSections::MarkChanged(this, TEXT("Reputation"));

On a guest the section arrives and is applied through the same code as a load. Listen to URSESaveSubsystem::OnSectionChanged (Blueprint: On State Section Changed) to refresh the screen.

23.6.2 Making your system's actions commands

USTRUCT()
struct FMyCmd_Praise : public FRSECommand
{
    GENERATED_BODY()
    UPROPERTY() FPrimaryAssetId Town;
};

// In Initialize:
URSECommandSubsystem* Commands = Collection.InitializeDependency<URSECommandSubsystem>();
Commands->RegisterHandler<FMyCmd_Praise>(
    [this](const FRSECommandContext& Context, const FMyCmd_Praise& Cmd, FText& OutReason)
    {
        return Cmd.Town.IsValid();                       // never change state here
    },
    [this](const FRSECommandContext& Context, const FMyCmd_Praise& Cmd)
    {
        State.Add(Cmd.Town, 1);                          // Context.Instigator is the sender
        RSEStateSections::MarkChanged(this, TEXT("Reputation"));
    },
    ERSECommandPermission::AnyPlayer, this);

// From a widget or gameplay code:
Commands->Submit(FMyCmd_Praise{ TownId });

Context.Instigator is the player id of the sender, set by the host's transport. For a public function that must keep its signature in single player, RSECommands::SubmitOrApply wraps the pattern: single player applies at once, a guest sends the command.

23.6.3 Messages from the host to a player

Any USTRUCT can travel from the host to one player or to all guests:

// Inside any class that has a world:
URSENetWorldSubsystem* NetWorld = GetWorld()->GetSubsystem<URSENetWorldSubsystem>();
NetWorld->RegisterEventHandler(FMyEvent_Praised::StaticStruct(), this,
    [this](const FInstancedStruct& E) { ShowToast(E.Get<FMyEvent_Praised>()); });

NetWorld->SendToPlayer(Context.Instigator, FInstancedStruct::Make(FMyEvent_Praised{ /*...*/ }));
// or NetWorld->SendToGuests(...)

The framework's own screens work this way: screens opened by a player's action (shop, code lock, lockpick), puzzle results and dialog votes.

23.6.4 Your own actors

Actors in the world follow the usual Unreal rules: replicated properties and OnRep functions. Put the game logic behind URSEPlayers::HasAuthority(this) so it runs on the host only. Find a player from a command with URSEPlayers::GetControllerFor(PlayerId) and GetPawnFor(PlayerId).

Add RSENet to your module's dependencies only if you use its types directly. Systems that stay on the bus and the state sections need no dependency on it.

23.6.5 Extension points

SubclassTo change
URSESessionProvider (or URSESessionProvider_OSS)Add another online service. Implement Host, Find, Join and Leave, answer each request with its Report... call, and pick the class in Provider Class. A Blueprint child of the OSS provider with another Subsystem Name is often enough for a new platform.
URSEPlayerProvider, URSEAuthorityPolicyWho the players are, and when co-op rules apply.
URSELeashPolicy, URSEGroupTravelPolicy, URSECoopEncounterPolicyThe leash, group travel and encounter conversion rules.
URSEMenuExtensionYour own entries in the main and in-game menus.
URSELobbyViewModel / URSELobbyWidgetA custom lobby screen. Derive a Widget Blueprint from RSE Screen Widget, read the view model and call its actions (Host, Find, Join, Leave, Invite, Cycle Character). Set it as Lobby Widget Class.

23.7 Advanced

23.7.1 Steam

  1. Enable the engine plugin Online Subsystem Steam, then restart the editor.
  2. Add to Config/DefaultEngine.ini:
[/Script/Engine.GameEngine]
+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="/Script/SocketSubsystemSteamIP.SteamNetDriver",DriverClassNameFallback="/Script/OnlineSubsystemUtils.IpNetDriver")

[OnlineSubsystem]
DefaultPlatformService=Steam

[OnlineSubsystemSteam]
bEnabled=true
SteamDevAppId=480
bInitServerOnClient=true

[/Script/SocketSubsystemSteamIP.SteamNetDriver]
NetConnectionClassName="/Script/SocketSubsystemSteamIP.SteamNetConnection"
  1. Set Online → Provider Class to Steam.
  2. Test with two PCs and two Steam accounts. Steam does not work inside the editor viewport: package the game or run it standalone.

App ID 480 is Valve's public test app. It is fine for development, but every developer using it sees the others' sessions (RPG Saga Engine lists sessions of other games and versions as incompatible and does not let you join them). Use your own App ID before release. If Steam is not running, the game falls back to LAN and the log says why.

23.7.2 Epic Online Services

  1. Create a product in the Epic Developer Portal: a product, a sandbox, a deployment, and a client policy that allows peer-to-peer and lobbies. Write down the Product, Sandbox, Deployment and Client IDs and the Client Secret.
  2. Enable the engine plugin Online Subsystem EOS.
  3. In Project Settings → Plugins → Epic Online Services add an artifact with those IDs and a 64-character hexadecimal encryption key. Tick Use EAS and/or Use EOS Connect.
  4. Add to Config/DefaultEngine.ini:
[OnlineSubsystem]
DefaultPlatformService=EOS

[OnlineSubsystemEOS]
bEnabled=true

[/Script/Engine.GameEngine]
+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="/Script/SocketSubsystemEOS.NetDriverEOS",DriverClassNameFallback="/Script/OnlineSubsystemUtils.IpNetDriver")

[/Script/SocketSubsystemEOS.NetDriverEOS]
bIsUsingP2PSockets=true
  1. Set Provider Class to Epic Online Services.
  2. Players must be signed in. For development, run the EOS Developer Authentication Tool and start each game with -AUTH_TYPE=developer -AUTH_LOGIN=localhost:<port> -AUTH_PASSWORD=<credential name>. The provider signs in automatically before hosting or searching and reports Not signed in when it cannot.

23.7.3 What was tested

Be honest with your players and your testers about this. The two-process LAN test (Tools/Dev/coop_lan_smoke.ps1 in the repository) covers join, a guest command, both players moving, a state change, leaving, zone travel, dialogs and scenes, and live battles including a player leaving mid-battle. Steam and EOS have been exercised on a local network only, not between distant machines. Four-player sessions under bad network conditions and hosting on a Steam Deck are not yet tested. Competitive PvP is not part of this release.

23.7.4 Bandwidth

Measured on the example map, two players, LAN:

WhatMeasuredBudget
Joining (every state section, once)about 5 KB sent60 KB
Exploring, per connection4 to 6 KB/s average15 KB/s average, 40 KB/s peak
A guest commandabout 0.3 KB
A live battle, the battle streamabout 0.9 KB/s5 KB/s

If your own state is large, keep sections small and split them (Max Section Bytes reports offenders in the log).

23.7.5 Test without a second machine

All console commands are listed in Appendix C.

23.7.6 Rules for network-ready systems

Whenever you add a system, follow the same rules the framework follows:

23.8 Troubleshooting

SymptomCause and fix
The online service is not availableThe provider's subsystem is not loaded: the engine plugin is not enabled, DefaultPlatformService is not set, Steam is not running, or the game was started with -nosteam. The log line RSEOnline: ... is not available (...) names the reason. With Fallback To LAN on, the game uses LAN instead.
LAN finds nothingBoth games must be on the same subnet. Allow the game through the firewall: UDP for the LAN beacon port (14001) and the game port (7777 by default).
The host is running a different versionSet the same Game Version (or project version) on both builds.
Steam: sessions of other games appearApp ID 480 is shared. They are listed as incompatible and cannot be joined. Use your own App ID.
EOS: Not signed inStart the game with the developer authentication arguments, or sign in through your own login flow before hosting.
Your system works for the host but not for guestsIts state is not a state section, or the owner never calls MarkChanged. Check RSE.Net.Status for the section, and read the log for Max Section Bytes errors.
A guest's action does nothingIt is not a command, or the handler's Validate refused it. Turn on Commands → Log Refused Commands (or RSE.Commands.Log 1) and read the reason.
A guest is refused with a rate messageMore than Max Commands Per Second arrived. Lower the rate of the sender, or raise the setting.
Timers and spawns run on guests tooThe logic is not behind URSEPlayers::HasAuthority.
A guest keeps being pulled backThe leash. Raise Leash Radius, change the anchor, or place an RSE Co-op Map Settings actor.

23.9 See also

24. Platforms and performance

In short: RPG Saga Engine is built and tested on Windows (Win64) and plays on the Steam Deck. It has a low-end fallback path with no Lumen, Nanite or Virtual Shadow Maps, a Steam Deck device profile, a scripted benchmark with budgets, and a platform layer (saves, users, controllers, suspend) that prepares console work. Mobile code exists but is not built or verified yet, and no console has been tried.

24.1 Basics

24.1.1 What is supported, honestly

PlatformStatus
Windows PC (Win64)Editor and packaged game. Built and tested.
Steam DeckPlayed and checked: 1280 x 800, gamepad prompts for the device in use, readable text, a device profile. Not yet measured on real hardware for every scene.
Android and iOSNot verified. The plugin's descriptor lists Win64 only, in SupportedTargetPlatforms and in every runtime module's PlatformAllowList. The mobile code (touch controls, phone UI, rendering profiles) is in the source and passes its PC-side tests, but no Android or iOS build has been compiled or run. The first Android build is blocked on the engine's Android target component not being installed on the test machine.
ConsolesNot built or certified. We have no console SDKs or devkits. The framework only prepares the ground (see below).

If you need a platform that is not Win64, you change the descriptor yourself (steps below) and take on the verification.

24.1.2 Four things every project should do

  1. Pick the quality level on a real low-end machine, or in the editor with RSE.Visual.DeckPreview 1 (it applies the Steam Deck profile, the Low scalability level and a 1280 x 800 window).
  2. Run the benchmark (RSE.Perf.Benchmark) before you ship and keep the report.
  3. Read the content budget warnings in Validate All Data. They point at meshes without LODs and textures that are too big.
  4. Switch off the systems you do not use (Project Settings → RPG Saga Engine → Features). A disabled system's subsystems are not created at all, so it costs nothing at run time.

24.1.3 Scalability and the low-end path

The player picks a quality level in Options → Quality: Low, Medium, High or Epic. On top of the engine's levels the framework supports a fallback path for weak hardware:

The Low level is meant to look like the Steam Deck. In your own project that means Low sets the resolution scale, the shadow quality, the texture quality, the effects and foliage quality to the Deck's values, so what you see on a PC at Low is what the Deck draws.

One trap: a setting written in Project Settings → Rendering has a higher priority than the scalability files. If you set Shadow Map Method to Virtual Shadow Maps there, Low and Medium cannot turn them off any more (the log says "Setting the console variable ... with 'SetByScalability' was ignored"). Leave it to the scalability levels.

24.2 How it works

24.2.1 Device profiles

Unreal picks a device profile by platform name only: a Windows build running through a compatibility layer on a Steam Deck is simply Windows. The framework therefore switches profile itself at game start, in URSEDeckProfileSubsystem (a game instance subsystem that runs in the game, not in the editor):

  1. It detects a Steam Deck from the SteamDeck=1 environment variable (Steam sets it), the -SteamDeck command-line switch, or Input → Devices → Simulate Steam Deck.
  2. If Apply Deck Profile is on and the command line has not chosen another profile, it activates the profile named in Performance → Deck Device Profile (SteamDeck, or SteamDeck_Linux for a native Linux build).
  3. The player's saved quality levels are then applied over the profile's defaults, so Options → Quality still wins.

The profile holds two kinds of values. The sg.* quality groups are defaults (priority: scalability), so the player can change them. Everything else is a hard limit of the platform (priority: device profile): Nanite off, Lumen off, Virtual Shadow Maps off, motion blur off, and so on. They stay active whatever quality the player chooses.

The plugin does not ship the Deck profile. It lives in your project's Config/DefaultDeviceProfiles.ini. A working starting point is in Troubleshooting below. Without it the log says "Device profile 'SteamDeck' not found" and nothing changes.

On a PC you can force a profile for one run with -dp=SteamDeck.

24.2.2 The Steam Deck experience

24.2.3 Preview and benchmark

RSE.Visual.DeckPreview 1 shows the look and the relative cost (draw calls, triangles, memory) on your PC. It does not show the Deck's real frame rate, because a PC GPU is several times faster. RSE.Visual.DeckPreview 0 restores your settings.

RSE.Perf.Benchmark plays a scripted run and writes a report. It needs no input and takes about three minutes with the default steps. The steps are data (Performance → Benchmark Steps): open a map, run console commands, wait, capture (with an optional camera orbit), and capture a whole battle with a time limit. It measures every frame through the engine's performance system (frame, game thread, render thread, GPU, draw calls, triangles) and takes a memory snapshot at the end of each segment. The first second of each segment (Warmup Seconds) is not counted.

RSE.Perf.Benchmark            current settings
RSE.Perf.Benchmark Deck       preview the Steam Deck first
RSE.Perf.Benchmark Quit       quit the game when finished
RSE.Perf.Benchmark Stop       stop and write what was recorded

Definitions: average FPS is frames divided by time. 1% low is 1000 divided by the mean of the slowest 1% of frame times. A hitch is a frame longer than Hitch Frame Ms (a warning, not a failure). The report goes to Saved/Perf/<timestamp>/: report.csv (one row per segment with PASS or FAIL and the reasons), frames.csv and summary.html.

24.2.4 Performance budgets

Performance → Budget (FRSEPerfBudget) holds the limits a capture is checked against. A value of 0 means not checked. The defaults are the Steam Deck budget:

LimitValue
Average FPS30 or more
1% low25 FPS or more
GPU time (average)17 ms or less
Draw calls (worst frame)1500 or less
Triangles (worst frame)2 million or less
Physical memory6 GB or less
Texture memory2 GB or less

RSE.Perf.Budget <Tier> checks any capture of yours against another budget (Default goes back to the Deck budget).

Content budgets work at edit time. Project Settings → RPG Saga Engine → Content Budgets (URSEContentBudgetSettings, editor only) defines categories (for example Character, Boss, Prop) by folder or name token, each with a maximum triangle count, a minimum LOD count, material slots, texture size and, optionally, material instruction counts. Validate All Data warns about meshes, textures and materials over their category's budget.

24.2.5 Saves, users and the app lifecycle

These are the pieces that differ between platforms. They all go through one layer you can configure.

Save backend. Every save and load goes through URSESaveSubsystem, which turns the game into bytes and hands them to a backend. Pick it in Project Settings → RPG Saga Engine → Save → Backend:

BackendUse it for
File (default)PC and Steam Deck. Our own files under Saved/SaveGames, with a checksum, a temporary file renamed over the slot and the last good save kept as a backup. Checks free disk space first (Min Free Disk Space MB).
Save Game SystemConsoles, and any platform whose rules require the platform save API. Uses the engine's ISaveGameSystem. The bytes keep the checksum, so damage is detected everywhere.
CustomA C++ class implementing IRSESaveBackend for cloud storage or a platform API the engine does not cover.

Slots, autosaves, thumbnails, the load screen and the Blueprint nodes work the same on every backend. The save screens handle No Space, Corrupt (shown as damaged, never as empty, never half-loaded), User Signed Out, Busy and Failed. Every failed save fires On Save Failed with the reason. RSE.Save.SimulateFault makes the backend fail with NoSpace, Corrupt, SignedOut or Failed so you can see each message on PC.

Platform users. URSEPlatformUserSubsystem follows the engine's platform users. The title screen's "press start" makes the user of the pressing device the primary user (Platform → Select User On Press Start). Saves are per user: the default user keeps Saved/SaveGames, others get Saved/SaveGames/User<N>. When the primary user signs out, saving stops and the game returns to the title screen (Return To Title On Sign Out). Feed your own login flow with Report User Login Changed.

Controllers and suspend. URSEAppLifecycleSubsystem pauses the game and opens a reconnect screen when the primary user's controller disconnects (Pause On Controller Disconnect). On PC and handhelds, Allow Continue Without Controller lets the player dismiss it with Confirm from another device. The game also pauses while the app is in the background and finishes save writes in flight first (Save → Suspend Flush Timeout). Replace the reconnect screen with your own Widget Blueprint derived from RSE Screen Widget, reading RSE Reconnect View Model, in Platform → Reconnect Widget Class. Pauses go through the framework's time control, so in co-op one player's disconnect never pauses everyone.

Simulate all of it on PC: RSE.Platform.SimulateDisconnect, SimulateReconnect, SimulateSignOut, SimulateSignIn, SimulateSuspend, SimulateResume, and RSE.Platform.Dump.

24.2.6 Static checks that keep the plugin portable

The automation test RSE.Plugin.PlatformApis scans the plugin's runtime modules and fails on Windows-only APIs and headers, process or URL launches, direct file access outside the save backend, hardcoded absolute paths and keyboard-only key handling. Run it after you change the plugin's source.

24.3 Key classes and assets

Class / assetModuleRole
URSEPerformanceSettingsRSEPerformance: Deck profile names, first-run frame cap, preview resolution, benchmark steps, budget.
URSEDeckProfileSubsystemRSESwitches to the Deck device profile at game start.
URSEBenchmarkSubsystemRSEThe scripted benchmark behind RSE.Perf.Benchmark.
FRSEPerfBudget, RSEPerfStatsRSE / RSECoreA budget, and the math for averages, 1% low, percentiles and reports (headless).
URSEContentBudgetSettingsRSEEditorEdit-time content budgets.
URSEInputDeviceSubsystemRSELast used device, Deck detection, prompt style.
URSEPlatformUserSubsystem, URSEAppLifecycleSubsystemRSECore / RSEPlatform users, sign-in, controller and suspend handling.
IRSESaveBackendRSECorePluggable save storage.
URSEMobileSettings, URSEMobileProfileSubsystemRSEMobile tiers and tier selection (unverified, see below).
URSETouchLayout, URSETouchInputSubsystemRSETouch controls (unverified on devices).

24.4 Settings

WhereWhat
Project Settings → RPG Saga Engine → PerformanceDeck Device Profile, Deck Linux Device Profile, Apply Deck Profile, Deck First Run Frame Rate Limit, Deck Preview Resolution, Benchmark Steps, Budget, Warmup Seconds, Uncap Frame Rate, Map Load Timeout Seconds, Report Folder, Write Frame Csv, Quit When Unattended
Project Settings → RPG Saga Engine → PlatformPause On Controller Disconnect, Allow Continue Without Controller, Select User On Press Start, Return To Title On Sign Out, Pause On Suspend, the reconnect screen texts
Project Settings → RPG Saga Engine → SaveBackend, Suspend Flush Timeout, Keep Backup, Min Free Disk Space MB, slot and autosave settings
Project Settings → RPG Saga Engine → Content BudgetsCategories and thresholds (editor only)
Project Settings → RPG Saga Engine → FeaturesSwitch whole systems off
Project Settings → RPG Saga Engine → Input → DevicesPrompt device, Simulate Steam Deck, gamepad label set

See Appendix B for every property and its default.

24.5 Blueprint usage

Most of this chapter is settings and console commands. The nodes you may reach for:

Example: show a message when saving fails.

  1. Event BeginPlay → Get Game Instance → Get Subsystem (RSE Save Subsystem).
  2. Drag from the subsystem and bind On Save Failed.
  3. In the bound event, use the Result to pick a text and call your own message box.

24.6 C++ usage

A custom save backend, for a platform's cloud storage, is a UObject class that implements IRSESaveBackend:

UCLASS()
class UMyCloudSaveBackend : public UObject, public IRSESaveBackend
{
    GENERATED_BODY()
public:
    virtual FName GetBackendName() const override { return TEXT("MyCloud"); }
    virtual ERSESaveBackendStatus WriteSlot(const FRSESaveUser& User, const FString& SlotName, const TArray<uint8>& Payload) override;
    virtual ERSESaveBackendStatus ReadSlot(const FRSESaveUser& User, const FString& SlotName, TArray<uint8>& OutPayload) override;
    virtual bool SlotExists(const FRSESaveUser& User, const FString& SlotName) override;
    virtual bool DeleteSlot(const FRSESaveUser& User, const FString& SlotName) override;
    virtual void GetSlotNames(const FRSESaveUser& User, TArray<FString>& OutSlots) override;
};

Set Save → Backend to Custom and pick the class in Custom Backend Class. The synchronous calls may run on worker threads, so the implementation must be thread-safe. Override WriteSlotAsync, ReadSlotAsync and Flush when the platform has its own asynchronous path. The save subsystem adds the checksum, the metadata and the screens' messages, so a backend only moves bytes.

Branch on the platform in your own code with the engine's usual macros and the framework's device queries (URSEInputDeviceSubsystem::IsSteamDeck()), not with Windows-only calls. Keep file access inside the save backend so the static check stays green.

24.7 Advanced

24.7.1 Mobile (not verified)

The mobile work is split in three parts. All of it is untested on a phone.

What is missing: a compiled Android or iOS build, real frame times, thermals, memory, tier detection on real GPUs, and the feel of every touch threshold. To try it in a working copy, add "Android" (and "IOS") to SupportedTargetPlatforms and to the PlatformAllowList of the runtime modules (RSECore, RSE, RSEOnline, RSENet, RSEGAS, RSEStateTree, RSECommonUI) in RPGSagaEngine.uplugin. Editor modules stay Win64. Install the engine's Android target component first (Epic Games Launcher, the engine's Options → Target Platforms), and keep SDK paths out of the project: they are machine settings. A phone build also needs Android or iOS project settings (arm64, Vulkan, ASTC textures, mobile forward shading). Treat the first result as a starting point and expect to fix things.

24.7.2 Consoles

The framework prepares what it can without an SDK: the save backends above, platform users, controller disconnect and suspend, gamepad-only play (verified screen by screen), an action bar through the optional Common UI plugin, and a static scan for non-portable code. What it did not do: build, run or certify on any console, safe-area checks on console hardware, platform glyph sets and strings, achievements and activities.

For a console release you need the platform SDK, the engine's platform extension and a devkit. Set Save → Backend to Save Game System (or your custom backend), feed sign-in changes from your platform login if the engine's event is not enough, add your platform's button glyphs and required strings, and run the platform holder's own certification checklist. The descriptor's PlatformAllowList must also list the platform.

24.7.3 Controller-only play

Every screen and flow was checked for use with a gamepad alone: focus on open, D-pad and stick navigation, confirm and back, tab switching with the shoulder buttons, scrolling, drag-and-drop alternatives and no dead ends. Three automated checks keep it true: RSE.UI.Navigation.* (drives each screen with synthetic gamepad key events), RSE.Input.GamepadCoverage (fails when an input action or a key list has no gamepad key) and RSE.CommonUI.ActionBarBindings (screens bind their actions for the Common UI action bar). The per-screen report is docs/product/controller-report.md.

24.7.4 Performance habits

24.8 Troubleshooting

SymptomCause and fix
The game does not use the Steam Deck settingsThe profile is missing from your project, so the log says "Device profile 'SteamDeck' not found". Add it to Config/DefaultDeviceProfiles.ini (example below). The Deck is detected from SteamDeck=1, -SteamDeck or Simulate Steam Deck. -dp=SteamDeck forces it from the start on any PC.
Text is too small on the DeckBuilt-in screens never go below UI Theme → Minimum Font Size. In your own widgets use the theme fonts.
Meshes look blocky on the DeckNanite is off in the Deck profile, so meshes draw fallback or classic LODs. Give them LODs. The content budget warnings point at the worst offenders.
Low quality still shows Virtual Shadow MapsProject Settings → Rendering → Shadow Map Method is set to Virtual Shadow Maps. It overrides scalability. Put it back to the default.
The Tactics grid is missing on a forward or mobile rendererThe default Grid Visual Mode is a decal that needs the deferred renderer. Set it to Tiles in Tactics Zone settings.
Saving fails on a disk that is nearly fullMin Free Disk Space MB. Free space or lower it. The previous save stays.
A save slot shows as damagedThe checksum failed and there is no readable backup. It is shown as damaged on purpose, never as empty. Keep Keep Backup on.
The reconnect screen never goes away on a handheldAllow Continue Without Controller is off, so the prompt waits for a controller (console behaviour).
An Android or iOS build failsThe descriptor allows Win64 only. See the mobile steps above.

A starting Steam Deck profile for your Config/DefaultDeviceProfiles.ini:

[DeviceProfiles]
+DeviceProfileNameAndTypes=SteamDeck,Windows

[SteamDeck DeviceProfile]
DeviceType=Windows
BaseProfileName=Windows
; default quality (the player's Options still win)
+CVars=sg.ResolutionQuality=70
+CVars=sg.ShadowQuality=0
+CVars=sg.PostProcessQuality=0
+CVars=sg.EffectsQuality=0
+CVars=sg.FoliageQuality=0
; hard limits of the Deck
+CVars=r.Nanite=0
+CVars=r.Lumen.DiffuseIndirect.Allow=0
+CVars=r.Lumen.Reflections.Allow=0
+CVars=r.Shadow.Virtual.Enable=0
+CVars=r.AntiAliasingMethod=4
+CVars=r.MotionBlurQuality=0
+CVars=RSE.Dialog.LivePortraits=0

24.9 See also

25. Localization

In short: RPG Saga Engine ships in English only. Every text goes through Unreal's localization system, so any language can be added. The Translate with AI tool exports the texts for an AI assistant, checks what comes back, merges the good translations and compiles the language. You add as many languages as you want, and the player picks one in the options.

25.1 Basics

25.1.1 What is covered

All text that goes through the plugin is localizable:

Texts of your own systems outside the plugin use the same engine localization. The engine's Localization Dashboard still works for them.

The vocabulary of your game ("Party", "Magic", "Lv") comes from Game Terms (Project Settings → RPG Saga Engine → Game Terms), which the foundation writes. Translate the terms like any other text. A screen text of your own that should follow the terms uses the argument {Term.<Id>} (for example {Term.Party}) instead of a fixed word.

25.1.2 The workflow in one picture

Choose target + culture -> 1. Export for AI -> (paste into an AI chat) -> 2. Import -> 3. Compile
StepWhat happensWhere the files go
GatherThe engine's text gatherer collects every text of source and assets into the target's manifest and .po files. Once, and again after content changes.Config/Localization/<Target>_Gather.ini
ExportThe texts (by default only those without a translation) are written in chunks of AI size, with a ready prompt and a glossary of your content names.Saved/Translate/<Target>/<culture>/
TranslateYou paste the prompt and then one chunk at a time into any AI chat and save each answer..../<culture>/Translated/
ImportEvery entry is validated. The good ones are merged into <culture>/<Target>.po. A readable report lists the rest..../<culture>/Report.md
CompileThe engine's import and compile steps turn the .po into .archive and .locres files the game loads.Content/Localization/<Target>/<culture>/

25.1.3 Your first language, step by step

Open RPG Saga Studio (or the Configurator) and go to Tools → Content Import. Scroll to Languages (Translate with AI).

  1. Choose the target. The list holds your project's targets and the plugin's (RPGSagaEngine). Your own target is the default. If your project has none, press Create target. It writes the four gather configs (Config/Localization/Game_Gather.ini and its Export, Import and Compile partners). The name, the source culture and the folders it gathers assets from are in Project Settings → RPG Saga Engine → Translate with AI.
  2. Gather texts. The button collects the target's texts. It runs in a separate editor process because it loads your assets. Skip it for the plugin's own target: its English texts are already gathered.
  3. Type the culture code: ro, de, fr, es, pt-BR, ja.
  4. 1. Export for AI, then Open pack folder. The folder holds:
    • PROMPT.md: the instructions for the AI;
    • Chunk_001.json, Chunk_002.json, and so on: the texts, a few thousand characters per file. Each entry has its id, the source text, where it is used, a length limit, the placeholders and the plural categories the language needs;
    • Glossary.csv: the names of your content, so the AI uses them consistently;
    • Pack.json: what the import checks the answers against; Translated/: where the answers go.
  5. Translate. In an AI chat that handles long text:
    1. paste PROMPT.md as the first message;
    2. paste Chunk_001.json as the second message. The answer is the same JSON with the translation fields filled in;
    3. save the answer as Translated/Chunk_001.json (code fences from the chat are ignored);
    4. repeat for each chunk. Open a new chat, or paste the prompt again, if the assistant starts to drift or shorten.
  6. 2. Import. Leave Answers empty to read the Translated folder, or pick files. The report shows every problem with its id and text. Validate only checks without writing anything.
  7. Fix. With problems, open Report.md. The entries that need another pass are in Retry.json. Paste it into the same chat with the prompt and import the new answer. Importing again is safe: good entries stay.
  8. 3. Compile. The .locres is written, and the culture is added to Project Settings → Packaging → Localizations to Package and to the options menu. Test it in the editor with the console command RSE.Language ro.

Do the same once for the plugin's own target (RPGSagaEngine) to translate the built-in screens and messages. It is a separate target with its own culture folder, which the tool creates.

25.1.4 How the player picks a language

The game starts in the project's default language, English unless you change Options → Default Language. The player chooses a language in Options → Game → Language, or you pass -culture=xx on the command line. The list shows every culture compiled for any target (the plugin's, your project's, yours), each by its native name ("Français"). Project Settings → RPG Saga Engine → Options → Languages is an optional allow-list: empty means all compiled cultures. Switching language changes the plugin's texts and your content's texts together. The choice is saved with the other options.

25.2 How it works

25.2.1 The prompt

PROMPT.md is generated for your project and culture. In short it tells the AI:

For a language that needs more plural forms (some need one, few, other, others one, few, many, other, Arabic needs six), the prompt and each entry say which categories are required, and the import rejects a text that lacks one.

25.2.2 What the import checks

CheckResult
Placeholders and markup: the same set as the source (order may change)error
Plural blocks: same count, same argument, every category the language needserror if missing, warning if extra
Ids: an id the target does not have; two different answers for one idwarning (extra), error (duplicate)
Ids a chunk had to return and did noterror
Encoding: replacement characters, byte order marks, control characters, UTF-8 read as another encodingerror
Length: longer than the entry's limitwarning (a setting)
Looks untranslated: identical to a source with real wordswarning (a setting)
Leading or trailing spaces that differ from the sourcewarning (a setting)
A do-not-translate term that disappearedwarning
Empty translationwarning, and the text stays untranslated

What happens to entries with errors is the Invalid Policy setting:

The compile step also rejects malformed {Argument} patterns, so a broken placeholder never reaches the game. The checks guard the structure, not the quality of the prose. Review the first chunks yourself or with a native speaker.

25.2.3 Formats

The import reads all three whatever the export format was.

25.3 Key classes and assets

Class / assetModuleRole
URSETranslateSettingsRSEEditorProject Settings → RPG Saga Engine → Translate with AI. All the options below.
URSETranslateLibraryRSEEditorBlueprint and Python functions for every step.
URSETranslateCommandletRSEEditorThe -run=RSETranslate command line for CI.
RPGSagaEngine targetpluginThe plugin's own localization target (Config/Localization/RPGSagaEngine_*.ini).
Game targetyour projectYour content's target, made by Create target.
Game TermsRSECoreThe vocabulary used on every screen.

There are no data assets to create. Translations are the engine's .po, .archive and .locres files.

25.4 Settings

Project Settings → RPG Saga Engine → Translate with AI (saved in Config/DefaultEditor.ini):

At run time, Project Settings → RPG Saga Engine → Options has Default Language (en) and the Languages allow-list. See Appendix B for every property.

25.5 Blueprint usage

The translation steps are editor-only functions in RPG Saga Engine|Translate, meant for Editor Utility Blueprints and Python: Get Targets, Get Default Target, Create Target, Gather, Export For AI, Import From AI, Compile and Get Translated Fraction. Each returns a result with success, a summary and the error and warning counts.

An Editor Utility Widget that translates a language end to end:

  1. Add a text box for the culture and a button.
  2. On the button: Get Default Target → Export For AI (Target, Culture).
  3. After the answers are saved (a second button): Import From AI (Target, Culture, an empty file list, Validate Only false) → check Success → Compile.
  4. Show Get Translated Fraction as a progress bar.

In a running game, switch language with the engine's own nodes (for example Set Current Culture), or let the player use the options menu.

25.6 C++ usage

Use LOCTEXT or NSLOCTEXT for every player-facing string, and FText::Format with named arguments, so the gatherer finds them and translators can reorder words:

#define LOCTEXT_NAMESPACE "MyGame.Reputation"
FText Msg = FText::Format(LOCTEXT("Praised", "{Town} thinks highly of you. Standing: {Points}"),
    FText::FromName(TownName), FText::AsNumber(Points));
#undef LOCTEXT_NAMESPACE

Never build sentences by joining strings. Use a plural block for counts, {N}|plural(one=card,other=cards). For the game's own vocabulary, format a pattern with RSEGameTerms::Format so {Term.<Id>} arguments are filled.

The same steps from the command line, for build machines:

UnrealEditor-Cmd Project.uproject -run=RSETranslate -List
UnrealEditor-Cmd Project.uproject -run=RSETranslate -Target=Game -Gather
UnrealEditor-Cmd Project.uproject -run=RSETranslate -Target=Game -Culture=ro -Export [-Format=json|csv|po] [-All] [-Out=<dir>]
UnrealEditor-Cmd Project.uproject -run=RSETranslate -Target=Game -Culture=ro -Import [-File=<file|dir>[+...]] [-ValidateOnly] [-Policy=reject|skip|keep]
UnrealEditor-Cmd Project.uproject -run=RSETranslate -Target=Game -Culture=ro -Compile
UnrealEditor-Cmd Project.uproject -run=RSETranslate -CreateTarget=Game -Native=en

Steps run in the order Gather, Export, Import, Compile. The exit code is 0 when no step reported an error (a validation error of an import counts), so a pipeline can run -Import -Policy=reject on a pull request that brings translations.

From Python:

import unreal
lib = unreal.RSETranslateLibrary
print(lib.get_targets())
lib.gather("Game")
r = lib.export_for_ai("Game", "ro")              # r.folder, r.num_entries
r = lib.import_from_ai("Game", "ro", [], False)  # [] = the Translated folder; True = validate only
print(r.summary, r.report_path)
r = lib.compile("Game", "ro")

25.7 Advanced

25.8 Troubleshooting

SymptomCause and fix
The game shows English although I chose another languageThe game starts in English until the player picks a language (or you pass -culture=xx). The list offers only cultures with a compiled translation. Packaged games need the culture in Packaging → Localizations to Package. In the editor, RSE.Language <culture> switches while you play.
Editor or menu texts are English onlyThe plugin ships in English. Translate its own target, RPGSagaEngine, with Translate with AI.
A screen shows the wrong word for "Party", "Magic" or "Lv"The vocabulary comes from Game Terms. A screen text typed as a fixed word does not follow the terms. Use {Term.<Id>}.
The import refused my fileRead Report.md: each problem has its id and text. A missing placeholder or plural category is an error. Paste Retry.json into the chat and import the new answer.
The compile failedA broken {Placeholder} pattern. Run the import with Validate only and fix the listed entries.
Gather finds nothing for my projectRun Create target first, and check the asset folders in Translate with AI → Target. Gather loads assets in a separate editor process.
The translation looks cut offThe text is longer than the entry's limit. Raise Max Length Factor, or shorten the text. The warning shows the limit.
Special characters look brokenThe answer was saved with the wrong encoding. Save it as UTF-8. The import reports replacement characters and mis-read UTF-8 as errors.

25.9 See also

26. Editor tools

In short: you build a game with RPG Saga Engine in the editor, not in code. RPG Saga Studio is the front door, the Configurator holds every setting, the Create New wizards and visual editors make content, Content Import reads spreadsheets, and a set of testing tools (battle simulator, Balance My Campaign, test rooms, the battle launcher) keep the game honest. This chapter is the map of all of them.

26.1 Basics

26.1.1 The menu

The RPG Saga Engine menu in the editor's menu bar is short on purpose:

EntryWhat it opens
StudioRPG Saga Studio, also a button on the level editor toolbar
ConfiguratorEvery setting, grouped and searchable
Validate All DataA check of every setting and data asset. Results go to the Message Log (RPG Saga Engine Validation)
HelpGuides and the documentation
Advanced toolsEvery other tool, in sections: Project Setup, Content, World, Balance, Check and Help

Some tools appear only where they apply. The Encounter Layout toolbar button shows when a Tactics zone or an ATB stage is selected. Populate Zone Here shows when you right-click something in the viewport. Character actions show on Character assets. To see everything everywhere, tick Show advanced tools everywhere in the Studio.

First step for almost any problem: run Validate All Data and read the Message Log. It names the asset that is wrong.

26.1.2 RPG Saga Studio

The Studio is the table of contents of your game. One window shows every step, organized in four layers from the bottom up:

LayerWhat it holdsCards
1. Game foundationThe rules everything builds on: names, stats, elements, battle modes.Configure the foundation, Set up the project, Change the preset, All settings (the Configurator)
2. ArchetypesTemplates you make content from.New class, New enemy type, New NPC type, Archetype library
3. ContentWhat players meet.New character, New enemy, New ability, New item, New dialog, New quest
4. WorldWhere it all happens.New battle zone, Populate a zone, Save point, Generate the map, New battle, New action battle

A green First steps panel at the top lists nine steps for a new project and ticks them by itself as the project shows they are done: install the mannequin, choose a foundation, choose a UI style, play the starter slice, create a character, create a battle, scan an asset pack for interiors, translate with AI, and read the Getting Started guide.

Start at any layer. The starter set already fills the layers below.

Explanations. The switch in the Studio's top right corner sets how much help you see: Beginner (the default, a "Why it matters" panel on every page), Normal (tooltips and ? buttons) or Expert (bare fields). The help texts live in a data table (Studio → Help Table), so you can rewrite them for your team or translate them.

Your first character. Content → New character is a wizard of seven steps with a live 3D preview: who it is (Hero, Recruitable unit or Enemy), what to start from (an archetype is recommended), how it looks, which class, what it can do, where it appears, and a summary. Create stays disabled until every problem is fixed, and the reason is written at the bottom of the window. At the end press Test in battle: a notification shows the win rate of a few simulated battles, with a link to the full report. No level needed.

Archetypes. Content made from an archetype follows it: every field you did not change comes from the archetype. An inherited field is greyed with from archetype X, and a field you changed has Reset to archetype. When you save an archetype that content follows, a notification offers Review changes: an update list shows each asset and what would change, with your own values marked as kept. Nothing changes by itself.

Plugin templates. Everything shipped under /RPGSagaEngine is a template. The Studio never edits it in place, because a plugin update would replace your changes. Press Create a copy in the project and the copy goes next to your asset and your asset switches to it. The Studio's wizards always create assets in your project folders.

Character sheets and asset sheets. Double-clicking a Character, Ability, Item or Archetype opens a sheet: header, buttons (Test in battle, Add to party, Make recruitable, Make enemy), tabs, Simple / Advanced, and a ? by each field. Right-click an asset for RPG Saga: Open Sheet or RPG Saga: Open Generic Editor. The generic editor is always there.

26.1.3 The Configurator

One window with every setting of the framework. It replaces navigating the Project Settings sections one by one.

A rules profile is a data asset that overrides some rules (battle, grid, AI and so on) for one zone, battle or boss, or for the whole game. Create one with New profile, add overrides section by section, and set a default. A profile with a parent inherits everything it does not override.

26.1.4 Create New wizards

A wizard is a short form that makes a valid, ready-to-use data asset in your project. Open one from the Content Browser (right-click a folder, RPG Saga, then the type), from Advanced tools → Create New, or from Configurator → Tools → Create New.

WizardCreatesYou choose
ClassA character classan existing class tag or a new one, allowed equipment
CharacterA party character or an enemykind, class, starting level
AbilityA battle ability, from a template (melee strike, area spell, heal, buff, debuff, summon, knockback, drain, ground zone, multi-hit, chain, dash, shield, taunt, teleport, revive)element, power, cost, range
ItemA consumable, equipment piece or key itemdescription, price, slot and type
EncounterA battlebattle mode, enemies, level mode, flee
QuestA questcategory, first stage and objective, success text
DialogA dialogpresentation, speaker, first line
ShopA shopgreeting, stock, whether it buys
PactA Pact (summon)description, summoned unit, summon ability

The name is the asset's id (letters, digits, underscores). The folder is proposed from Content Import → Types, so wizards and the importer agree on where content lives. New assets can only go into your project's content, not the engine or the plugin. Create checks the asset with the same validation as saving, and if anything fails nothing is left behind.

26.1.5 New RPG Project

Advanced tools → New RPG Project... (or the Studio card Set up the project) prepares a project in one step. You choose a content root, a genre preset (JRPG with ATB, turn-based by rounds, turn-based timeline, Tactics only, or Hybrid), a UI theme and visual style, game modes and input contexts, languages, the maps to create, a starter party and optional starter content, and whether to install the mannequin kit. The right side shows the plan: every asset it will create and every setting it will change. Apply creates the starter party, a dialog, battles, a main menu map and a first map, then writes the project settings into your Config/Default*.ini files. Nothing is written into the plugin.

26.1.6 Visual dialog and quest editors

Double-click a Dialog or Quest asset.

Node positions and comments are saved as editor-only data. They never change how the dialog plays and are not in cooked builds.

26.1.7 Character actions

Three one-click actions on a Character asset, from its right-click menu (RPG Saga: Character Actions), the sheet or the generic editor:

ActionWhat it does
Add to Starting PartyThe character joins when a new game starts. Running it twice changes nothing.
Make RecruitableCreates a short "Join us?" dialog, a story flag and an NPC in front of the camera.
Make EnemyCreates an encounter with a small group of the character, and places a spawner or a battle zone with its trigger.

Undo removes what was placed in the level. A second run makes new assets with a free name and never overwrites yours.

26.2 How it works

26.2.1 Content Import: spreadsheets in, data assets out

Write content in spreadsheets (CSV) or JSON, and import it. The pipeline creates or updates the data assets, never deletes anything, and an export followed by an import changes nothing.

Open Configurator → Tools → Content Import:

  1. Choose the Sources: a folder, or files separated by ;.
  2. Press Dry run. The report lists every asset that would be created or updated, field by field, and every problem with its file, line and column.
  3. Fix the sheets, and run the dry run again until it shows no errors.
  4. Press Apply and confirm.

File rules: one sheet per type, named after the type (Abilities.csv, Classes.csv); UTF-8; the separator is detected from the first row; the first row is the header and the Id column is required; lines starting with # are comments; long lists go in child sheets (Classes.Abilities.csv, Shops.Stock.csv, Encounters.Enemies.csv, Quests.Stages.csv). Dialogs are written as screenplays (<Id>.dialog.txt). Export, Write templates and Write example produce a starting point.

The same from the command line, for example in a build pipeline:

UnrealEditor-Cmd MyGame.uproject -run=RSEContentImport -Source=<folder> -DryRun
UnrealEditor-Cmd MyGame.uproject -run=RSEContentImport -Source=<folder>
UnrealEditor-Cmd MyGame.uproject -run=RSEContentImport -Export=<folder> [-Format=csv|json|bundle]

The exit code is 0 only with no errors.

26.2.2 The AI workflow

Because all content is data, an AI assistant can write it. Export AI pack writes, from your project, one folder per content type with a PROMPT.md (the task, the exact output format, every column, the valid values from your project, your balance ranges, real examples and a self-check list), an empty template CSV and a strict JSON schema. Four extra packs cover Translate, Balance, Campaign and Logic review.

  1. Export AI pack, then Open AI pack folder.
  2. Open Abilities/PROMPT.md, write your request under Your request, paste the whole prompt into an AI chat.
  3. Save the answer as Abilities.csv in an empty folder. (Several sheets in one answer are separated by === FILE: Quests.csv lines; save it as one .txt file.)
  4. Dry run, read the report, fix with Copy fix prompt if needed (it lists the errors and quotes the bad rows), then Apply.

Nothing reaches your project until you press Apply. New gameplay tags are allowed only under the roots in New Tag Roots (story flags, class, status and so on). Elsewhere an unknown tag stays an error, because those tags mean something to the engine. See Localization for the Translate pack.

26.2.3 Battle simulator

The battle simulator plays battles with no graphics and no level, AI against AI, in a fraction of a second. Test in battle on a sheet, the Estimated difficulty step of New battle and How hard is it? in New enemy all use it. It is also in Configurator → Tools → Battle Simulator, and from the command line: -run=RSEBattleSim -Scenario=<file.json> [-Out=<dir>] [-Runs=N].

Select a Tactics Zone (with a baked grid) or an ATB Stage, then press the Encounter Layout toolbar button. The mode lets you add enemies from a palette, move them, paint deployment tiles and drop field objects directly in the level, with an Issues list that checks the layout after every edit. Keys: E / Q rotate, Delete removes, R moves an enemy to the other row, Esc returns to Select, Ctrl+Z / Ctrl+Y undo and redo (a whole brush stroke is one step). For Action encounters the mode draws the combat area around the encounter trigger.

Drag a Character asset into a level to get a Character Preview: its look, idle animation, and its class, stats at a preview level and abilities in Details. Convert to NPC turns it into a talkable NPC.

A Gallery map shows everything your project contains, row by row. The plugin does not ship one. Build your own with unreal.RSEGalleryBuilder.build_gallery_map("/Game/MyGame/Maps/L_Gallery") or the Build Gallery Map Editor Utility function.

26.2.5 Balance My Campaign

Checks a whole campaign's difficulty in one click. It plays every encounter of every progression zone with the simulator, flags what is off, proposes the smallest data changes that fix it, verifies each proposal, and applies the ones you tick as one undoable step.

  1. You need a campaign asset (RSECampaignProgressionData, the one the Progression Designer uses): zones in order, each with its encounter pool and key encounters, target levels, and the standard party. Optional Alternative Parties test other compositions.
  2. Advanced tools → Balance My Campaign... → pick the campaign → Run.
  3. Read the flags and the proposals, tick the ones you want, press Apply selected. Save the changed assets when you are happy. Edit → Undo reverts the whole apply.

What it flags: too easy or too hard (win rate outside the band of the encounter's kind: normal, elite, key, boss, ultra), too long or too short, timeouts (stalemates), one-shots, ability cliffs (an enemy class learns an ability inside a zone's level range), class outliers, and boring or grindy zones. It never touches assets with Balance Locked ticked, the party's own characters, enemies shared with encounters outside the campaign, or classes outside the standard set, unless you allow it. The same data, options and seed always give the same result. Every run writes Saved/Balance/<date-time>_<campaign>/report.md and report.json. Bands and step sizes are in Project Settings → RPG Saga Engine → Balance.

From the command line:

UnrealEditor-Cmd MyGame.uproject -run=RSEBalanceCampaign -Campaign=/Game/MyRPG/Data/Progression/DA_Campaign_Main
    [-Analyze] [-NoIterate] [-Iterations=3] [-Runs=40] [-Seed=6800] [-Apply] [-FailOnFlags]

-FailOnFlags exits with code 2 while the standard party still has flags: a gate for "the campaign stays balanced".

26.2.6 Test rooms and the battle launcher

A test room is a small map that exercises one area of the framework, with a smoke test that plays it and fails when something does not happen. Rooms are data assets of type RSE Test Room Definition (DA_Room_<Name>): Room Id, Map, Description, Smoke Script, Timeout Seconds, Presets and Needs Network. The plugin ships rooms for interactions, traversal, interiors and the Action arena, under /RPGSagaEngine/Examples/TestRooms.

The battle launcher (F10 in a running game, or RSE.Rooms.Launcher) starts any encounter in any mode with a chosen party, rules profile, AI intelligence and seed, with Restart same seed, Restart new seed and Auto-play. It is a development tool and is not in Shipping builds. In Blueprint use Start Battle, Restart Battle and Set Auto Play on the RSE Battle Launcher Subsystem.

26.2.7 The controller report

docs/product/controller-report.md is a screen-by-screen audit of gamepad-only play: front end, menus, battle modes, exploration. Each screen is marked Pass (test), Pass (review), Fixed or By design. It is kept true by automated tests (RSE.UI.Navigation.*, RSE.Input.GamepadCoverage, RSE.CommonUI.ActionBarBindings). Use it as a checklist when you add a screen of your own: focus on open, D-pad and stick navigation, confirm, back, tab switching, scrolling, and no pointer-only actions. See Platforms and performance.

26.3 Key classes and assets

Class / assetModuleRole
URSEStudioSettingsRSEEditorStudio: help table, Learn links, recent assets, template checks, test battle, role fields, preview, difficulty estimate
URSEWizardSettingsRSEEditorWizards: the templates every wizard starts from, default teams and enemies, genre and theme presets
URSEContentImportSettingsRSEEditorContent Import: folder of each content type, new tag roots, new tag source, forbidden terms, AI pack folder
URSECharacterActionsSettingsRSEEditorCharacter Actions: starting party limit, placement, the recruit story flag, default dialog lines
URSEGraphEditorSettingsRSEEditorVisual Editors: layout spacing, node colors, Play from Here delay
URSELevelToolsSettingsRSEEditorLevel Tools: Encounter Layout keys, Gallery
URSEBalanceSettingsRSECoreBalance: bands, party levels, turn bands, step sizes, iterations
URSEBalanceLibraryRSEEditorBalance Campaign, Analyze Campaign, Apply Balance Changes, Get Balance Summary, Write Balance Report
URSETestRoomDefinitionRSECoreA test room: map plus smoke script
URSEBattleLauncherSubsystemRSEThe battle launcher
URSERulesProfileRSECoreA rules profile asset
URSECampaignProgressionDataRSECoreA campaign: zones, encounters, target levels and the standard party

Commandlets in RSEEditor: RSEContentImport, RSEBalanceCampaign, RSEBattleSim, RSETranslate, RSENewProject, RSEMapGenerate, RSEWorldTools, RSEPortraitStudio, RSECharacterPack, RSEKitScan, RSECinematic and the progression commandlet. End a command line with QUIT_EDITOR when using -ExecCmds.

26.4 Settings

WhereWhat
Project Settings → RPG Saga Engine → Studiohelp table, Learn links, recent assets, plugin template checks, the test battle, enemy-only class tags, Role Fields, the Preview, the difficulty estimate, the archetype save prompt
Editor Preferences → Plugins → RPG Saga Studio (per user)explanation level, open at startup, show advanced tools everywhere, sheets on double click, Simple / Advanced
Project Settings → RPG Saga Engine → Wizardswizard templates, ability template list, default teams and enemies, first-stage ids of a new quest, default shop stock, genre and theme presets
Project Settings → RPG Saga Engine → Content ImportTypes (folders), New Tag Roots, New Tag Source, Forbidden Terms, the AI pack folder
Project Settings → RPG Saga Engine → Character Actionsstarting party limit, placement distance, Outliner folders, the story flag parent tag, recruit dialog lines
Project Settings → RPG Saga Engine → Visual Editorslayout, node colors, previews, validation while editing
Project Settings → RPG Saga Engine → Level ToolsEncounter Layout keys, Gallery content root and spacing
Project Settings → RPG Saga Engine → Balancewin-rate bands, party levels, turn bands, battles per scenario, seed, step sizes

See Appendix B for every property and default.

26.5 Blueprint usage

The editor tools are also nodes, for Editor Utility Blueprints and Python. Categories under RPG Saga:

Example: balance every night from an Editor Utility Blueprint.

  1. Get Asset the campaign and make an RSE Balance Options struct (tick Iterate).
  2. Analyze Campaign (Campaign, Options) → keep the RSE Balance Result.
  3. Get Balance Summary → print it.
  4. Write Balance Report (Result, an empty directory uses the default folder).

The same in Python:

import unreal
campaign = unreal.load_asset('/Game/MyRPG/Data/Progression/DA_Campaign_Main')
options = unreal.RSEBalanceOptions()
options.iterate = True
result = unreal.RSEBalanceLibrary.balance_campaign(campaign, options)
print(unreal.RSEBalanceLibrary.get_balance_summary(result))
unreal.RSEBalanceLibrary.apply_balance_changes(result)   # one undoable transaction

These calls block until the run ends. The window runs the same job in small time slices, so the editor stays usable.

26.6 C++ usage

Editor code lives in RSEEditor, which depends on RSECore and RSE. To add your own tool, put a module of type Editor in your project, depend on RSEEditor only if you need its helpers, and register your own menu entries with the engine's UToolMenus. A new settings class appears in the Configurator without further work:

UCLASS(Config = Game, DefaultConfig, meta = (DisplayName = "My System"))
class UMySystemSettings : public URSEDeveloperSettings
{
    GENERATED_BODY()
public:
    UPROPERTY(Config, EditAnywhere, meta = (ClampMin = "0")) float Radius = 500.f;
#if WITH_EDITOR
    virtual EDataValidationResult IsDataValid(FDataValidationContext& Context) const override;
#endif
};

The class comment becomes the description in the Configurator. Until you put the class in a group (Project Settings → Editor → RPG Saga Engine Configurator → Groups) it sits under Other. The test RSE.Editor.Configurator.EveryClassHasGroup fails for a class with no group. See Extending the plugin.

26.7 Advanced

26.8 Troubleshooting

SymptomCause and fix
The Studio does not open at startupDon't show at startup is ticked, or the editor was started with -NoRSEStudio. Open it from RPG Saga Engine → Studio.
A tool is missing from the menuIt moved to Advanced tools or shows only in context. Tick Show advanced tools everywhere.
Create stays disabledThe reason is written at the bottom of the wizard: usually a missing or taken name, or a folder inside the plugin.
A field is read-only on a sheetIt belongs to a plugin template. Press Create a copy in the project.
World cards do nothingThey work on the open level. Open or create a level first.
"Folder is not scanned by the Asset Manager"Tick Register folder with the Asset Manager, or add the folder in Project Settings → Asset Manager.
"Starting party is full"Choose Instead of a starting hero, raise Starting Reserve Places, or remove someone from Party → Starting Members.
The Encounter Layout button is missingIt shows only while a Tactics Zone or ATB Stage is selected. Use the menu entry, or show advanced tools everywhere.
"Zone without a baked grid"Select the Tactics Zone and press Bake Grid.
The dry run shows an unknown tag errorThe tag is outside New Tag Roots. Add it in your foundation or Project Settings first, or use one of the listed values.
The AI answer has explanations around the tableOnly the file content is read. Delete the extra lines, or paste Copy fix prompt back into the chat.
Balance proposes nothing for an enemyIt is shared with encounters outside the campaign or with the party's classes. Allow shared content, or make a separate enemy.
Win rates differ from playingThe rates come from AI-versus-AI battles without the player's items. Treat the bands as relative targets.

26.9 See also

27. Extending the plugin

In short: most extensions need no C++. Conditions, effects, ability effects, AI scorers, interactable objects, menu entries, screens and command handlers can all be written in Blueprint and show up in the editor's lists. When you do write C++, follow the plugin's rules: logic in a module with no presentation, content in data assets, rules in settings, state that can be saved and replicated.

27.1 Basics

27.1.1 Pick the lightest tool

Work down this list and stop at the first one that does the job.

  1. Data. A new ability, item, enemy, quest or dialog is a data asset, a spreadsheet row or a Studio wizard. See Editor tools.
  2. A setting or a rules profile. A different number or rule for one zone or boss is a setting override in a rules profile, not code.
  3. A Blueprint extension class. A condition, effect, scorer, reaction, interactable, menu entry, screen or command handler written as a Blueprint class. It appears in the same dropdowns as the built-in ones.
  4. A C++ subclass of the same extension classes, when you need speed or access the Blueprint graph cannot give.
  5. A new system in your own module, built the plugin way (below).
  6. A change to the plugin's source, only for things like a new battle mode. It is a bigger commitment, because you then own the merge with every update.

27.1.2 The Blueprint-only workflow

This is the step list for a condition. The other extension classes work the same way.

A condition: "it is night".

  1. In the Content Browser: Add → Blueprint Class → All Classes, search for RSECondition_Custom (its display name is Custom (Blueprint), which every custom base shares, so search by the class name), and name it BP_Condition_IsNight.
  2. Open it. In Class Defaults, set Label to Is night (it shows in logs and debug tools).
  3. In My Blueprint → Functions → Override, choose Is Condition Met. The Context input is a handle to the game state.
  4. Build the graph: Context → Is Flag Set (Context) (the flag, for example your own Narrative.Flag.Night) → Return Node. The Context nodes live under RPG Saga|Narrative|Context.
  5. Compile and save. The condition does not change the game: it must only read.
  6. In any conditions list (a dialog branch, a quest transition, a puzzle, an interaction, a shop) click +, and pick Custom (Blueprint), then your class. It now behaves like a built-in condition.

An effect: "heal the party and play a sound".

  1. Add → Blueprint Class → All Classes, search for RSEWorldEffect_Custom, and name it BP_Effect_HealParty.
  2. Add editable variables (Instance Editable) for the numbers, so designers tune them on the instance.
  3. Override On Execute. Use the Context nodes (for example Modify Member Resource (Context)) so the change is reported to quests and the HUD, like built-in effects.
  4. List it in any effects list. It runs in order with the others, and the Only If gate works.

A command handler (co-op ready). See Co-op and online: a child of RSE Command Handler, a Command Type, and the class listed in Project Settings → RPG Saga Engine → Commands → Handler Classes.

An interactable: a lever. A Blueprint child of RSE Interactable Actor with On Interact is interactable even without data. In it, flip a story flag, play a sound and refresh the door it controls.

A menu entry. A Blueprint child of RSE Menu Extension: set Id, Point, Label, Order, implement Is Visible, Is Enabled and Execute (which returns what the menu does next), and list the class in Game Flow → Menu Extensions.

A screen. A Widget Blueprint derived from RSE Screen Widget that reads the screen's view model. Set it in the settings of that screen. See User interface.

27.2 How it works

27.2.1 The module layers

The plugin separates logic from presentation with modules, and the compiler enforces it.

ModuleTypeHoldsMay depend on
RSECoreRuntimeData, tags, settings, state, and the rules and simulation: battle (all modes), grid, pathfinding, abilities, items, AI, conditions and effects, narrative state, save structures. No actors, visual components, rendering, UI or input.engine base modules, GameplayTags
RSERuntimePresentation and world: actors, pawns, camera, input, debug drawing, UI, exploration, save and load orchestrationRSECore
RSEOnlineRuntimeSessions and the lobbyRSECore, RSE
RSENetRuntimeThe co-op transportRSECore, RSE, RSEOnline
RSEEditorEditorTools, wizards, importers, visual editors, extra validationRSECore, RSE
RSEGAS, RSEGASEditorRuntime, EditorOptional bridge: Gameplay Ability System characters in battlesthe above
RSEStateTree, RSEStateTreeEditorRuntime, EditorOptional bridge: StateTree nodes for the utility AIthe above
RSECommonUIRuntimeOptional Common UI host for the screensthe above

The rules that follow from this:

In your own project, add RSECore and RSE to your game module's PublicDependencyModuleNames. Add RSEEditor only for Target.bBuildEditor code, and RSENet or RSEOnline only if you use their types.

27.2.2 The extension points

Base classModuleOverrideWhere it shows up
URSECondition_CustomRSECoreIs Condition Metevery Conditions list: dialog, quests, puzzles, interactions, tutorials, shops
URSEWorldEffect_CustomRSECoreOn Executeevery Effects list, in order with the built-in effects
URSEEffect_CustomRSECoreOn Apply, Preview Damageeffects of abilities. Preview Damage is read by the forecast and the AI
URSEBattleCue_CustomRSEOn Cue Start / Update / Stoppresentation timelines
URSEAIConditionRSECoreIs Metrules and phases of AI profiles
URSEAIScorerRSECoreScoreadded to the score of every ability option, weighted
URSEAbilityReaction, URSEPassiveModifierRSECoreCan Trigger, Is Active Forreactions and passives
ARSEInteractableActorRSEOn Interact, Can Interact (Custom)custom interactions in the world
URSECommandHandlerRSECoreValidate, Applythe command bus
URSEMenuExtensionRSEIs Visible, Is Enabled, Executemain and in-game menus
URSEScreenWidget + URSEScreenViewModelRSEthe screenany framework screen
URSESessionProviderRSEOnlinehost, find, join, leaveonline services
URSEPlayerProvider, URSEAuthorityPolicyRSEplayers, authoritywho plays, and when co-op rules apply
IRSESaveBackendRSECoreslot read and writewhere saves are stored
URSEDeveloperSettingsRSECoreyour settings classProject Settings → RPG Saga Engine and the Configurator

The base classes are Abstract, Blueprintable, EditInlineNew, so a Blueprint or C++ subclass appears by itself in the dropdowns of instanced objects. Effects and conditions you write are deterministic and read-only where documented: use the battle's Roll Int and Roll Percent nodes instead of random nodes, so a battle replays the same from its seed.

A policy class, such as the leash, the group travel rule or the co-op encounter conversion, is the same idea: the setting holds a class, and you replace it with your own.

27.2.3 The engineering standards

These are the rules every piece of the plugin follows. Follow them in your own systems and your project stays easy to extend, test and ship.

RuleIn practice
No hardcoded tunablesContent goes in data assets and tables. Global rules go in a settings class (Project Settings → RPG Saga Engine). Debug switches are console variables named RSE.*. Only mathematical or logical invariants stay in code.
Data assets are Primary Data AssetsDerive from URSEPrimaryDataAsset. Its PrimaryAssetId is the stable id that saves and runtime state refer to.
Validate in the editorOverride IsDataValid (call Super), so mistakes show on save, not in play. Settings classes validate too.
Soft references for heavy assetsMeshes, animations, sounds and UI are TSoftObjectPtr or TSoftClassPtr, loaded when needed.
Ids, not pointers, in stateRuntime state refers to content by tag or FPrimaryAssetId.
No Tick by defaultActors and components start with Tick off. Use events, timers or a subsystem that processes a batch.
Flat hot dataGrids and pathfinding use contiguous arrays, not an actor per tile. Repeated visuals use instanced meshes.
Serializable stateRuntime state that must be saved is a plain USTRUCT with SaveGame properties, separate from actors.
Control from the editorSettings are editable in Project Settings. Test actors have CallInEditor buttons and live properties.
Logs and CVars per domainA log category per domain (LogRSEGrid, LogRSEBattle) and RSE.<Domain>.* CVars.
Rules profilesA gameplay rule lives in a profile-able settings class and is read with RSERules::Get<T>(Profile) or URSEBattle::GetRules<T>(), never with GetDefault<T>() in rule code.
TestsAutomation tests named RSE.<Domain>.<Test> for logic, runnable from the Session Frontend and the command line.
Blueprint accessEvery public API is exposed (BlueprintCallable, BlueprintPure, events, BlueprintType structs). Extension points are Blueprintable with BlueprintNativeEvent. A system is not done until it can be used and extended without C++.
No copyright or trademark problemsEvery source file has the copyright header. Nothing names other games or companies. Every shipped asset has a licence that allows redistribution.

27.3 Key classes and assets

Class / assetModuleRole
URSEPrimaryDataAssetRSECoreBase of all content definitions: display name, dev notes, balance lock, archetype link, validation
URSEDeveloperSettingsRSECoreBase of every settings class. IsProfileSection() makes a class overridable by a rules profile
URSERulesProfileRSECoreA rules profile asset
RSERules::Get<T>(Profile)RSECoreRead a profile-able setting
URSEFeatureSettings, RSEFeatures::IsEnabled, RSE_FEATURE_GATE(...)RSECoreFeature toggles and the macro that stops a subsystem from being created while its feature is off
URSESaveSubsystem, RegisterStruct<T>RSECoreRegister your system's state as a save section
URSECommandSubsystem, FRSECommand, URSECommandHandlerRSECoreThe command bus
URSESeedSourceRSECoreDeterministic seeds by named stream
RSEGameplayTagsRSECoreNative tags, for tags that C++ reads directly
URSEBattle, IRSEBattleViewRSECoreThe headless battle and the read-only view presentation uses
ARSETacticsBattleDirector, ARSEATBBattleDirector, ARSEFreeTacticsDirector, ARSEActionBattleDirectorRSEThe actor that runs one battle in each mode (presentation, camera, input)

27.4 Settings

The settings that matter when extending:

WhereWhat
Project Settings → RPG Saga Engine → FeaturesSwitch whole systems off. A disabled subsystem is not created. The command line -RSEDisableFeatures=Quests,Cards does it for one run
Project Settings → RPG Saga Engine → CommandsHandler Classes (your Blueprint handlers), Max Nested Depth, Log Refused Commands
Project Settings → RPG Saga Engine → Game FlowMenu Extensions
Project Settings → Asset ManagerThe folders scanned for your own Primary Data Asset types
Project Settings → Editor → RPG Saga Engine Configurator → GroupsWhich group your settings class appears in

Defaults the plugin ships live in Plugins/RPGSagaEngine/Config/Defaults/{Game,Editor}.ini and apply under your project's config, so anything you change wins and a plugin update never overwrites it. See Appendix B.

27.5 Blueprint usage

A short list of nodes that help when you extend:

The full list is generated: Appendix A. The Blueprint API is frozen: a node or event that ships is never removed or renamed. That is checked by the test RSE.Editor.BlueprintAPI.Manifest, and RSE.BlueprintAPI.Export regenerates the manifest after a deliberate change.

27.6 C++ usage

27.6.1 A new system, the plugin way

A system has a data asset, a settings class, a subsystem that owns the state, a save section, commands, and events. The snippets below show the shape of each piece.

The content type. Derive from URSEPrimaryDataAsset, keep references soft, validate:

UCLASS(BlueprintType)
class UMyBountyData : public URSEPrimaryDataAsset
{
    GENERATED_BODY()
public:
    UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Bounty", meta = (ClampMin = "0"))
    int32 Reward = 100;

    UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Bounty")
    FGameplayTag TargetEnemyTag;

    UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Bounty")
    TSoftObjectPtr<UTexture2D> Poster;          // soft: loaded when shown

#if WITH_EDITOR
    virtual EDataValidationResult IsDataValid(FDataValidationContext& Context) const override
    {
        EDataValidationResult Result = Super::IsDataValid(Context);
        if (!TargetEnemyTag.IsValid())
        {
            Context.AddError(INVTEXT("Target Enemy Tag is empty."));
            Result = EDataValidationResult::Invalid;
        }
        return Result;
    }
#endif
};

Put the folder in Project Settings → Asset Manager → Primary Asset Types to Scan, so saves and tools can find it.

The settings class. Global rules, with limits and a description:

UCLASS(Config = Game, DefaultConfig, meta = (DisplayName = "Bounties"))
class UMyBountySettings : public URSEDeveloperSettings
{
    GENERATED_BODY()
public:
    /** Gold multiplier for bounties on bosses. */
    UPROPERTY(Config, EditAnywhere, meta = (ClampMin = "0.1", ClampMax = "10"))
    float BossRewardMultiplier = 2.f;
};

If the rule should differ per zone or boss, override IsProfileSection() to return true, add EditInlineNew, and read it with RSERules::Get<UMyBountySettings>(Profile).

The subsystem and its state. The state is a plain struct, saved by id, replicated by section:

USTRUCT()
struct FMyBountyState
{
    GENERATED_BODY()
    UPROPERTY(SaveGame) TArray<FPrimaryAssetId> Claimed;      // ids, never pointers
};

UCLASS()
class UMyBountySubsystem : public UGameInstanceSubsystem
{
    GENERATED_BODY()
public:
    RSE_FEATURE_GATE(ERSEFeature::Quests)                      // not created while the feature is off

    virtual void Initialize(FSubsystemCollectionBase& Collection) override
    {
        Super::Initialize(Collection);
        Collection.InitializeDependency<URSESaveSubsystem>()
            ->RegisterStruct<FMyBountyState>(TEXT("Bounties"), 1, this, [this]() { return &State; });
        Collection.InitializeDependency<URSECommandSubsystem>()
            ->RegisterHandler<FMyCmd_ClaimBounty>(
                [this](const FRSECommandContext& C, const FMyCmd_ClaimBounty& Cmd, FText& Why) { return CanClaim(Cmd.Bounty, Why); },
                [this](const FRSECommandContext& C, const FMyCmd_ClaimBounty& Cmd) { Claim(Cmd.Bounty); },
                ERSECommandPermission::AnyPlayer, this);
    }

    FSimpleMulticastDelegate OnBountyClaimed;                  // presentation listens to this

private:
    bool CanClaim(FPrimaryAssetId Id, FText& Why) const;
    void Claim(FPrimaryAssetId Id)
    {
        State.Claimed.Add(Id);
        RSEStateSections::MarkChanged(this, TEXT("Bounties"));
        OnBountyClaimed.Broadcast();
    }
    FMyBountyState State;
};

The picture to keep in mind: the data asset says what a bounty is, the settings say how the rules work, the subsystem owns the one copy of the state, the section makes it save and replicate, the command is the only way to change it, and the event tells the screen.

The test. Logic that lives in RSECore-style code is testable without a world:

IMPLEMENT_SIMPLE_AUTOMATION_TEST(FMyBountyClaimTest, "MyGame.Bounties.Claim",
    EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter)
bool FMyBountyClaimTest::RunTest(const FString& Parameters)
{
    // build the state, run the pure function, TestEqual(...)
    return true;
}

27.6.2 Subclassing directors and other actors

A battle director is the actor that runs one battle in its mode: it owns the camera, the input and the presentation, and holds a headless battle driven by a driver. ARSEActionBattleDirector is Blueprintable, so you can make a Blueprint child to change its defaults and hook its events. The grid and ATB directors are placed in a level and configured through their properties, their zone or stage, and the encounter asset. For anything the properties do not cover, subclass in C++ and override the virtual functions the director documents, and keep your logic out of the director: put it in a policy class or a handler that the director calls.

27.6.3 Adding another battle mode (what it takes)

A new battle mode is not a data-only extension. The existing modes (grid Tactics, Free Tactics, ATB, turn-based and Action) follow one pattern, and a new one needs the same pieces:

  1. A simulation in the logic layer that runs headless, built on the common battle pipeline, so the simulator and the balance tool can play it.
  2. A driver and a director actor in RSE for the camera, input and presentation, which read the battle through IRSEBattleView and listen to its events.
  3. A command struct derived from FRSECommand for every player action, with a handler on the command bus. That is what makes it co-op ready.
  4. A native gameplay tag for the mode (Battle.Mode.*), the encounter data to select it, and a case in the encounter starter.
  5. A feature toggle if the mode should be switchable. The feature list is an enum in the plugin, so adding to it is a source change.
  6. Settings, validation, tests, and a Blueprint surface.

Before you start, check whether an existing mode with a rules profile, an AI profile and your own conditions and effects already gives you what you want. Most "new modes" turn out to be a configuration of Free Tactics, ATB or Action.

27.7 Advanced

27.7.1 Keeping changes to the plugin mergeable

If you must edit the plugin's source:

27.7.2 Stable ids and tags

Name a content tag for what it is, not for where you use it. Tags the code reads directly are declared as native tags with UE_DECLARE_GAMEPLAY_TAG_EXTERN, never built from a string. Content tags live in .ini files; a new domain gets its own Config/Tags/<Prefix>_<Domain>.ini, and the plugin registers its tag folder at load. Your own tags go in your project's Config/Tags.

27.7.3 Mechanical renames

The product name and prefix are provisional. Keep them out of dynamically built names so a future rename stays mechanical: use the prefix in class names, never in strings you assemble at run time.

27.7.4 Replication readiness

Systems you add should be ready for co-op from the start, even if you never ship it. See Rules for network-ready systems in Co-op and online: actions as commands, one owner per piece of state, presentation fed by events, swappable control, deterministic seeds, authority-guarded effects, and no references to "player 0" in logic.

27.8 Troubleshooting

SymptomCause and fix
My Blueprint condition or effect is not in the listThe class must derive from the Custom (Blueprint) base, be saved, and compile. Reopen the list. A class that does not derive from the base is not offered.
A condition changes the gameConditions must only read. Move the change to an effect.
A custom effect's change is not reported to quests or the HUDIt used a plain variable node. Use the Context nodes so changes are reported and deferred like built-in effects.
An ability effect replays differently each timeIt uses random nodes. Use Roll Int or Roll Percent, which come from the battle's seed.
A new settings class sits under Other in the ConfiguratorAdd it to a group (Project Settings → Editor → RPG Saga Engine Configurator → Groups). The test RSE.Editor.Configurator.EveryClassHasGroup fails until you do.
My data asset type is not found by the toolsIts folder is not in the Asset Manager's scan list. Add it in Project Settings → Asset Manager.
Link errors using RSENet or RSEEditor typesAdd the module to your Build.cs. Editor modules only under Target.bBuildEditor.
The plugin fails to compile in the game configurationA .cpp relied on an include from a neighbour, or an editor API sits outside #if WITH_EDITOR. Build the game target with strict includes to find it.
My subsystem exists although I switched the feature offIt lacks RSE_FEATURE_GATE(...) (or an equivalent ShouldCreateSubsystem).
A saved game from before my change fails to loadYou changed a section's struct without raising its version number in RegisterStruct. Bump the version and handle the old one.

27.9 See also

28. Troubleshooting and FAQ

In short: most problems show up in Validate All Data and in the Output Log. This chapter collects the common symptoms with their causes and fixes, answers the questions people ask first, and lists the logs and debug console variables that help you look inside. Each chapter also ends with its own troubleshooting table for problems specific to its system.

28.1 Basics

28.1.1 Where to look first

  1. RPG Saga Engine → Validate All Data. It checks every setting, rules profile and data asset. Read the Message Log (RPG Saga Engine Validation). Most content problems name the asset that is wrong.
  2. The Output Log (Window → Output Log). Framework messages come from categories that start with LogRSE. Filter on RSE.
  3. The chapter for the system you are using. Its Troubleshooting section lists what that system does wrong most often.
  4. Support. Use the Support link on the plugin's Fab page. Include the Output Log and the Validate All Data results.

28.1.2 Turn up the logging

The framework has a log category per domain. Set one to verbose from the console, for example Log LogRSEBattle Verbose, or in DefaultEngine.ini. Categories you will reach for: LogRSECore, LogRSESave, LogRSECommands, LogRSEExploration, LogRSEBattleStart, LogRSEBattleFlow, LogRSEAI, LogRSEDialog, LogRSEQuests, LogRSEPuzzle, LogRSEEncounter, LogRSETravel, LogRSEPerf, LogRSEPlatform, LogRSEOnline, LogRSENet, LogRSEContentImport, LogRSETranslate.

Debug console variables, all named RSE.*. The ones most worth knowing:

Variable or commandShows
RSE.Commands.Log 1Every command the bus processes
RSE.Net.LogTraffic 1Every state section and command sent over the network
RSE.AI.Debug 1The AI's option scores
RSE.Narrative.Trace 1Effects as they run
RSE.Quests.Trace 1Quest evaluation
RSE.Dialog.LogConditions 1Which dialog conditions held
RSE.Dialog.ShowNodeIds 1Node ids in the dialog box
RSE.Time.Trace 1Time of day changes
RSE.Interaction.Debug 1Interaction targeting
RSE.Encounter.Debug 1Roaming enemies and random battle checks
RSE.NPC.Debug 1NPC schedules and behaviour
RSE.Difficulty.Log 1, RSE.Difficulty.Override <value>Adaptive difficulty changes, and a forced value
RSE.Battle.AutoPlay 1The AI plays the party too, for watching a battle
RSE.Battle.Presentation.Speed <n>Battle presentation speed
RSE.Seed.World <n>Fix the world seed to reproduce a run
RSE.Input.Device Gamepad&#124;KeyboardForce the prompts to a device without a controller
RSE.Language <culture>Switch language while playing
RSE.Save.SimulateFault NoSpace&#124;Corrupt&#124;SignedOut&#124;FailedMake saving fail to see the messages
RSE.Visual.DeckPreview 1Preview the Steam Deck profile

The complete list is Appendix C. Debug commands are not in Shipping builds.

28.2 How it works

A quick map of where each kind of problem lives:

The problem is aboutLook in
A value that is wrong or a rule that behaves oddlySettings (Project Settings → RPG Saga Engine), then a rules profile that overrides it for this zone or boss
A thing missing or invalid in your contentThe data asset, and Validate All Data
Something that does not start (a battle, a dialog, a puzzle)The conditions and effects on it, and the Output Log of its system
A guest in co-op sees something differentState sections and commands. See Co-op and online
A look or an animationThe look and body preset, the character pack importer, the Animation & FX Library
A tool that does nothingThe open level, the selected actor, the Output Log, or Advanced tools menu entry

28.3 Key classes and assets

Nothing to create here. The assets named below are the ones most often at fault.

AssetWhy it matters when something is wrong
EncounterA battle needs its mode, its enemies and a matching zone or stage in the level
Tactics ZoneNeeds a baked grid
Rules profileCan silently override a value you thought was global
Character (Look, Body preset)Missing body presets show as grey capsules
Foundation and Game TermsThe words and stats everything else uses

28.4 Settings

28.5 Blueprint usage

Two Blueprint habits that save hours:

  1. Print what the framework sees. Bind to a subsystem event (for example On Quest Started or On Encounter Ended) and Print String the argument. It tells you whether the framework fired the event at all.
  2. Check feature and authority first. Is Feature Enabled (RPG Saga|Features) and Has Game Authority (RPG Saga|Commands) explain many "it works in the editor but not for the guest" cases.

28.6 C++ usage

Use the logging the framework uses. Define a category per domain and write to it, so your messages sort with the rest:

DECLARE_LOG_CATEGORY_EXTERN(LogMyBounties, Log, All);
UE_LOG(LogMyBounties, Warning, TEXT("Bounty %s has no target tag."), *GetNameSafe(Bounty));

Add a debug switch as a console variable named for your domain, outside Shipping builds:

static TAutoConsoleVariable<int32> CVarBountyDebug(TEXT("MyGame.Bounties.Debug"), 0, TEXT("1 = log every bounty check."));

28.7 Advanced

28.7.1 Reading a bug report

Ask for: the engine version and the plugin version; the Output Log; the Validate All Data results; whether it happens in a fresh project that has only the plugin and the starter content (if not, it is your content); whether it happens in single player and in co-op; and the exact steps. The scripted runners help you reproduce: RSE.Dev.Script <file> plays a list of console commands, and RSE.Rooms.<Name> plays a test room.

28.8 Troubleshooting

28.8.1 Installing and starting

SymptomCause and fix
The plugin does not load, there is no RPG Saga Engine menuIt is not enabled: Edit → Plugins, search RPG Saga, tick it, restart. The plugin is for Unreal Engine 5.8 and the editor and game run on Windows (Win64). The Output Log (LogPluginManager, RSE) names the module that failed.
"Missing or built with a different engine version" or "would you like to rebuild?"The copy has no compiled binaries for this engine (a zip, or a copy from another machine). Install it from Fab with Install to Engine (it comes compiled), or rebuild: the project must be a C++ project and you need Visual Studio 2022 with Game development with C++.
Two copies of the pluginIt must be installed once, in the engine or in your project's Plugins. Remove one and restart.
The Studio does not open at startupDon't show at startup is ticked, or the editor started with -NoRSEStudio, or it runs unattended. Open it with the Studio toolbar button.
I cannot find a tool that the documentation mentionsThe menu is short. Everything else is under RPG Saga Engine → Advanced tools, and some tools appear only where they apply. Tick Show advanced tools everywhere.
I cannot see the plugin's assetsContent Browser Settings → Show Plugin Content. They are under RPG Saga Engine Content.
An asset is read-only, or the Studio says Create a copy in the projectPlugin assets are templates. The Studio never edits them in place. Press Create a copy in the project.
Validate All Data warns that a plugin asset was "changed locally"Undo the change (or reinstall the plugin) and make your own copy instead.

28.8.2 Characters and art

SymptomCause and fix
Characters are grey shapes or capsulesThe plugin ships no Epic content, so characters name a body preset your project must define. Run RPG Saga Engine → Advanced tools → Install UE Mannequin Kit (or tick Install Mannequin Kit in the New RPG Project wizard). Files already in your project are never overwritten.
Missing packs, references to assets that are not thereThird-party packs are not included. Validate All Data lists the assets with missing references. Add the pack again in the same folder, or run the character pack importer and the Animation & FX Library on the packs you have. Running them again updates the same assets.
A character from my own model is invisible, tiny or twistedSet Target Height, check that the mesh is a rigged skeletal mesh, and use the pack importer with a tuned profile for unusual bone names. Rigs exported in meters are corrected automatically. See Character visuals and animation.
No portraits or iconsThe plugin ships no rendered portraits. After installing a body, run Generate Portraits & Icons once. It needs a renderer.
A weapon sits wrongly in the handFit it with the weapon tools. See Weapons.

28.8.3 Battles

SymptomCause and fix
The Tactics grid does not showThe zone is not baked: select it and press Bake Grid (and again after you change the level under it). The default Grid Visual Mode is a decal that needs the deferred renderer: with the forward or mobile renderer set it to Tiles. The grid shows only during a battle. Tiles missing under grass or small rocks is intended. Tag an actor RSE.GridIgnore to leave it out on purpose.
Walking into a battle site does not start the battleThe site needs a trigger, and its director needs an encounter. A Tactics encounter needs a Tactics zone, and an ATB or turn-based one an ATB stage, in the level. Only one battle runs at a time. Save the level and play again: an unsaved new encounter asset is lost if the editor closes.
A unit starts on the wrong tile, or the log warns that a unit movedThe encounter was laid out for another zone, or the zone was baked again afterwards. The battle moves the unit to the nearest free walkable tile. Fix it in Encounter Layout Mode.
Battles are too easy or too hardUse Test in battle, the Estimated difficulty step of New battle, and Balance My Campaign. The AI adapts its intelligence, not its stats. Set per-zone or per-encounter limits if needed.
A battle does not use the mode I expectedA mode override or a co-op conversion is in effect. Check the encounter, the rules profile and Co-op Conversion. See Battle fundamentals.
Saving is refusedSaving is blocked in battles, scenes, dialogs and inside volumes marked "no saving". Save points and the save item work everywhere else.

28.8.4 World and maps

SymptomCause and fix
Map generation fails or the map is emptyGenerate Map and the Portrait & Icon Studio render the level, so they need a GPU renderer. In the editor it just works. From the command line add -AllowCommandletRendering and do not use -nullrhi, or pass -NoCapture to write only the map data. "The level cannot be rendered here" means exactly this. Save the level first.
The explorer falls through a bridge or floorThe mesh has no collision the character can stand on. Give it collision, or put an invisible walkable surface over it. A safety net (Exploration → Fall Recovery) puts an explorer back where it last stood on solid ground, and Blueprint can react with On Explorer Recovered.
Populate Zone places nothing, or everything in one cornerIt needs a progression zone with enemies and a walkable area. With a navmesh only reachable places are used. If the level has none, Apply adds a Nav Mesh Bounds Volume (or press Add NavMesh Volume). Nothing is placed on or near a Tactics zone or a classic stage.
A door, chest or lever does nothingCheck its conditions and effects, the interaction library settings and RSE.Interaction.Debug 1. See Exploration.

28.8.5 Text and languages

SymptomCause and fix
The game shows English although I chose another languageThe game starts in English until the player picks a language or you pass -culture=xx. The list offers only cultures with a compiled translation. Packaged games need the cultures in Packaging → Localizations to Package.
Editor or menu texts are English onlyThe plugin ships in English. Translate its own target with Translate with AI. See Localization.
A screen shows the wrong word for "Party", "Magic" or "Lv"The vocabulary comes from Game Terms. A fixed word you typed does not follow the terms. Use {Term.<Id>}.
The translation import refused my file, or the compile failedThe report lists each problem with its id. A missing placeholder or plural form is an error. A broken {Placeholder} fails the compile.

28.8.6 Performance and platforms

SymptomCause and fix
The game does not use the Steam Deck settingsThe Deck profile is missing from your project's Config/DefaultDeviceProfiles.ini. See Platforms and performance. -dp=SteamDeck forces it on any PC.
Text is too small on the DeckBuilt-in screens never draw below UI Theme → Minimum Font Size. In your widgets use the theme fonts.
Meshes look blocky on the DeckNanite is off in the Deck profile. Give heavy meshes LODs. The content budget warnings point at the worst offenders.
Low quality still has heavy shadowsProject Settings → Rendering → Shadow Map Method is overriding scalability. Put it back to the default.
An Android or iOS build failsMobile is not verified, and the descriptor allows Win64 only.

28.8.7 Co-op and online

SymptomCause and fix
The online service is not availableThe provider's subsystem is not loaded: the engine plugin is not enabled, DefaultPlatformService is not set, Steam is not running, or the game started with -nosteam. With Fallback To LAN on, the game uses LAN.
LAN finds nothingSame subnet, and the firewall must allow UDP for the beacon port 14001 and the game port 7777.
The host is running a different versionSet the same Game Version on both builds.
My system works for the host but not for guestsIts state is not a state section, the owner never marks it changed, or its actions are not commands. See Co-op and online.

28.9 FAQ

What is RPG Saga Engine? A framework for role-playing games in Unreal Engine 5.8: grid tactics, free-movement live tactics, active-time, turn-based and real-time action battles on the same characters and abilities, plus exploration, time and weather, living NPCs, dialog, quests, puzzles, items, shops, saves, maps and an adaptive enemy AI. You build your game with editor tools and data.

Do I need C++ or Blueprints? No for a complete game made from the built-in systems. Blueprints are for what the framework does not do (a custom condition, effect, AI rule, interactable or screen). C++ source is included for programmers. See Extending the plugin.

Where do I start? Installation and your first project: install, open the Studio, make a character, make a battle, play it. Leave the Studio's Explanations on Beginner.

What kind of games can I make? Classic menu battle RPGs, tactical RPGs on a grid, hybrids that use both, and free-movement turn-based tactics on the live map. The foundation presets start you in a genre (JRPG Classic, Tactics, Dark Fantasy, Sci-fi RPG, Post-apocalyptic, Steampunk, Empty).

Can one game use several battle modes? Yes. Every encounter names its own mode, and the same party, classes, abilities and items work in all of them. Each ability has rules per mode.

Is there multiplayer? Co-op, yes: two to four players for exploration, story and live battles, on LAN, Steam and Epic Online Services through one interface. Limits: Steam and EOS were tested on a local network only, four-player sessions under bad network conditions and hosting on a Steam Deck are not tested, and grid Tactics and ATB battles become live battles in co-op. Competitive PvP is not in this release. See Co-op and online.

Which platforms and engine versions? Windows (Win64) for the editor and the game, with the Steam Deck as the minimum hardware target. Unreal Engine 5.8. Mobile (touch controls, phone UI) and consoles are not supported yet. See Platforms and performance.

What content is included? A complete, balanced starter set (classes, heroes, abilities, items, enemies, zones, shops and battles in every mode), an example map and main menu, starter content for each foundation preset, archetypes and placeholder battle animations for the UE5 mannequin. No third-party art.

Can I use character packs from a store? Yes. The character pack importer, New Character from Mesh and the Animation & FX Library make them usable in a few clicks. A model with no animations borrows the mannequin's, retargeted.

Can I change the starter content? Yes, through copies: plugin assets are templates, and the Studio makes a copy in your project when you edit one.

Do I have to use the Studio? No. It is a friendly layer over ordinary data assets. Use any asset directly, the Configurator, Project Settings, spreadsheets, Blueprints or Python. Everything stays in sync because it is the same data.

Can I write content in spreadsheets, or with an AI assistant? Yes. Content Import creates and updates every kind of data from CSV or JSON, with a dry run first, and never deletes anything. The AI workflow exports prompts generated from your own project. See Editor tools.

How do I balance my game? Every battle can be simulated without graphics. Use Test in battle, the difficulty estimates in the Studio, Balance My Campaign for the whole campaign, and the Progression Designer for levels, experience and money.

How does adaptive difficulty work? There is no difficulty menu. The enemy AI's intelligence moves slowly with how the player did over several battles. Stats and rewards never change, and each zone, battle or boss can set limits.

How do saves work? Save points in the world, plus an optional consumable that saves almost anywhere (not in battles, scenes, dialogs or no-save areas). A save holds the party, inventory, story flags, quests, position, world state and the AI's difficulty value. See Save and load.

Can I replace the game's screens? Yes. Every screen has a widget class in the settings. Make a Widget Blueprint on the screen's data and set it there. See User interface.

Is the game localizable? Yes. Every text is localizable, the player chooses the language in the options, and the plugin ships in English only. Use Translate with AI to add languages. See Localization.

Will a plugin update overwrite my work? No. Your content and settings live in your project. The plugin's assets are templates you copy, and the plugin's defaults apply under your settings, so anything you changed wins.

Can I sell a game made with it? Yes, under the Fab license you bought. Your packaged game includes the framework in compiled form. The plugin and its source cannot be redistributed or resold as a tool or template.

Is any included content from other companies? No. Everything that ships in the plugin was made for it. Engine content (the mannequin, basic shapes, fonts) is referenced or copied from your own engine installation. See Docs/ThirdPartyNotices.md in the plugin.

28.10 See also

29. Glossary

In short: the words used in RPG Saga Engine, its editor tools and this manual, in plain language. Terms in italics inside an explanation have their own entry. Each group ends with the chapter that explains it in depth.

29.1 Battle words

TermMeaning
Battle modeHow a battle is played. Every encounter names its mode, and the player does not choose it. The modes are Tactics, Free Tactics, ATB, Turn-based (by round or by timeline) and Action (real time).
Tactics (grid Tactics)Turn-based battles on a square grid laid over your level. Tiles have height, units have a facing, and position matters (flanking, high ground, line of sight). Turn order follows CT, and each turn is paid with AP.
CT (Charge Time)The Tactics turn counter. Every unit fills its CT at its own speed, and when it reaches the threshold the unit takes a turn. A turn that did less costs less CT, so the unit comes back sooner.
AP (Action Points)The budget of one Tactics turn. Moving and acting both cost AP, in any order.
ATB (Active Time Battle)Classic menu battles in which each character has a time bar that fills up. When it is full the character can act. The party and the enemies stand in rows facing each other.
Wait / ActiveThe two ATB time settings. In Wait (the default) time stops while you choose in a menu. In Active it keeps running.
Turn-basedClassic menu battles without time bars. Two styles: Round-based (everyone acts once per round, fastest first) and CTB (timeline) (a strip where fast units come around more often and slow abilities delay the next turn).
Free Tactics (Live Tactics)Turn-based tactics without a grid: units move any distance in meters within their budget, on the live map. It is also the form every battle takes in co-op.
Action battleReal-time combat on the live map, from sword fights to shooters, with a combat component, a camera rig and its own AI.
Classic battleAn ATB or turn-based battle (the menu-based modes).
Rows (front / back)Positions in a classic battle. By default the back row deals and takes half melee physical damage, and some abilities hit a whole row.
FacingThe direction a Tactics unit looks. Attacks from the side or behind hit harder and more often.
FlankAttacking from the side or back of a unit, or with an ally on its other side.
Line of sightWhether anything blocks the view between the user and the target. Ranged abilities may need it.
Deployment tilesThe tiles where the player places units before a Tactics battle starts.
EncounterOne battle: its mode, enemies, levels, rewards and rules. A data asset.
Encounter poolA list of enemies a progression zone draws random groups from, including rare elite groups.
Random encounter areaA volume in the level where classic battles start from time to time while the player walks.
Visible enemies / spawnerEnemies that roam the level. Touching one starts its battle. A spawner places and respawns them.
Tactics zoneThe actor that marks where a Tactics battle happens on your level. Its grid is measured once (Bake Grid) and drawn during the battle.
Bake GridMeasuring the level under a Tactics zone: which tiles are walkable and how high each is.
ATB stageThe actor that marks where a classic battle happens: the two sides' slots and the battle camera.
Battle directorThe actor that runs one battle site (or one live or Action battle) and knows which encounter it fights.
Battle siteA Tactics zone with its director, trigger and optionally a classic stage next to it.
Mode overrideA session-wide rule that fights an encounter in another mode, using a copy of the encounter.
StatusA lasting effect on a unit (poison, haste, protect).
ElementThe kind of damage (fire, ice, holy). Units can be weak to, resist, be immune to or absorb it.
ResourceA spendable value such as HP, MP or Resonance. Your foundation decides which exist.
Adaptive difficultyThe enemies get smarter or make more mistakes depending on how the player did over several battles. Stats and rewards never change.
IntelligenceThe enemy AI's skill, from 0 to 1, kept separately per battle family. Adaptive difficulty moves it within limits you set per zone or encounter.
Utility AIThe decision method of the enemy AI: every possible action gets a score from weighted considerations (scorers) and the best is chosen, with plausible mistakes at low intelligence.
ScorerOne consideration of the utility AI. A custom scorer adds a behaviour without touching the AI.

See Battle fundamentals, Grid Tactics, ATB and turn-based, Free Tactics (Live), Action battles and Enemy AI and adaptive difficulty.

29.2 Characters and content

TermMeaning
Hero / party memberA main character. Plays in every battle mode.
Recruitable unitA secondary character recruited during the game, who fights in Tactics battles only.
EnemyA character controlled by the AI.
GuestA character who joins for a while with fixed equipment the player cannot change. Not to be confused with a guest player in co-op.
ClassWhat a character is: stat growth by level, the abilities it learns and the equipment it may use. Characters keep their class for the whole game.
AbilityAnything a unit does in battle: attack, spell, skill, item use. One ability works in every battle mode, with rules per mode.
ItemConsumables, equipment, key items and readable documents. One inventory for the whole game.
Key itemAn item used to solve puzzles or move the story on. It cannot be sold or used up by accident.
PactThe summon system. A Pact gives a hero affinities, extra abilities and a summon, a temporary unit the player controls.
ResonanceThe resource Pact summons cost. It builds up during battle.
Look / appearanceHow a character looks: which body preset and which parts, colors and variants.
Body presetA named body: skeletal mesh, animation Blueprint, anim set, scale and attachment points. Many looks share one.
Anim setThe list of animations a body uses: idle, walk, run, hits, knock-out, victory, attacks, casting.
Animation styleA group of clips for one way of fighting, built by the Animation & FX Library.
PresentationHow an ability looks and sounds: animation, effects, sounds, camera, projectile, impact. Separate from its rules.
Character packA set of character models and animations from a store, made usable by the importer.
SpeakerWho says a dialog line: a name, a color and a portrait.
PortraitA character's face picture for dialogs and menus.
Growth BoardA board of nodes (stat boosts, passives, abilities, gates) the player opens by spending board points. One of the progression systems.
Equipment masteryWon battles give mastery points to an equipped weapon or armor, which then teaches its abilities for good.

See Characters and party, Progression, Abilities and statuses, Items, inventory and economy and Character visuals and animation.

29.3 Story and world

TermMeaning
Story flagA yes/no or number value that remembers what happened. Saved with the game.
ConditionA question about the game state (has the item, flag has a value, character is in the party). Dialogs, quests, puzzles, abilities and encounters use the same conditions.
EffectA change to the game state (set a flag, give an item, recruit a character, start a battle, start a dialog). The same effects work everywhere.
Conditions & EffectsThe one content language shared by dialog, quests, puzzles, interactions, shops and encounters.
DialogA conversation of lines, choices, branches and effects, edited in the visual dialog editor.
QuestA goal with stages and objectives, shown in the journal and the tracker.
PuzzleA world mechanism (locked door, code lock, item combination) built from conditions and effects.
Save pointA place where the player saves. A consumable save item can also save almost anywhere except in battles, scenes, dialogs and no-save areas.
No-save zoneA volume where saving is blocked, for example before a boss.
Progression zoneA part of the world with a level range: which enemies live there, how strong they are, what loot is worth. Used by random battles, populate tools and balance tools.
Area map / minimapThe map of a level and the small map on the HUD, generated with Generate Map.
Travel / zone exitMoving between maps. In co-op the host's travel takes everyone along.
BestiaryThe in-game book of enemies the player has met.
Card gameAn optional collectible card minigame with NPC opponents.
InteractableAnything in the world the player can use: doors, chests, levers, signs.

See Story, dialog and quests, Exploration and World building.

29.4 Editor words

TermMeaning
RPG Saga StudioThe editor window where you make your game step by step, in four layers.
LayerOne of the Studio's four levels: Foundation, Archetypes, Content, World.
FoundationThe base rules of your game: names, stats and resources, formulas, elements, equipment slots, the battle menu, battle modes, progression and money.
Foundation presetA ready foundation to start from: JRPG Classic, Tactics, Dark Fantasy, Sci-fi RPG, Post-apocalyptic, Steampunk or Empty.
Game TermsThe game's vocabulary on screen ("Party", "Magic", "Lv"), written by the foundation and read by every screen. A text uses {Term.<Id>} to follow it.
ArchetypeA template you create content from. Content made from it follows it for every field you did not change.
Variant (child archetype)An archetype derived from another one.
Template (plugin asset)An asset that ships in the plugin. The Studio never edits it in place: it makes a copy in your project.
Starter setThe complete, balanced example content that ships with the plugin.
ConfiguratorOne window with every setting of the framework, grouped and searchable, with validation and tools.
Rules profileA data asset that overrides some rules (battle, grid, AI) for one zone, battle or boss, or the whole game.
Profile sectionA settings class that a rules profile may override.
Validate All DataA check of every setting and data asset. Results open in the Message Log.
WizardA short form that creates a valid, ready-to-use data asset.
Content ImportCreating and updating data from spreadsheets or JSON, with a dry run first.
Dry runA pass that reports everything an import would do, field by field, without changing anything.
AI packPrompt files generated from your project so an AI assistant can write content the importer accepts.
Battle simulatorPlays battles without graphics, very fast, to measure win rates and battle length.
Balance My CampaignThe tool that simulates every encounter of a campaign, flags what is off and proposes fixes.
Progression DesignerThe tool that plans levels, experience and money across zones.
Test roomA small map with a smoke test that exercises one area of the framework.
Smoke test / smoke scriptA short script of console commands and waits that plays a room and fails when something does not happen.
Battle launcherA development panel that starts any encounter in any mode with a chosen party, rules, AI and seed.
HeadlessRunning without rendering, for simulations and automation.
CommandletA command-line run of the editor (-run=RSE...) for automation and build machines.
Blueprint APIEvery system's functions and events as Blueprint nodes under RPG Saga. It is frozen: shipped nodes are never removed or renamed.

See Core concepts, Game foundation and archetypes and Editor tools.

29.5 Architecture words

TermMeaning
RSECoreThe logic module: data, rules, state and simulation, with no actors, rendering, UI or input.
RSEThe presentation and world module: actors, camera, input, UI, exploration.
RSEEditorThe editor module: the Studio, wizards, importers, visual editors, validation.
RSEOnline, RSENetThe session module and the co-op transport module.
RSEGAS, RSEStateTree, RSECommonUIOptional bridges: Gameplay Ability System characters, StateTree nodes for the AI, and a Common UI host for the screens.
Data-drivenContent lives in data assets and tables, not code. New content is new data.
Primary Data AssetThe base type of content definitions. Its PrimaryAssetId is the stable id that saves refer to.
Developer SettingsA settings class under Project Settings → RPG Saga Engine, saved in Config/Default*.ini.
CVarA console variable. The framework's debug switches are named RSE.*.
Gameplay TagA hierarchical name (for example an element or a story flag) used to identify content without strings in code.
Native tagA tag declared in C++ because code reads it directly.
Extension pointA base class you subclass in Blueprint or C++ to add behaviour: a custom condition, effect, scorer, reaction, interactable, menu entry or handler.
Custom (Blueprint)The name of the Blueprint-friendly base of conditions, effects, ability effects and presentation cues.
Policy classA setting that holds a replaceable class deciding a rule, such as the leash or the co-op encounter conversion.
Feature toggleA switch in Features that stops a whole system from being created.
Seed streamA named source of reproducible random numbers derived from the world seed.
Serializable stateRuntime state kept in plain structs that refer to content by id, so it can be saved and replicated.
State sectionOne named block of serializable state: the unit of saving and of replication.
Save backendThe storage behind saving: files, the platform's save system, or your own.

See Extending the plugin and Save and load.

29.6 Online, co-op and platform words

TermMeaning
SessionOne hosted game that players find or are invited to and join.
ProviderAn online service behind the session interface: LAN, Steam, Epic Online Services, or your own class.
LANThe local network. Hosting and joining on LAN needs no account.
LobbyThe screen and data where players see the session, the players and their characters before and during play.
Listen serverA host who plays and serves the game at once. Co-op uses it, with no dedicated server.
Host / guestThe host's machine runs the game logic. Guests show its state and send actions.
AuthorityThe machine that runs the game logic: the host, or the only player in single player.
CommandA small serializable action sent through the command bus and checked by a handler.
Command busThe one path every player action takes, the same in single player, on the host and on a guest.
HandlerThe class or function that validates and applies one kind of command.
InstigatorThe player who sent a command, set by the host and never by the client.
LeashThe distance guests may roam from the host or the group before they are brought back.
Companion AIThe AI that drives a party member no player controls.
SlotA player's place in the session: 0 is the host, 1 to 3 are guests.
Device profileAn engine profile of console variables for a device. The framework switches to the Steam Deck profile at start on a Deck.
Scalability levelThe quality level the player picks: Low, Medium, High or Epic.
Content budgetAn edit-time limit on a category of assets, such as triangles or texture size.
Performance budgetThe limits a benchmark capture is checked against: frame rate, 1% low, GPU time, draw calls, memory.
1% lowThe frame rate of the slowest 1% of frames.
Platform userThe engine's idea of who is playing on a device, used for per-user saves and sign-out handling.
Tier (mobile)Low, Mid or High: a mobile quality level with its own device profile and budget. Not verified on a device.
Touch layoutA data asset describing on-screen controls and gestures for one moment of play.

See Co-op and online and Platforms and performance.

29.7 Localization words

TermMeaning
Localization targetA set of texts the engine gathers and translates together. The plugin has one (RPGSagaEngine) and your project has its own.
CultureA language and region code such as ro, de or pt-BR.
GatherThe engine step that collects every text of source and assets into a target's manifest and .po files.
Translate with AIThe tool that exports texts for an AI assistant, validates the answers, merges them and compiles the language.
ChunkOne file of texts, sized for one AI request.
Glossary (translation)A table of your content names, so the AI translates them the same way everywhere.
PlaceholderA marker inside a text, such as {Name} or <em>, that must survive translation.
Plural blockA pattern such as `{N}plural(one=card,other=cards)` that gives a text for each plural category of a language.
CompileTurning a .po into the .archive and .locres files the game loads.

See Localization.

Appendix A. Blueprint node reference

Generated from the plugin's reflection data (RSE.Docs.ExportReference). 2247 nodes, events and overridable functions in 287 classes. Kind: function is a callable node, pure has no execution pin, event is an assignable event (Assign / Bind Event), override is a function a Blueprint subclass overrides. Parameters marked out are outputs, ref are passed by reference.

Classes by module: RSE (186); RSECommonUI (1); RSECore (90); RSEGAS (1); RSENet (4); RSEOnline (5).

ARSEATBBattleDirector

Module RSE. Runs and presents a classic battle on an ATB stage (D-023): ATB (D-022) or turn-based (D-050).

NodeKindCategoryParametersReturnsDescription
End Battle (EndBattle)functionRPG Saga|BattleRemoves the battle actors and returns to Idle.
Get Battle (GetBattle)pureRPG Saga|BattleURSEATBBattle*The running (or last) battle, or none.
Get Battle Initiative (GetBattleInitiative)pureRPG Saga|BattleERSEBattleInitiativeInitiative of the running (or last) battle; before a battle, the one the next battle gets.
Get Battle Mode (GetBattleMode)pureRPG Saga|BattleFGameplayTagBattle.Mode.ATB or Battle.Mode.Turn: the running battle's mode; before a battle, the mode it would get.
Get Battle Outcome (GetBattleOutcome)pureRPG Saga|BattleERSEBattleOutcomeOutcome of the running or last battle (Ongoing without one).
Get Encounter (GetEncounterBP)pureRPG Saga|BattleURSEEncounterData*The encounter this director fights (the override while one is fought).
Get Last Rewards (GetLastRewards)pureRPG Saga|BattleFRSEBattleRewardsWhat the last finished battle gave the party (experience, levels, items; D-030). Empty unless it was won.
Get Phase (GetPhase)pureRPG Saga|BattleERSEATBDirectorPhaseIdle, battle or finished.
Get Time Mode (GetTimeMode)pureRPG Saga|BattleERSEATBTimeModeWait or Active (the player's option, else the rules' default; may be switched during the battle).
Get Time Scale (GetTimeScale)pureRPG Saga|BattlefloatATB time scale now (0 = standing still: Wait mode with a menu open; turn-based battles report 1).
Get Unit Actor (GetUnitActor)pureRPG Saga|BattleUnitId: int32ARSEGridUnit*The actor presenting a unit, or none.
Get Unit Id (GetUnitId)pureRPG Saga|BattleActor: ARSEGridUnit*int32Battle id of the unit an actor presents (-1 for none).
Get Unit Name (GetUnitName)pureRPG Saga|BattleUnitId: int32FTextDisplay name of a battle unit.
Is Active (IsActive)pureRPG Saga|BattleboolA battle runs or has just finished on this stage (not Idle).
Is Command Queued (IsCommandQueued)pureRPG Saga|BattleUnitId: int32boolA player command waits for the action being shown to finish (D-065).
Is Playback Idle (IsPlaybackIdle)pureRPG Saga|BattleboolTrue when no events are waiting to be shown and nothing is being presented.
On Event Presented (BP_OnEventPresented)eventRPG Saga|BattleEvent: FRSEBattleEvent (ref)Fired when a battle event is shown: damage numbers, custom HUDs, sounds.
Set Next Initiative (SetNextInitiative)functionRPG Saga|BattleInitiative: ERSEBattleInitiativeInitiative of the next battle started here (D-063: touching a visible enemy from behind, or being caught from behind). The battle consumes it; later battles start Normal again (a retry too).
Set Time Mode (SetTimeMode)functionRPG Saga|BattleInMode: ERSEATBTimeModeSwitches Wait / Active for the running battle (the options keep the player's stored choice).
Start Battle (StartBattle)functionRPG Saga|BattleEncounterOverride: URSEEncounterData* = NoneboolStarts the encounter with the party (first ATBPartySize characters allowed in ATB). EncounterOverride: fight this encounter instead of the director's own, for this battle only (several classic encounters sharing one stage, e.g. encounter triggers). Null = Encounter.

ARSEATBStage

Module RSE. Where an ATB battle takes place (D-023): the party on one side, enemies on the other, each in a front and a back row, plus a fixed battle camera.

NodeKindCategoryParametersReturnsDescription
Frame Camera (FrameCamera)functionRPG Saga|ATBboolD-183: puts the camera at the authored pose, then moves it to a clear one when geometry hides the formation (Camera Framing -> ATB). Runs when play begins; call it again after the level around the stage changed. Returns true when the camera moved.
Is Camera Reframed (IsCameraReframed)pureRPG Saga|ATBboolD-183: the camera was moved away from its authored pose by FrameCamera.

ARSEAbilityDemoPad

Module RSE. A showcase pad (D-062, gallery maps): the player walks up, presses Interact and watches an ability's presentation (D-034 / D-055: its cue timeline, projectile, camera, reactions) played by a caster on a target dummy.

NodeKindCategoryParametersReturnsDescription
Get Ability (GetAbility)pureRPG Saga|WorldURSEAbilityData*The ability this pad shows.
Play Demo (PlayDemo)functionRPG Saga|WorldboolPlays the ability's presentation now (spawns the units on first use). Returns false without an ability or while one plays.

ARSEActionBattleDirector

Module RSE. The presenter of an action battle (D-171, package A3; the D-141 split: URSEActionSimDriver decides, this shows).

NodeKindCategoryParametersReturnsDescription
Get Action Battle (GetBattleBP)pureRPG Saga|Action BattleURSEActionBattle*The battle shown (the driver's on the authority, the proxy on a guest). Read only: commands go through Submit Command.
Get Battle Time (GetBattleTime)pureRPG Saga|Action BattlefloatBattle seconds now (a guest estimates the host's from the last mirror).
Get Encounter (GetEncounter)pureRPG Saga|Action BattleURSEEncounterData*Get Encounter
Get Unit Actor (GetUnitActor)pureRPG Saga|Action BattleUnitId: int32AActor*The world actor of a unit (null when it has none here).
Get Unit Id Of (GetUnitIdOf)pureRPG Saga|Action BattleActor: AActor*int32The unit an actor is (INDEX_NONE when it does not fight here).
Is Battle Active (IsBattleActive)pureRPG Saga|Action BattleboolIs Battle Active
Is Proxy (IsProxy)pureRPG Saga|Action BattleboolThis machine shows the host's battle (a guest).
On Battle Event (BP_OnEventPresented)eventRPG Saga|Action BattleEvent: FRSEBattleEvent (ref)
Try Finisher (TryFinisher)overrideRPG Saga|Action BattleAttacker: AActor*
Victim: AActor*
Context: FRSEPairedContext (ref)
boolA kill (or a stagger) by this machine's player: plays a finisher locally without stopping anyone (D-172). The default calls Try Play Finisher (Options -> Finishers, the paired animation libraries). Returns true when one plays.

ARSEActionCameraRig

Module RSE. The action battle camera of one local player (D-171, package A3): a third-person view behind the character the player commands, turned by the look input, blending between the Combat, Aim (over the shoulder) and Lock On profiles of Action Battle (Presentation), kept off walls by a sphere probe, shake...

NodeKindCategoryParametersReturnsDescription
Add Trauma (AddTrauma)functionRPG Saga|Action BattleAmount: floatAdds camera shake (0..1).
Get Mode (GetMode)pureRPG Saga|Action BattleERSEActionCameraModeGet Mode
Get Target (GetTarget)pureRPG Saga|Action BattleAActor*Get Target
Get Trauma (GetTrauma)pureRPG Saga|Action BattlefloatGet Trauma
Set Mode (SetMode)functionRPG Saga|Action BattleInMode: ERSEActionCameraModeSet Mode
Set Target (SetTarget)functionRPG Saga|Action BattleInTarget: AActor*Follows another character (a character switch) without a cut.

ARSEActionProjectileActor

Module RSE. A projectile of an action battle in the world (D-171, package A3): each machine shows the battle's projectiles with one of these (the arrow, the fireball, the shell).

NodeKindCategoryParametersReturnsDescription
Get Owner Unit (GetOwnerUnit)pureRPG Saga|Action Battleint32Get Owner Unit
Get Projectile Id (GetProjectileId)pureRPG Saga|Action Battleint32Get Projectile Id
On Impact (OnImpact)overrideRPG Saga|Action BattleLocation: FVector (ref)
HitActor: AActor*
It touched something (a unit or a wall): Blueprint impact effects.

ARSEBuildingEntrance

Module RSE. The entrance of a building (D-150, docs/product/buildings.md): put it at the building's door and pick a mode.

NodeKindCategoryParametersReturnsDescription
Detect Door (DetectDoor)functionBuilding EntranceboolD-158: finds the building's real door (a socket named "door", else a door-shaped opening or frame in its geometry), stands the entrance at it (the door's width and height, facing out) and places the exit point in front of it. Keep Placement leaves a hand placed entrance alone. Returns false when no door was found.
Get Door (GetDoor)pureRPG Saga|BuildingsARSEDoor*Get Door
Get Door Height (GetDoorHeight)pureRPG Saga|BuildingsfloatGet Door Height
Get Door Width (GetDoorWidth)pureRPG Saga|BuildingsfloatGet Door Width
Get Exit Transform (GetExitTransform)pureRPG Saga|BuildingsFTransformWhere the party stands when it comes out (the Exit Point, facing away from the building).
Get Interior (GetInterior)pureRPG Saga|BuildingsURSEInteriorData*Get Interior
Get Mode (GetMode)pureRPG Saga|BuildingsERSEBuildingEntranceModeGet Mode
Get Points Problem (GetPointsProblem)pureBuilding EntranceFTextD-153: Validate Exit Point and Check Interior Entry for tools and scripts: what is wrong, empty when both are usable.
Place Exit Point (PlaceExitPoint)functionBuilding EntranceboolD-153: moves the Exit Point onto the spot FindExitSpot finds (the Building Analyzer calls it). Returns false: none found.

ARSECaravan

Module RSE. A merchant caravan on the road (D-157, docs/product/living-npcs.md "Caravans"): place it, draw its route (the spline, along the roads; or use World Tools -> Place Caravan Route), mark the stops and pick a Caravan Data asset.

NodeKindCategoryParametersReturnsDescription
Get Merchant (GetMerchant)pureRPG Saga|CaravanARSENPC*Get Merchant
Get Position (GetPosition)pureRPG Saga|CaravanFRSECaravanPositionWhere it is now on its timetable.
Is Halted (IsHalted)pureRPG Saga|CaravanboolA player near it on the road holds it.
Refresh Now (RefreshNow)functionCaravanRebuilds the timetable and moves everything to the clock's position at once (load, time skip, live tuning).

ARSEChest

Module RSE. A treasure chest (D-042): items and money, opened once (the opened state is a story flag, so it is saved with the story), optionally locked by conditions or a key item.

NodeKindCategoryParametersReturnsDescription
Is Opened (IsOpened)pureRPG Saga|EconomyboolThe chest was opened already (its Opened flag is set; saved with the story).

ARSECinematicCharacter

Module RSE. A character standing in a story scene (D-078): the spawnable that Cinematic from Screenplay puts in a Level Sequence for every speaker.

NodeKindCategoryParametersReturnsDescription
Copy Look From (CopyLookFrom)functionRPG Saga|ScenesSource: AActor*boolTakes the look of another actor's appearance (the real NPC or pawn it stands in for). Returns false when Source has none.
Get Appearance Component (GetAppearanceComponent)pureRPG Saga|ScenesURSEAppearanceComponent*Get Appearance Component
Set Look (SetLook)functionRPG Saga|ScenesInCharacter: URSECharacterData*
InAppearance: TSoftObjectPtr<URSECharacterAppearance>
InVariant: FName
Shows a look: Appearance (and Variant) when set, else the Character's appearance and equipment.

ARSECombatArea

Module RSE. A designed combat place of the map (D-093, free-tactics.md section 11): a clearing, a square, a bridge where battles are meant to happen.

NodeKindCategoryParametersReturnsDescription
Check Area (CheckArea)pureRPG Saga|Combat RolesFRSECombatAreaReportTraces the area (free tiles) and lists the objects whose role keeps them out of combat areas.
Contains Location (ContainsLocation)pureRPG Saga|Combat RolesLocation: FVector (ref)boolWhether a world position lies inside the area's box (height included).

ARSECompanionAIController

Module RSE. The companion AI of a visible party member (D-097, engineering standards section 12): the controller every member has when no player controls it.

NodeKindCategoryParametersReturnsDescription
Follow (Follow)functionRPG Saga|Party FieldBack to following the leader.
Get Life State (GetLifeState)pureRPG Saga|Party FieldFRSEFollowerLifeStateD-129: the member's following and idle state (deterministic from its seed; the authority owns it).
Get Order (GetOrder)pureRPG Saga|Party FieldERSECompanionOrderGet Order
Stay (Stay)functionRPG Saga|Party FieldStops where it stands until told to follow again.

ARSEDoor

Module RSE. A door the player opens and closes (D-110): in exploration by interacting with it, in a Free Tactics battle with the Door command (it costs the action set in Free Tactics -> Doors).

NodeKindCategoryParametersReturnsDescription
Is Locked (IsLocked)pureRPG Saga|InteriorsboolIs Locked
Is Open (IsOpen)pureRPG Saga|InteriorsboolIs Open
On Door Changed (OnDoorChanged)eventRPG Saga|InteriorsDoor: ARSEDoor*
bOpen: bool
Raised when the door opens or closes.
Set Locked (SetLocked)functionRPG Saga|InteriorsbInLocked: boolLocks or unlocks it (a locked door cannot be opened, neither in exploration nor in battle).
Set Open (SetOpen)functionRPG Saga|InteriorsbInOpen: bool
bAnimate: bool = true
Opens or closes the door (swinging, or at once).

ARSEEncounterSite

Module RSE. D-182: where one encounter is fought in every battle mode, so the same encounter can start in any mode (its own, or the session's Battle Mode Override) on one map: - grid Tactics: Tactics Director (its zone is the grid; the deployment tiles and the enemies' tiles fall back to the zone when the encou...

NodeKindCategoryParametersReturnsDescription
Build Mode Report (BuildModeReport)pure, staticRPG Saga|Battle|Mode OverrideWorldContext: UObject*
InEncounter: URSEEncounterData*
Site: ARSEEncounterSite*
FRSEEncounterModeReportThe mode report of Encounter on World (Site: its encounter site, may be none): the data report, then grid Tactics needs a director with a zone (the site's, or one that has the encounter), classic modes an ATB director with a stage.
Find Site For (FindSiteFor)pure, staticRPG Saga|Battle|Mode OverrideWorldContext: UObject*
InEncounter: URSEEncounterData*
ARSEEncounterSite*The site of Encounter on World (its own encounter, or the asset it was copied from by a mode override), or null.
Get Mode Report (GetModeReport)pureRPG Saga|Battle|Mode OverrideFRSEEncounterModeReportWhich modes the encounter can run in at this site: its data report plus this map's battle sites (grid zone, classic stage, live area).
Start Encounter (StartEncounter)functionRPG Saga|Battle|Mode OverrideSource: AActor* = None
ReturnPoint: AActor* = None
boolStarts the encounter in the mode it is fought in now (its own, or the session's Battle Mode Override). Returns false when it did not start.

ARSEEncounterSpawner

Module RSE. Places visible enemy groups in the world (D-063, visible soldiers that start battles on contact; docs/design/random-encounters.md).

NodeKindCategoryParametersReturnsDescription
Force Contact (ForceContact)functionRPG Saga|EncountersStarts the battle of the first live group now, as if touched (Normal initiative). PIE testing.
Get Group Count (GetGroupCount)pureRPG Saga|Encountersint32Groups this spawner places now (Group Count x the frequency option's density x the time and weather density).
Get Group Reinforcements (GetGroupReinforcements)pureRPG Saga|EncountersGroupIndex: int32URSEReinforcementData*D-117: the reinforcements a group calls in its battles: this spawner's own, else its encounter's or pool's, else its behavior's. Null = none.
Is Group Defeated (IsGroupDefeated)pureRPG Saga|EncountersGroupIndex: int32boolThe group has been defeated and has not come back yet.
Is Spawner Enabled (IsSpawnerEnabled)pureRPG Saga|EncountersboolThe spawner places its groups (Enabled in the details).
On Encounter Contact (OnEncounterContact)eventRPG Saga|EncountersSpawner: ARSEEncounterSpawner*
GroupIndex: int32
Initiative: ERSEBattleInitiative
A touch started the battle of GroupIndex.
On Enemy Alerted (OnEnemyAlerted)eventRPG Saga|EncountersSpawner: ARSEEncounterSpawner*
Enemy: ARSERoamingEnemy*
bAlerted: bool
A leader noticed the party (bAlerted) or gave up (false).
On Group Defeated (OnGroupDefeated)eventRPG Saga|EncountersSpawner: ARSEEncounterSpawner*
GroupIndex: int32
A group was defeated and removed.
On Group Spawned (OnGroupSpawned)eventRPG Saga|EncountersSpawner: ARSEEncounterSpawner*
GroupIndex: int32
A group appeared (level start or respawn).
Reset Saved State (ResetSavedState)functionRPG Saga|EncountersForgets the saved state (defeats, group seeds) and places fresh groups. PIE testing.
Respawn All (RespawnAll)functionRPG Saga|EncountersBrings every group back now (clears the defeated state). Also a button for PIE testing.
Set Spawner Enabled (SetSpawnerEnabled)functionRPG Saga|EncountersbInEnabled: boolTurns the spawner on (spawns its live groups) or off (removes them; their state is kept).
Uses Free Tactics (UsesFreeTactics)pureRPG Saga|EncountersGroupIndex: int32boolThe group fights Free Tactics battles (this spawner's Free Tactics, or its encounter's battle mode).

ARSEEncounterTrigger

Module RSE. A volume on the exploration map that starts a battle when the explorer walks in (D-026).

NodeKindCategoryParametersReturnsDescription
Force Start Encounter (ForceStartEncounter)functionEncounterStarts the encounter now, ignoring rules (PIE testing: select the trigger in the PIE outliner).
Is Condition Met (IsConditionMet)overrideRPG Saga|BattleboolStory condition. Extension point: Phase 7 replaces the default with the unified Conditions system (CLAUDE.md 3.4). Default: always true. May be overridden in a Blueprint subclass meanwhile.
Reset Trigger (ResetTrigger)functionEncounterClears the saved state (consumed, counters) and re-arms.
Set Trigger Enabled (SetTriggerEnabled)functionRPG Saga|BattlebInEnabled: boolTurns the trigger on or off (a disabled trigger never starts its battle).
Try Start Encounter (TryStartEncounter)functionRPG Saga|BattleboolStarts the encounter if the rules allow it.

ARSEExplorationCharacter

Module RSE. The party leader walking the world in exploration.

NodeKindCategoryParametersReturnsDescription
Apply Settings (ApplySettings)functionExplorationRe-reads URSEExplorationSettings (speeds, camera). Also a button for live tuning in PIE.
Get Camera Arm (GetCameraArm)pureRPG Saga|Exploration|CameraURSEExplorationCameraArm*The exploration camera's arm (D-113): zoom, style, the view a battle hands back.
Get Idle Intent (GetIdleIntent)pureRPG Saga|Party FieldFRSEIdleIntentThe idle action shown now (inactive = none).
Get Party Member (GetPartyMember)pureRPG Saga|ExplorationURSECharacterData*Get Party Member
Is Fallen (IsFallen)pureRPG Saga|ExplorationboolIs Fallen
Is Pawn Input Blocked by Screen (IsPawnInputBlockedByScreen)pureRPG Saga|ExplorationboolD-152: a menu or another modal screen of this explorer's player is open (Exploration -> Block Pawn Input Under Screens): movement, camera and action input are ignored. Per local player.
Is Sneaking (IsSneaking)pureRPG Saga|ExplorationboolIs Sneaking
On Interact (OnInteract)eventRPG Saga|ExplorationCharacter: ARSEExplorationCharacter*Examine / talk. Phase 7 routes this to interactables; for now Blueprints and level scripts may listen.
Refresh Appearance (RefreshAppearance)functionExplorationLooks like AppearanceOverride, else the party leader (first ATB formation member) through its character data (D-046); without an appearance the placeholder shape stays. Call after the party changes.
Set Fallen (SetFallen)functionRPG Saga|ExplorationbFallen: boolFallen (D-109): lies on the ground (the knock-out pose, or the placeholder tipped over) until revived.
Set Party Member (SetPartyMember)functionRPG Saga|ExplorationMember: URSECharacterData*The party member this character is (null = the party's leader: the first of the formation).
Set Sneaking (SetSneaking)functionRPG Saga|ExplorationbSneak: boolSneaking: a slower walk, much harder to notice (Stealth settings).

ARSEFreeTacticsCameraPawn

Module RSE. The tactical camera of Free Tactics battles (D-097), in the style of modern party tactics games: it orbits a focus point on the ground, rotates freely (steps or held input), zooms, pans relative to its yaw and glides to the active unit and the actions.

NodeKindCategoryParametersReturnsDescription
Focus On (FocusOn)functionRPG Saga|Free Tactics|CameraWorldLocation: FVector
bInstant: bool = false
Glides to a world location (or cuts at once).
Get Tilt Offset (GetTiltOffset)pureRPG Saga|Free Tactics|CamerafloatGet Tilt Offset
Glide To (GlideTo)functionRPG Saga|Free Tactics|CameraWorldLocation: FVector
Seconds: float
D-115: a short glide of the focus to WorldLocation over Seconds (real time, eased in and out) at the current zoom and angle: the turn change reframe. Seconds <= 0 = FocusOn.
Pan (Pan)functionRPG Saga|Free Tactics|CameraInput: FVector2D
DeltaSeconds: float
Pans the focus: Input X = right, Y = forward relative to the camera's yaw.
Rotate By (RotateBy)functionRPG Saga|Free Tactics|CameraDegrees: floatRotates by Degrees (held input, mouse drag).
Rotate Step (RotateStep)functionRPG Saga|Free Tactics|CameraDirection: floatRotates by Free Tactics (Presentation) -> Camera Rotate Step in the sign of Direction.
Set Tilt Offset (SetTiltOffset)functionRPG Saga|Free Tactics|CameraDegrees: floatD-129: the exploration camera's tilt, kept on this camera's angle (degrees; positive = steeper). Not inside interiors.
Set Yaw (SetYaw)functionRPG Saga|Free Tactics|CameraYaw: float
bInstant: bool = false
Sets the yaw (degrees) and optionally cuts to it.
Zoom (Zoom)functionRPG Saga|Free Tactics|CameraAmount: floatPositive zooms in (steps of Camera Zoom Step).

ARSEFreeTacticsDirector

Module RSE. Presents a Free Tactics battle on the live map (D-097, docs/design/free-tactics.md sections 4-6) on every machine (D-141): plays the events back (walking along UnitMoved.Points, abilities through the battle cue player, falls, joins, the turn marker), the ground overlay (movement area, path, ability...

NodeKindCategoryParametersReturnsDescription
Answer Hazard Prompt (AnswerHazardPrompt)functionRPG Saga|Free TacticsbContinue: boolAnswers the warning: continue (the command goes to the host, which validates it again) or pick another path.
Cancel (Cancel)functionRPG Saga|Free TacticsCancel: leaves Target (back to Move), closes a list.
Confirm (Confirm)functionRPG Saga|Free TacticsConfirm: walk to the hovered point (Move), use the aimed ability (Target).
End Player Turn (EndPlayerTurn)functionRPG Saga|Free TacticsEnds the player's turn (facing where the unit looks).
Get Battle (GetBattle)pureRPG Saga|Free TacticsURSEFreeTacticsBattle*The battle this machine shows: the live one on the authority (single player, the host), the proxy on a guest (changing it there changes nothing: the host's state overwrites it). Presentation code reads GetBattleView.
Get Contact Point (GetContactPoint)pureRPG Saga|Free TacticsFVectorWhere the battle ring spread from.
Get Hazard Prompt Selection (GetHazardPromptSelection)pureRPG Saga|Free Tacticsint32The highlighted answer: 0 = continue, 1 = pick another path.
Get Hazard Prompt Text (GetHazardPromptText)pureRPG Saga|Free TacticsFTextThe warning ("Danger: not enough movement to go around. Crossing Fire: 30% Burn, ~12 damage. Continue?").
Get HUDOpacity (GetHUDOpacity)pureRPG Saga|Free TacticsfloatOpacity of the battle HUD's panels now (they fade in with the entry).
Get Input Mode (GetInputMode)pureRPG Saga|Free TacticsERSEFreeInputMode--- Player input (the controller, the HUD, dev commands) ---
Get Script Runner (GetScriptRunner)pureRPG Saga|Free TacticsURSEBattleScriptRunner*The battle's reinforcements and scripted events (the authority only; null on a guest and outside a battle).
Get Selected Target Id (GetSelectedTargetId)pureRPG Saga|Free Tactics|Targetingint32The unit chosen for the aimed ability (INDEX_NONE = none).
Get Targeting View (GetTargetingViewBP)pureRPG Saga|Free Tactics|TargetingFRSEFreeTargetingViewBlueprint: the targeting view.
Get Unit Actor (GetUnitActor)pureRPG Saga|Free TacticsUnitId: int32AActor*The world actor of a unit (null when none).
Get Unit Id Of (GetUnitIdOf)pureRPG Saga|Free TacticsActor: AActor*int32The unit an actor stands for (INDEX_NONE for none).
Get Unit Name (GetUnitName)pureRPG Saga|Free TacticsUnitId: int32FTextGet Unit Name
Is Awaiting Player (IsAwaitingPlayer)pureRPG Saga|Free TacticsboolThe player may act (a player unit's turn, nothing playing).
Is Battle Active (IsBattleActive)pureRPG Saga|Free TacticsboolIs Battle Active
Is Entry Playing (IsEntryPlaying)pureRPG Saga|Free TacticsboolThe battle's entry (the ring spreading, the enemies turning, the HUD fading in) is still playing: the first turn waits.
Is Hazard Prompt Open (IsHazardPromptOpen)pureRPG Saga|Free TacticsboolA walk, jump or carrying ability waits for the player's answer to the danger warning.
Is Picking Unit (IsPickingUnit)pureRPG Saga|Free Tactics|TargetingboolA single-target ability is being aimed (units are picked, not ground points).
Is Proxy (IsProxy)pureRPG Saga|Free TacticsboolD-141: this machine presents another machine's battle (a guest).
On Callout (BP_OnCallout)eventRPG Saga|Free TacticsCallout: FRSEFreeCallout (ref)A bark or an intent to show over a unit (Blueprint HUDs).
On Custom Menu Command (BP_OnCustomMenuCommand)eventRPG Saga|Free TacticsCommand: FGameplayTag
UnitId: int32
On Event Presented (BP_OnEventPresented)eventRPG Saga|Free TacticsEvent: FRSEBattleEvent (ref)A presented battle event (Blueprint).
On Notice (BP_OnNotice)eventRPG Saga|Free TacticsNotice: FInstancedStruct (ref)Every notice this presenter received (Blueprint: a custom notice's presentation).
Select Target (SelectTarget)functionRPG Saga|Free Tactics|TargetingUnitId: int32boolChooses a unit for the aimed single-target ability (Next / Previous, the mouse, scripts). Returns false when it is no candidate.
Set Hazard Prompt Selection (SetHazardPromptSelection)functionRPG Saga|Free TacticsIndex: int32Set Hazard Prompt Selection
Show Ability Preview (ShowAbilityPreview)functionRPG Saga|Free Tactics|TargetingPlayer: APlayerController*
EntryId: FName
Blueprint: preview an ability of the battle menu (custom menus); NAME_None clears it.

ARSEFrontEndPlayerController

Module RSE. Player controller of the main menu map: shows the mouse cursor, puts input in UI-only mode with the main menu focused (keyboard, gamepad and mouse) and carries out the chosen entries: - Continue: loads the most recent save, fades out and opens its map (URSESaveFlowSubsystem); - New Game: resets the...

NodeKindCategoryParametersReturnsDescription
On Transition Started (OnTransitionStarted)overrideRPG Saga|Front EndCalled when a fade-out towards a new map or quitting starts (hook for sounds or music fades in Blueprint).

ARSEGeneratedInterior

Module RSE. A generated interior (D-158, docs/product/buildings.md "Generated interiors"): the one actor of Buildings -> Generated Interior Map.

NodeKindCategoryParametersReturnsDescription
Clear Built (ClearBuilt)functionGenerated InteriorRemoves everything built.
Get Kit Build Stats (GetKitBuildStats)pureRPG Saga|BuildingsFRSEKitBuildStatsD-164 / K7: counts and time of the last kit build.
Set View Floor (SetViewFloor)functionRPG Saga|BuildingsFloor: int32Shows the floors up to Floor and hides the ones above it (the cutaway; -1 = all shown).

ARSEIdleSpot

Module RSE. A place the visible party uses while the leader rests (D-129): a bench to sit on, a wall to lean on (Kind = Idle.Spot.Sit / Idle.Spot.Lean: a Use Spot behaviour walks there, faces the arrow and loops its animation), or a point of interest the members look at (Kind = Idle.Spot.Interest: a statue, a v...

NodeKindCategoryParametersReturnsDescription
Is Point Of Interest (IsPointOfInterest)pureRPG Saga|Party FieldboolA point of interest: members look here (Interest kind, or Also Point Of Interest).

ARSEInteractableActor

Module RSE. Something the player examines or talks to in exploration (exploration.md, "Interactiuni / NPC").

NodeKindCategoryParametersReturnsDescription
Apply Settings (ApplySettings)functionRPG Saga|InteractionRe-applies the range and reach to the volume (live tuning).
Can Interact (Custom) (CanInteractCustom)overrideRPG Saga|InteractionInteractingPawn: APawn*boolExtra availability rule of a Blueprint subclass (the prompt shows only while it is true). Default: true.
Can Interact Now (CanInteractBP)pureRPG Saga|InteractionInteractingPawn: APawn*boolWhether a pawn may interact now (enabled, prompt conditions, Can Interact (Custom)).
Get Interactable Component (GetInteractableComponent)pureRPG Saga|InteractionURSEInteractableComponent*D-165: the component the interaction system focuses and runs (it asks this actor).
Get Prompt Text (GetPromptText)pureRPG Saga|InteractionFTextThe action shown in the prompt.
Interact (Interact)functionRPG Saga|InteractionInteractingPawn: APawn*boolRuns the interaction and/or starts the dialog, now, on this machine: what the Interact command applies on the authority (D-138). Player input goes through RequestInteract. Returns false when it could not interact.
On Interact (ReceiveInteract)overrideRPG Saga|InteractionInteractingPawn: APawn*
bSucceeded: bool
A custom interaction action (D-052): runs after the data (interaction, dialog, puzzle) when the player interacts. A Blueprint subclass that implements it is interactable even without any data (a lever, a switch, a shrine).
On Interacted (OnInteracted)eventRPG Saga|InteractionInteractable: ARSEInteractableActor*
InteractingPawn: APawn*
bSucceeded: bool
Raised after every interaction (Blueprint and level scripting hook).
Request Interact (RequestInteract)functionRPG Saga|InteractionInteractingPawn: APawn*boolInteracts as the player of InteractingPawn through the command bus (D-138): applied at once in single player and on the host, sent to the host from a guest. Returns true when it was applied (or sent).
Set Interaction Enabled (SetInteractionEnabled)functionRPG Saga|InteractionbInEnabled: boolTurns the interaction on or off (off: no prompt, Interact does nothing).

ARSEInteriorVolume

Module RSE. An interior (D-110): a house, a cave, a dungeon room.

NodeKindCategoryParametersReturnsDescription
Contains Point (ContainsPoint)pureRPG Saga|InteriorsWorldPoint: FVectorboolContains Point
Find At (FindAt)pure, staticRPG Saga|InteriorsWorldContextObject: UObject*
WorldPoint: FVector
ARSEInteriorVolume*The highest-priority interior volume containing WorldPoint (null when none).
Get Box (GetBox)pureRPG Saga|InteriorsUBoxComponent*Get Box
On View Changed (OnViewChanged)eventRPG Saga|InteriorsVolume: ARSEInteriorVolume*
bInside: bool
The view (exploration or battle camera) went into or out of this interior.

ARSELadder

Module RSE. A ladder between two floors (D-110; a traversal link since D-121): a body climbs from Bottom Point to Top Point with its kind's motion and animations (Project Settings -> Traversal -> Default Ladder Kind unless the actor has its own).

NodeKindCategoryParametersReturnsDescription
Get World Ends (GetWorldEnds)pureRPG Saga|InteriorsOutBottom: FVector (out)
OutTop: FVector (out)
Both ends in the world (centimeters, on their floors).
Set Ladder Points (SetLadderPoints)functionRPG Saga|InteriorsInBottom: FVector
InTop: FVector
Sets both ends (local, centimeters) and rebuilds the placeholder: scripts, level tools, tests.

ARSELockableActor

Module RSE, display name RSE Lockable. A locked door or chest (D-109): its Lock data (difficulty, who may pick it, keys) plus keys of its own.

NodeKindCategoryParametersReturnsDescription
Get Lock (GetLock)pureRPG Saga|Exploration RPGURSELockData*Get Lock
Is Locked (IsLocked)pureRPG Saga|Exploration RPGboolIs Locked
On Lock Changed (OnLockChanged)eventRPG Saga|Exploration RPGLockable: ARSELockableActor*
bUnlocked: bool
Reset Lock (ResetLock)functionRPG Saga|Exploration RPGLocked again (editor button, dev tools).
Try Pick (TryPick)functionRPG Saga|Exploration RPGMember: URSECharacterData*
bOutSuccess: bool (out)
boolPicks the lock by chance with Member (null = the best member able to): the delegated command and Auto Resolve mode. Returns false when nobody may try.
Unlock (Unlock)functionRPG Saga|Exploration RPGbAnimate: bool = trueOpens the lock (story, a key, a pick): its Unlock Effects run once.

ARSENPC

Module RSE. A talkable NPC: an interactable with a body (a capsule, plus its Appearance as an animated character (D-046) or a placeholder mesh), a speaker component (cues and barks find it), facing the player while talking, and an optional proximity bark.

NodeKindCategoryParametersReturnsDescription
Get Combat Character (GetCombatCharacter)pureRPG Saga|Exploration RPGURSECharacterData*The character it fights as when a battle makes it a combatant (null = it never fights).
Get NPCId (GetNPCId)pureRPG Saga|Exploration RPGFNameIts id for saves and requests: the living NPC id (else the actor's name).
Get NPCName (GetNPCName)pureRPG Saga|Exploration RPGFTextIts name for notifications: its Object Name, else its speaker's name, else its id.
Get Pickpocket (GetPickpocket)pureRPG Saga|Exploration RPGURSEPickpocketData*What it carries for thieves (null = nothing to steal).
Get Talk Component (GetTalkComponent)pureRPG Saga|NPCURSENPCTalkComponent*D-165: its talking behavior (lines, greeting, facing), driven with this NPC's settings.
Is Defeated (IsDefeated)pureRPG Saga|Exploration RPGboolIs Defeated
Is Present (IsPresent)pureRPG Saga|Exploration RPGboolIt is here and could talk (not away, not beaten, not hidden).
Say Line (SayLine)functionRPG Saga|NPCKind: FGameplayTagboolSays a line from its bark pools over its head (its own, its NPC Type's, else the project's default pools, plus the global ones), of Kind when it has such a line (an invalid Kind = any). Local presentation, never blocking. Returns false when it has nothing to say now.

ARSENPCPlace

Module RSE, display name NPC Place. Where living NPCs do their activities (D-104): a spot, an area or a route, found by Place Id from the NPCs' schedules (any actor tagged with the id works as a spot too).

NodeKindCategoryParametersReturnsDescription
Get Route Points (GetRoutePoints)pureRPG Saga|NPCTArray<FVector>The stops in world space (waypoints, else the spline sampled, else the place itself).

ARSENetGameState

Module RSENet. A game state that carries the replicated state sections from the start (D-140).

NodeKindCategoryParametersReturnsDescription
Get Net State (GetNetState)pureRPG Saga|Co-opURSENetStateComponent*Get Net State

ARSENetPlayerState

Module RSENet. A player state that carries the co-op identity and command transport from the start (D-140).

NodeKindCategoryParametersReturnsDescription
Get Net Player (GetNetPlayer)pureRPG Saga|Co-opURSENetPlayerComponent*Get Net Player

ARSEPuzzleDoor

Module RSE. A locked door or mechanism (D-039): open while OpenConditions pass (e.g.

NodeKindCategoryParametersReturnsDescription
Is Open (IsOpen)pureRPG Saga|PuzzlesboolThe door is open now (its Open Conditions pass).
Refresh (Refresh)functionRPG Saga|PuzzlesbAnimate: bool = trueRe-checks OpenConditions (also runs on every story or party change).

ARSERandomEncounterArea

Module RSE. Classic random ATB battles while the explorer walks inside this volume (D-022, D-026).

NodeKindCategoryParametersReturnsDescription
Force Encounter (ForceEncounter)functionRandom EncounterStarts one of the area's battles now (PIE testing).
Set Area Enabled (SetAreaEnabled)functionRPG Saga|BattlebInEnabled: boolTurns random battles in this area on or off.

ARSERoamingEnemy

Module RSE. A visible enemy in the world (D-063): the leader of a spawner's group (behavior profile, detection, chase, alert) or one of its followers (walks behind the leader).

NodeKindCategoryParametersReturnsDescription
Get Awareness (GetAwareness)pureRPG Saga|EncountersERSEStealthAwarenessUnaware, suspicious or alerted (its leader's for followers; alerted while it hunts the party).
Get Detection (GetDetection)pureRPG Saga|EncountersfloatIts detection meter (0..1, full = it noticed the party). Followers share the leader's.
Get Group Index (GetGroupIndex)pureRPG Saga|Encountersint32Group of the spawner it belongs to.
Get Roaming State (GetRoamingState)pureRPG Saga|EncountersERSERoamingStateWhat it is doing: idle, alerted, chasing, fleeing, returning, stunned (after a fled battle) or sleeping (far away).
Get Spawner (GetSpawner)pureRPG Saga|EncountersARSEEncounterSpawner*The spawner that placed it (its group, battle and respawn).
Investigate (Investigate)functionRPG Saga|EncountersPoint: FVector
Seconds: float
boolComes to look at Point for Seconds (a distraction, D-109): the group walks there, looks around and goes back. Ignored while it hunts the party (Exploration RPG -> Alerted Ignore Distractions), in a battle, as a corpse or stunned. Returns true when it goes to look.
Is Aware Of Party (IsAwareOfParty)pureRPG Saga|EncountersboolIt has noticed the party (alerted or chasing).
Is Leader (IsLeader)pureRPG Saga|EncountersboolIt leads its group (followers walk behind the leader and share its awareness).
Is Unaware (IsUnaware)pureRPG Saga|EncountersboolAttacking it now counts as attacking unseen (its meter is below Stealth -> Unseen Below).

ARSESavePoint

Module RSE. A save point in the world (D-010).

NodeKindCategoryParametersReturnsDescription
Use (Use)functionSave PointUses the save point as if the player pressed Interact in range (PIE testing: select it in the PIE outliner).

ARSESceneTrigger

Module RSE. A volume that plays a story scene when the player's pawn walks in (D-043).

NodeKindCategoryParametersReturnsDescription
Force Play (ForcePlay)functionScenePlays the scene now, ignoring seen state and conditions (PIE testing: select the trigger in the PIE outliner).
Try Play (TryPlay)functionRPG Saga|ScenesboolPlays the scene if it is not seen and the conditions pass. Returns true when it was queued.

ARSESurfaceSpot

Module RSE. A surface that lies in the level before any battle (D-112): the water of a ford, a puddle of oil by the barrels, a poison marsh.

NodeKindCategoryParametersReturnsDescription
Get World Corners (GetWorldCorners)pureRPG Saga|Free Tactics|FieldOutCorners: TArray<FVector> (out)The four corners of the rectangle on the ground (world, centimeters), or the circle's center repeated.
Set Spot Enabled (SetSpotEnabled)functionRPG Saga|Free Tactics|FieldbInEnabled: boolTurns the spot on or off (a drained ford, an oil puddle already burnt).

ARSESwimVolume

Module RSE. A traversal volume placed in the level (D-121, docs/design/traversal.md): deep water by default.

NodeKindCategoryParametersReturnsDescription
Contains Point 2D (ContainsPoint2D)pureRPG Saga|TraversalPoint: FVector (ref)boolWhether a world point lies inside the box (in X and Y; any height up to the surface).
Get Kind (GetKind)pureRPG Saga|TraversalURSETraversalVolumeKindData*The kind in use: the actor's own, else Project Settings -> Traversal -> Default Swim Kind.
Get Surface Z (GetSurfaceZ)pureRPG Saga|TraversalfloatHeight of the surface (world, cm): the box's top.
Set Kind (SetKind)functionRPG Saga|TraversalInKind: URSETraversalVolumeKindData*Sets the kind (scripts, level tools, tests). Null = the settings' default.

ARSETacticsBattleDirector

Module RSE. Runs a Tactics encounter on a zone of the live map (D-009) and presents it (D-006).

NodeKindCategoryParametersReturnsDescription
Begin Encounter (BeginEncounter)functionRPG Saga|BattleStarts the encounter: deployment (or auto-deploy), or the legacy battle without encounter data.
End Encounter (EndEncounter)functionRPG Saga|BattleTears the current encounter down and returns to Idle without starting a new one (back to exploration).
Get Battle (GetBattle)pureRPG Saga|BattleURSETacticsBattle*The running (or last) battle, or none.
Get Battle Outcome (GetBattleOutcome)pureRPG Saga|BattleERSEBattleOutcomeOutcome of the running or last battle (Ongoing without one).
Get Encounter (GetEncounterBP)pureRPG Saga|BattleURSEEncounterData*The encounter this director fights.
Get Last Rewards (GetLastRewards)pureRPG Saga|BattleFRSEBattleRewardsWhat the last finished battle gave the party (experience, levels, items; D-030). Empty unless it was won.
Get Phase (GetPhase)pureRPG Saga|BattleERSEDirectorPhaseIdle, deployment, battle or finished.
Get Unit Actor (GetUnitActor)pureRPG Saga|BattleUnitId: int32ARSEGridUnit*The actor presenting a unit, or none.
Get Unit Id (GetUnitId)pureRPG Saga|BattleActor: ARSEGridUnit*int32Battle id of the unit an actor presents (-1 for none).
Get Unit Name (GetUnitName)pureRPG Saga|BattleUnitId: int32FTextDisplay name of a battle unit.
Is Awaiting Command (IsAwaitingCommand)pureRPG Saga|BattleboolTrue when a player-controlled unit is waiting for a command (no events playing).
Is Playback Idle (IsPlaybackIdle)pureRPG Saga|BattleboolTrue when no events are waiting to be shown and nothing is being presented.
On Event Presented (BP_OnEventPresented)eventRPG Saga|BattleEvent: FRSEBattleEvent (ref)Fired when a battle event is shown (after playback ordering): damage numbers, custom HUDs, sounds.
Restart Encounter (RestartEncounter)functionRPG Saga|BattleTears everything down and begins the encounter again.
Set Encounter (SetEncounter)functionRPG Saga|BattleNewEncounter: URSEEncounterData*boolReplaces the encounter this director fights, only while no encounter runs (Idle): one battle site of a map can host another encounter (story tools, dev commands, D-079). Its unit coordinates must fit the site's zone. Returns false during an encounter.
Start Battle (StartBattle)functionRPG Saga|BattleboolEnds deployment and starts the battle.

ARSETacticsZone

Module RSE. A pre-placed area of the live map that turns into a tactical battlefield (decision D-009).

NodeKindCategoryParametersReturnsDescription
Bake Grid (BakeGrid)functionTactics ZoneRebuilds the grid by tracing level geometry, then applies TileOverrides.
Clear Highlights (ClearHighlights)functionTactics ZoneClears the selection highlights (danger, move, path, target and area layers, the cursor, the ability preview's layers).
Measure Surface (MeasureSurface)functionTactics ZoneMeasures the real surface under every tile again, without changing the grid (heights, walkability, terrain).

ARSETimeOfDayActor

Module RSE, display name Time of Day & Weather. The sky of a level (D-101, docs/design/time-weather.md): drop it into any level.

NodeKindCategoryParametersReturnsDescription
Get Active Profile (GetActiveProfile)pureRPG Saga|TimeURSETimeOfDayProfile*The profile in use (the actor's or the default).
Get Displayed Hour (GetDisplayedHour)pureRPG Saga|TimefloatThe hour the sky shows now.
Recapture Sky (RecaptureSky)functionRPG Saga|TimeRecaptures the sky light now.
Snap Now (SnapNow)functionRPG Saga|TimeApplies everything now without blending (after a skip, a load).

ARSETrapActor

Module RSE, display name RSE Trap. A trap in the world (D-109): a pressure plate, a tripwire, a gas vent, an arrow trap (its Trap data).

NodeKindCategoryParametersReturnsDescription
Get Trap (GetTrap)pureRPG Saga|Exploration RPGURSETrapData*Get Trap
Get Trigger Radius (GetTriggerRadius)pureRPG Saga|Exploration RPGfloatThe trap's size on the ground (cm): a party member touching it sets it off.
Is Armed (IsArmed)pureRPG Saga|Exploration RPGboolIt can still go off (not disarmed, not spent).
Is Disarmed (IsDisarmed)pureRPG Saga|Exploration RPGboolIs Disarmed
Is Revealed (IsRevealed)pureRPG Saga|Exploration RPGboolIs Revealed
On Trap Disarmed (OnTrapDisarmed)eventRPG Saga|Exploration RPGTrap: ARSETrapActor*
Member: URSECharacterData*
On Trap Revealed (OnTrapRevealed)eventRPG Saga|Exploration RPGTrap: ARSETrapActor*
Member: URSECharacterData*
On Trap Triggered (OnTrapTriggered)eventRPG Saga|Exploration RPGTrap: ARSETrapActor*
Member: URSECharacterData*
Reset Trap (ResetTrap)functionRPG Saga|Exploration RPGBack to hidden and armed (editor button, dev tools).
Reveal (Reveal)functionRPG Saga|Exploration RPGMember: URSECharacterData*A member spotted it (Member null = found another way): the marker shows.
Set Off (SetOff)functionRPG Saga|Exploration RPGVictim: AActor*Sets it off on Victim (a party pawn; null = the leader).
Try Disarm (TryDisarm)functionRPG Saga|Exploration RPGMember: URSECharacterData*
bOutSuccess: bool (out)
boolTries to disarm it with Member (null = the best member able to). A failure may set it off (the trap's Failure Triggers). Returns false when nobody may try (then bOutSuccess is false too).

ARSETraversalActor

Module RSE. A placed traversal link (D-121, docs/design/traversal.md): a ladder, a rope, a jump across a gap, a vault, a drop, a zip-line.

NodeKindCategoryParametersReturnsDescription
Get Direction From (GetDirectionFrom)pureRPG Saga|TraversalLocation: FVector (ref)ERSETraversalDirectionThe direction a body at Location would take: from the end nearer to it.
Get Kind (GetKind)pureRPG Saga|TraversalURSETraversalLinkKindData*The kind in use: the actor's own, else the settings' default for its shape (GetDefaultKind).
Get World Path (GetWorldPath)pureRPG Saga|TraversalDirection: ERSETraversalDirection
OutPoints: TArray<FVector> (out)
The link's points in the world (centimeters, feet positions), in the order a body takes them going Direction.
Is Bidirectional (IsBidirectional)pureRPG Saga|TraversalboolThe link may be taken from the end point back to the start.
Set Kind (SetKind)functionRPG Saga|TraversalInKind: URSETraversalLinkKindData*Sets the kind (scripts, level tools, tests). Null = the settings' default.
Set Ways (SetWays)functionRPG Saga|TraversalInWays: ERSETraversalWaysSets which ways it may be taken.

Module RSE. A generic placed link (D-121): Start Point, End Point and optional points in between, edited with the viewport widgets.

NodeKindCategoryParametersReturnsDescription
Set Link Points (SetLinkPoints)functionRPG Saga|TraversalInStart: FVector
InEnd: FVector
InVia: TArray<FVector> (ref)
Sets the points (local, centimeters): scripts, level tools, tests.

ARSEWorldInteractable

Module RSE. A ready-made world object of the interaction library (D-150, docs/product/interaction-library.md): pick an Interactable Data asset (a chest, a campfire, a lantern, a signpost, a danger warning, an examine spot, a shrine, a gathering node, a viewpoint, an obstacle, a class-action object) and place it...

NodeKindCategoryParametersReturnsDescription
Get Danger Level (GetDangerLevel)pureRPG Saga|InteractablesfloatHow dangerous this place is (Danger Override, else the area's progression zone, else the settings' default).
Get Data (GetData)pureRPG Saga|InteractablesURSEInteractableData*Get Data
Get State (GetState)pureRPG Saga|InteractablesFRSEInteractableSaveStateThe saved state now.
Get Visual (GetVisual)pureRPG Saga|InteractablesERSEInteractableVisualThe look now (Default, Active, Depleted).
On Reacted (OnReacted)eventRPG Saga|InteractablesInteractable: ARSEWorldInteractable*
Rule: FName
D-157: raised when an ability used on the world changed it (the rule's name).
On Used (OnUsed)eventRPG Saga|InteractablesInteractable: ARSEWorldInteractable*
Outcome: FRSEInteractableOutcome (ref)
Raised after every use on the authority (Blueprint and level scripting).
Refresh Now (RefreshNow)functionInteractableRe-reads the state and the clock and applies the look (live tuning).
Set Data (SetData)functionRPG Saga|InteractablesInData: URSEInteractableData*Sets the kind (tools, Blueprint) and refreshes the look.

ARSEZoneExit

Module RSE. A way to another map (D-044, docs/design/zones-travel.md): a road or a door with a destination map and arrival point.

NodeKindCategoryParametersReturnsDescription
Try Exit (TryExit)functionRPG Saga|TravelInteractingPawn: APawn*ERSEZoneExitResultTries the exit for InteractingPawn's player through the Take Zone Exit command (D-138): on the authority, travel (after the question, if any; in co-op the group travel rule decides) or the blocked lines. On a guest the request goes to the host and the local evaluation is returned.

URSEAIBattleBrain

Module RSECore. The AI state of one battle (D-056): per-unit boss phases and last stands, the team blackboards and the debugger's decision records.

NodeKindCategoryParametersReturnsDescription
Get Focus Target (GetFocusTarget)pureRPG Saga|AITeam: FGameplayTagint32The team's shared focus target, INDEX_NONE if none.
Get Last Decision Record (GetLastDecisionRecord)pureRPG Saga|AIOutRecord: FRSEAIDecisionRecord (out)boolThe last AI decision of a unit with its scored options (debugger).
Get Own Turns (GetOwnTurns)pureRPG Saga|AIUnitId: int32int32Own turns a unit has started in this battle.
Get Phase (GetPhase)pureRPG Saga|AIUnitId: int32int32Boss phase of a unit: 0 = its base behaviour, N = the Nth phase entered.
Get Support Threat (GetSupportThreat)pureRPG Saga|AITeam: FGameplayTag
EnemyId: int32
floatRemembered threat of EnemyId to Team's Support units (tenths of their max HP).
Get Team Value (GetTeamValue)pureRPG Saga|AITeam: FGameplayTag
Key: FName
Default: float = 0.000000
floatA value on a team's AI blackboard (custom AI rules share information through it).
Set Team Value (SetTeamValue)functionRPG Saga|AITeam: FGameplayTag
Key: FName
Value: float
Free blackboard values (custom Blueprint scorers can share state through them).

URSEAIBlueprintLibrary

Module RSECore. Battle reads for Blueprint AI conditions and scorers (D-052, D-056): subclass URSEAICondition / URSEAIScorer in Blueprint, override IsMet / Score and query the battle through these nodes.

NodeKindCategoryParametersReturnsDescription
Are Enemies (AreEnemies)pure, staticRPG Saga|AIContext: FRSEAIContext (ref)
UnitA: int32
UnitB: int32
boolWhether two units are on different teams.
Count Units (CountUnits)pure, staticRPG Saga|AIContext: FRSEAIContext (ref)
bAllies: bool
MaxDistance: int32 = -1
int32Active units on a side of the deciding unit within MaxDistance (negative = anywhere). Allies include the unit itself.
Evaluate Scalar (EvaluateScalar)pure, staticRPG Saga|AIScalar: FRSEAIScalar (ref)
Intelligence: float
floatA profile's value of an AI scalar at an intelligence (configurator previews, custom scorers).
Get Attribute (GetAttribute)pure, staticRPG Saga|AIContext: FRSEAIContext (ref)
UnitId: int32
Attribute: FGameplayTag
floatFinal value of a unit's attribute (Stat.Attack, a derived or custom attribute).
Get Context Battle (GetContextBattle)pure, staticRPG Saga|AIContext: FRSEAIContext (ref)URSEBattle*The battle of the context.
Get Deciding Unit Id (GetDecidingUnitId)pure, staticRPG Saga|AIContext: FRSEAIContext (ref)int32The unit deciding (the AI unit whose option is scored).
Get Distance (GetDistance)pure, staticRPG Saga|AIContext: FRSEAIContext (ref)
UnitA: int32
UnitB: int32
int32Distance between two units (tiles in Tactics, 0 in the classic modes).
Get HPPercent (GetHPPercent)pure, staticRPG Saga|AIContext: FRSEAIContext (ref)
UnitId: int32
floatHP of a unit in percent of its maximum (0 if missing).
Get Resource (GetResource)pure, staticRPG Saga|AIContext: FRSEAIContext (ref)
UnitId: int32
Resource: FGameplayTag
OutPercent: float (out)
floatA resource of a unit (any configured resource: HP, MP, Resonance, Rage...): its value, and its percentage of the maximum.
Get Target Id (GetTargetId)pure, staticRPG Saga|AIContext: FRSEAIContext (ref)int32The option's primary target (-1 for team-level checks and phase triggers).
Get Team Focus Target (GetTeamFocusTarget)pure, staticRPG Saga|AIContext: FRSEAIContext (ref)int32The deciding unit's team focus target (INDEX_NONE if none).
Get Unit (GetUnit)pure, staticRPG Saga|AIContext: FRSEAIContext (ref)
UnitId: int32
OutUnit: FRSEBattleUnit (out)
boolA unit of the context's battle. False if it does not exist.
Get Unit Ids (GetUnitIds)pure, staticRPG Saga|AIContext: FRSEAIContext (ref)
bAllies: bool
TArray<int32>Active unit ids on a side of the deciding unit (allies include the unit itself).
Has Status (HasStatus)pure, staticRPG Saga|AIContext: FRSEAIContext (ref)
UnitId: int32
Status: FGameplayTag
boolWhether a unit has a status matching the tag.
Is Weak To (IsWeakTo)pure, staticRPG Saga|AIContext: FRSEAIContext (ref)
UnitId: int32
Element: FGameplayTag
boolWhether a unit is weak to an element.

URSEAICondition

Module RSECore. A condition of an AI rule, a boss phase trigger or a composite (D-056).

NodeKindCategoryParametersReturnsDescription
Describe (Describe)overrideRPG Saga|AIFStringShort text for the debugger and logs ("HP < 30% (Target)").
Get Requirement Text (GetRequirementText)overrideRPG Saga|AIFTextWhat the player reads when this condition keeps an ability disabled (D-082 Use Conditions): "Only below 30% HP", "Requires a Sword". Empty = no text of its own (the menu then shows a generic reason).
Is Met (IsMet)overrideRPG Saga|AIContext: FRSEAIContext (ref)boolWhether the condition holds for the context (the unit deciding, the option's target).

URSEAIDebugViewModel

Module RSE. In-game AI debugger (D-056): the last AI decision of the running battle (unit, profile, phase, intelligence, the best options with their score terms) and rank labels on the Tactics tiles.

NodeKindCategoryParametersReturnsDescription
Get Debugged Battle (GetDebuggedBattle)pureRPG Saga|UI|AIDebugURSEBattle*Get Debugged Battle
Toggle Debugger (ToggleDebugger)functionRPG Saga|UI|AIDebugTurns RSE.AI.Debug on or off.

URSEAIDecisionPolicy

Module RSECore, display name Custom Decision Policy (Blueprint). D-168: the last word on a unit's decisions, for special enemies scripted without changing the AI.

NodeKindCategoryParametersReturnsDescription
Override Decision (OverrideDecision)overrideRPG Saga|AIContext: FRSEAIContext (ref)
Options: TArray<FRSEAIOptionView> (ref)
ChosenIndex: int32
OutIndex: int32 (out)
boolFinal choice. Options are best first; ChosenIndex is the utility's pick. Return true and set OutIndex to choose another option (an invalid index keeps the pick). Context: the unit deciding, the intelligence, the brain (TargetId empty).
Override Target (OverrideTarget)overrideRPG Saga|AIContext: FRSEAIContext (ref)
Candidates: TArray<int32> (ref)
OutTargetId: int32 (out)
boolTarget of the chosen ability. Candidates: every unit the same ability (or item) was scored on, from the same place, best first; Context.TargetId is the current target and Context.Ability the ability. Return true and set OutTargetId to aim it at another candidate (not a candidate = kept).

URSEAIInterop

Module RSE. Our AI for the buyer's AI (D-175, docs/product/ai-interop.md): what the Behavior Tree tasks, decorators and services, and the StateTree companion's tasks call.

NodeKindCategoryParametersReturnsDescription
Actor Has Status (ActorHasStatus)pure, staticRPG Saga|AI InteropActor: AActor*
Status: FGameplayTag
boolActor's battle unit has a status that matches Status (parents match children). False outside a battle.
Claim Battle Side (ClaimBattleSide)function, staticRPG Saga|AI InteropController: AAIController*
Team: FGameplayTag
The AI controller becomes the brain of one side of the battle (Team): its tree plays that side's units, one at a time (Grid Tactics: the active unit; ATB: a ready unit), and the framework's AI leaves them alone.
Execute Decision (ExecuteDecision)function, staticRPG Saga|AI InteropActor: AActor*
Decision: FRSEAIInteropDecision (ref)
boolRuns a decision picked for Actor on its battle (the authority). Returns true when the battle took it.
Get Actor Battle Mode (GetActorBattleMode)pure, staticRPG Saga|AI InteropActor: AActor*
OutMode: ERSEAIInteropMode (out)
boolThe battle mode Actor's unit fights in. Returns false outside a battle.
Is Actor in Battle (IsActorInBattle)pure, staticRPG Saga|AI InteropActor: AActor*boolActor is a unit of a running battle (a live Free Tactics battle, or one a project registered).
Is Actors Turn (IsActorsTurn)pure, staticRPG Saga|AI InteropActor: AActor*boolIt is Actor's unit's turn in its battle.
Pick Best Action For (PickBestActionFor)function, staticRPG Saga|AI InteropActor: AActor*
Intelligence: float
OutDecision: FRSEAIInteropDecision (out)
boolWhat our AI would do with Actor's turn now. Intelligence negative = the battle's own (false when the battle states none: pass a value 0-1). Read it, then call Execute Decision, or act on it yourself.
Release Battle Side (ReleaseBattleSide)function, staticRPG Saga|AI InteropController: AAIController*The side goes back to the framework's AI.

URSEAIScorer

Module RSECore. A custom consideration added to the score of every ability option (D-056): Weight x Score(context).

NodeKindCategoryParametersReturnsDescription
Score (Score)overrideRPG Saga|AIContext: FRSEAIContext (ref)floatRaw value of the option in Context (the option's target and ability are set).

URSEAIStyleLibrary

Module RSECore. D-168: building AI styles without code (the AI Style wizard, scripts and tests use the same functions).

NodeKindCategoryParametersReturnsDescription
Apply Sliders (ApplySliders)function, staticRPG Saga|AIProfile: URSEAIProfile*
Sliders: FRSEAIStyleSliders (ref)
Turns the sliders into Profile's weights. Profile must hold the base style's values (a copy of it): the sliders scale them, so applying twice compounds. Stores Sliders in Profile->StyleSliders.
Make Boss Phase (MakeBossPhase)pure, staticRPG Saga|AIStep: FRSEAIBossStep (ref)FRSEAIPhaseThe boss phase a simple step stands for.
Make Boss Step (MakeBossStep)pure, staticRPG Saga|AIPhase: FRSEAIPhase (ref)FRSEAIBossStepA phase as a simple step (its first trigger and first summon; what a step cannot express is left out).
Set Boss Steps (SetBossSteps)function, staticRPG Saga|AIProfile: URSEAIProfile*
Steps: TArray<FRSEAIBossStep> (ref)
Replaces Profile's phases with Steps (in order) and marks it a boss style. Empty Steps keeps no phases.

URSEATBHUDViewModel

Module RSE. The classic battle HUD (ATB and turn-based, D-021 / D-022 / D-050, D-052): party rows with resources and gauges, enemy chips, command menu, target preview and marker, time mode or round, turn order strip, log, banner, key prompts.

NodeKindCategoryParametersReturnsDescription
Choose Command (ChooseCommand)functionRPG Saga|UI|Battle HUDIndex: int32Choose Command
Choose Target (ChooseTarget)functionRPG Saga|UI|Battle HUDUnitId: int32While a target is chosen: aims at UnitId and confirms (click on its chip).
Choose Target Entry (ChooseTargetEntry)functionRPG Saga|UI|Battle HUDIndex: int32While a target is chosen: picks target list entry Index and confirms (click on the row).
Hover Command (HoverCommand)functionRPG Saga|UI|Battle HUDIndex: int32Hover Command
Hover Target (HoverTarget)functionRPG Saga|UI|Battle HUDUnitId: int32While a target is chosen: aims at UnitId (mouse over its chip).
Hover Target Entry (HoverTargetEntry)functionRPG Saga|UI|Battle HUDIndex: int32While a target is chosen: puts the cursor on target list entry Index (mouse over the row).
Toggle Time Mode (ToggleTimeMode)functionRPG Saga|UI|Battle HUDSwitches Wait / Active (the hint's key does the same).

URSEAbilityReaction

Module RSECore, display name Reaction. An automatic response of a unit (D-055): counterattack, overwatch, on-hit / on-death triggers.

NodeKindCategoryParametersReturnsDescription
Can Trigger (CanTrigger)overrideRPG Saga|Abilities|ReactionsBattle: URSEBattle*
ReactorId: int32
TriggerUnitId: int32
boolCustom rule on top of the fields above (Blueprint subclasses). Default: true.

URSEAbilityTestLibrary

Module RSECore. Test ability (D-167): runs an ability headless in mini battles and measures it.

NodeKindCategoryParametersReturnsDescription
Ability Test Report to Text (AbilityTestReportToText)pure, staticRPG Saga|Abilities|TestReport: FRSEAbilityTestReport (ref)FStringThe report as plain text (logs, Python, copy to clipboard).
Get Ability Test Presets (GetAbilityTestPresets)pure, staticRPG Saga|Abilities|TestTArray<FRSEAbilityTestPreset>The target presets of Ability Test settings.
Make Ability Test Request (MakeAbilityTestRequest)pure, staticRPG Saga|Abilities|TestAbility: URSEAbilityData*
Mode: FGameplayTag
FRSEAbilityTestRequestA request for Ability with the settings' defaults (caster, default preset, Tactics, default level and runs).
Resolve Test Character (ResolveTestCharacter)pure, staticRPG Saga|Abilities|TestSource: URSEPrimaryDataAsset*URSECharacterData*The character a test unit source stands for: the character itself, or an archetype's template character.
Run Ability Test (RunAbilityTest)function, staticRPG Saga|Abilities|TestRequest: FRSEAbilityTestRequest (ref)FRSEAbilityTestReportUses Request.Ability Runs times, each in a fresh mini battle of the chosen mode (seed Seed + run), from the caster on its targets, and measures it: hits, damage and healing ranges, statuses with the chance that landed, costs, the area, and a step-by-step trace of the first run. Headless and deterministic: the same request always gives the same report.

URSEActionAIController

Module RSECore. The real-time AI of action battles (A2, D-171; docs/design/action-battle.md): the shared utility AI (profiles, roles, scorers, gates, intelligence curves, rules, boss phases, the Decision Policy hook) adapted to real time.

NodeKindCategoryParametersReturnsDescription
Apply Party Order (ApplyPartyOrderBP)functionRPG Saga|Action AICommand: FRSEActionPartyOrderCommand (ref)
OutReason: FText (out)
boolBlueprint form of ApplyPartyOrder.
Get Battle (GetBattle)pureRPG Saga|Action AIURSEActionBattle*Get Battle
Get Intelligence (GetIntelligence)pureRPG Saga|Action AIUnitId: int32floatThe intelligence a unit decides with: its team's, else the party's (Action AI -> Party Intelligence) or Default Intelligence.
Get Intent (GetIntent)pureRPG Saga|Action AIUnitId: int32
OutIntent: FRSEActionAIIntent (out)
boolThe unit's current decision. Returns false when there is none.
Get Leader (GetLeader)pureRPG Saga|Action AIUnitId: int32int32The unit a member's order refers to (the issuing player's unit), INDEX_NONE if none.
Get Party Order (GetPartyOrder)pureRPG Saga|Action AIUnitId: int32ERSEActionPartyOrderA member's order (Action AI -> Default Party Order until one is given).
Get Unit Memory (GetMemoryBP)pureRPG Saga|Action AIUnitId: int32
OutMemory: FRSEActionAIUnitMemory (out)
boolMemory of a unit. Returns false if the controller never saw it.
Initialize (Initialize)functionRPG Saga|Action AIInBattle: URSEActionBattle*
SeedSalt: int32 = 0
Starts driving Battle. SeedSalt: mixed into the battle's seed (two controllers on one battle decide independently).
Is Driving (IsDriving)pureRPG Saga|Action AIUnitId: int32boolWhether the AI drove the unit on the last step.
Request Decision (RequestDecision)functionRPG Saga|Action AIUnitId: int32Makes the unit decide again on the next Think (a script moved it, its target changed).
Run (Run)functionRPG Saga|Action AIMaxSeconds: floatboolRuns the battle (Think, then one step) until it ends or MaxSeconds of battle time pass. Returns true when it ended.
Set Party Order (SetPartyOrder)functionRPG Saga|Action AIUnitId: int32
Order: ERSEActionPartyOrder
Issuer: FRSEPlayerId
boolOrders one party member (host side; guests go through FRSEActionPartyOrderCommand). Returns false for an invalid unit.
Set Team Intelligence (SetTeamIntelligence)functionRPG Saga|Action AITeam: FGameplayTag
Intelligence: float
Intelligence (0-1, D-007) of a team's units (the adaptive value of the side it plays).
Set Team Party Order (SetTeamPartyOrder)functionRPG Saga|Action AITeam: FGameplayTag
Order: ERSEActionPartyOrder
Issuer: FRSEPlayerId
int32Orders every member of Team. Returns how many were ordered.
Think (Think)functionRPG Saga|Action AIDecides, executes and reacts for every driven unit (call before every battle step; host only).

URSEActionAgent

Module RSE. RSE Action Agent

NodeKindCategoryParametersReturnsDescription
Can Accept Action Order (CanAcceptActionOrder)overrideRPG Saga|Action AgentboolThe pawn can take an order now (alive, not stunned, not locked in an animation). The AI waits when it cannot.
Get Action Battle Control (GetActionBattleControl)overrideRPG Saga|Action AgentERSEActionAgentControlWho plays this pawn's unit in an action battle: the framework's AI (default), or the pawn's own brain. Read when the unit joins.
Is Busy with Order (IsBusyWithOrder)overrideRPG Saga|Action AgentboolAn order is still being carried out (a walk in progress, an ability playing).
On Action Battle Joined (OnActionBattleJoined)overrideRPG Saga|Action AgentUnitId: int32The pawn's unit joined an action battle (UnitId is its id there; the nodes find it from the pawn, this is for Blueprint brains).
On Action Battle Left (OnActionBattleLeft)overrideRPG Saga|Action AgentThe action battle ended (or the unit left it).
Order Move To (OrderMoveTo)overrideRPG Saga|Action AgentWorldLocation: FVector (ref)
AcceptanceRadius: float
boolWalk (or run) to WorldLocation and stop within AcceptanceRadius (cm). Returns true when the pawn took the order.
Order Stop (OrderStop)overrideRPG Saga|Action AgentCancels the order in progress (movement and a started ability that can still be cancelled).
Order Use Ability (OrderUseAbility)overrideRPG Saga|Action AgentAbility: URSEAbilityData*
TargetActor: AActor*
TargetLocation: FVector (ref)
boolUse Ability on TargetActor (null: at TargetLocation, a point in the world). The pawn plays it with its own animation and combat code. Returns true when the pawn took the order.

URSEActionAgents

Module RSE. The action agent of an actor: the actor itself when it implements IRSEActionAgent, else its component that does.

NodeKindCategoryParametersReturnsDescription
Agent Use Ability (AgentUseAbility)function, staticRPG Saga|Action AgentActor: AActor*
Ability: URSEAbilityData*
TargetActor: AActor*
TargetLocation: FVector
boolOrders Actor's agent to use an ability. Returns false when Actor is not an agent or it did not take the order.
Can Agent Accept Order (CanAgentAcceptOrder)pure, staticRPG Saga|Action AgentActor: AActor*boolThe agent can take an order now (false for a non-agent).
Find Action Agent (FindActionAgent)pure, staticRPG Saga|Action AgentActor: AActor*UObject*The object that answers IRSEActionAgent for Actor (the actor, or its component), or null.
Get Battle Control (GetBattleControl)pure, staticRPG Saga|Action AgentActor: AActor*ERSEActionAgentControlWho plays Actor's unit in action battles (Framework for a non-agent).
Is Action Agent (IsActionAgent)pure, staticRPG Saga|Action AgentActor: AActor*boolActor implements the interface itself or through a component.
Is Agent Busy (IsAgentBusy)pure, staticRPG Saga|Action AgentActor: AActor*boolThe agent is still carrying out an order (false for a non-agent).
Move Agent To (MoveAgentTo)function, staticRPG Saga|Action AgentActor: AActor*
WorldLocation: FVector
AcceptanceRadius: float = 50.000000
boolOrders Actor's agent to move. Returns false when Actor is not an agent or it did not take the order.
Stop Agent (StopAgent)function, staticRPG Saga|Action AgentActor: AActor*Stops Actor's agent.

URSEActionBattle

Module RSECore. Headless real-time action battle (D-171, docs/design/action-battle.md): the sixth battle mode, from sword fights to RPG shooters, on the same party, abilities, items, damage pipeline, statuses (control statuses included, D-167) and objectives as the other modes (URSEBattle).

NodeKindCategoryParametersReturnsDescription
Advance (Advance)functionRPG Saga|Action BattleDeltaSeconds: floatAdvances simulated time in fixed steps (the remainder is kept for the next call).
Assign Controller (AssignController)functionRPG Saga|Action BattleUnitId: int32
Player: FRSEPlayerId
Gives Player command of a unit (the driver at the start; None = the AI). No event.
Can Use Ability (CanUseAbility)pureRPG Saga|Action BattleUnitId: int32
Ability: URSEAbilityData*
ERSEActionCommandResultWhether UnitId could use Ability now (ignoring targets): busy, statuses, cooldown or gauge, stamina, costs, requirements.
Execute Command (ExecuteCommand)functionRPG Saga|Action BattleCommand: FRSEActionCommand (ref)ERSEActionCommandResultValidates and applies one decision (the only way a controller changes the battle). Ok / Queued = accepted.
Get Action State (GetActionStateBP)pureRPG Saga|Action BattleUnitId: int32
OutState: FRSEActionUnitState (out)
boolThe real-time state of a unit. Returns false for an unknown unit.
Get Attack Reach (GetAttackReach)pureRPG Saga|Action BattleUnitId: int32floatHow far a unit's plain attack reaches (combo step hitbox, fire mode range or the basic attack's reach), for AI and HUDs.
Get Claim Count (GetClaimCount)pureRPG Saga|Action BattleResult: ERSEActionClaimResultint32How many hit claims ended with Result so far (accepted ones as Accepted; anti-abuse statistics).
Get Controlled Unit (GetControlledUnit)pureRPG Saga|Action BattlePlayer: FRSEPlayerIdint32The unit Player commands (INDEX_NONE if none).
Get Cooldown Remaining (GetCooldownRemaining)pureRPG Saga|Action BattleUnitId: int32
Ability: URSEAbilityData*
floatSeconds until Ability is ready for UnitId again (0 = ready, or not on cooldown pacing).
Get Elapsed Time (GetElapsedTime)pureRPG Saga|Action BattlefloatBattle seconds simulated so far.
Get Last Claim Check (GetLastClaimCheck)pureRPG Saga|Action BattleFRSEActionClaimCheckWhat the last hit claim the battle applied or refused found (tests, logs, the HUD's "miss").
Get Obstacles (GetObstacles)pureRPG Saga|Action BattleTArray<FRSEActionObstacle>The obstacles of the headless space (see SetObstacles).
Get Projectiles (GetProjectiles)pureRPG Saga|Action BattleTArray<FRSEActionProjectile>Projectiles in flight.
Get Resolved Rules (GetResolvedRules)pureRPG Saga|Action BattleAbility: URSEAbilityData*FRSEAbilityActionRulesThe action rules Ability uses in this battle (its own, or derived from its other rules).
Get Unit Controller (GetUnitController)pureRPG Saga|Action BattleUnitId: int32FRSEPlayerIdThe player commanding a unit (None = the AI).
Get Unit Gap (GetUnitGap)pureRPG Saga|Action BattleUnitA: int32
UnitB: int32
floatEdge-to-edge distance between two units on the ground plane (meters; a large value when one is missing).
Get Unit Move Speed (GetUnitMoveSpeed)pureRPG Saga|Action BattleUnitId: int32floatWalking speed of a unit when the battle moves it itself (meters per second; 0 for an unknown unit).
Get Unit Place At (GetUnitPlaceAt)pureRPG Saga|Action BattleUnitId: int32
Time: float
OutLocation: FVector (out)
OutYaw: float (out)
boolA unit's place at a battle time from the host's position history (A6). Returns false without history for the unit.
Is Open Flow (IsOpenFlow)pureRPG Saga|Action BattleboolNo results screen in this framing (Open): the presentation shows loot toasts instead.
Set Auto Resolve Hits (SetAutoResolveHits)functionRPG Saga|Action BattlebAuto: boolOn (default): the battle tests its own hit shapes. Off: hits come only from hit claims (the presentation's traces).
Set Battle Area (SetBattleArea)functionRPG Saga|Action BattleCenter: FVector (ref)
Radius: float = 0.000000
The combat area of a Bounded battle (center; radius 0 = the rules' Bounded Area Radius).
Set Obstacles (SetObstacles)functionRPG Saga|Action BattleInObstacles: TArray<FRSEActionObstacle> (ref)Round obstacles of the headless space (A2): units walk around them, shots and projectiles stop at the ones that block shots, the AI uses them as cover. Only read while the battle moves units / resolves hits itself; the presentation's world has its own geometry and leaves this empty.
Set Simulate Movement (SetSimulateMovement)functionRPG Saga|Action BattlebSimulate: boolOn (default): the battle moves units from their move input and dodges (headless). Off: the presentation reports places.
Set Unit Transform (SetUnitTransform)functionRPG Saga|Action BattleUnitId: int32
Location: FVector (ref)
Yaw: float
The presentation reports where a unit's pawn stands (authority only; ignored on a proxy). Call it every frame or step while Simulate Movement is off.
Set Unit Weapon (SetUnitWeapon)functionRPG Saga|Action BattleUnitId: int32
Weapon: URSEActionWeaponData*
Gives a unit an action weapon for this battle (null = back to its equipment / the default).

URSEActionBattleSubsystem

Module RSE. Action battles on the live map (D-171, package A3): starts them where the party stands (an Action encounter from exploration: a trigger, a story effect, a dev command), gathers who takes part (the leader, the party members nearby, the encounter's enemies in the world or in front of the party), owns...

NodeKindCategoryParametersReturnsDescription
Get Active Director (GetActiveDirector)pureRPG Saga|Action BattleARSEActionBattleDirector*The director of the running battle (authority or guest), or null.
Is Battle Active (IsBattleActive)pureRPG Saga|Action BattleboolIs Battle Active
Start Encounter Battle (StartEncounterBattle)functionRPG Saga|Action BattleEncounter: URSEEncounterData*
EnemyActors: TArray<AActor*> (ref)
Source: AActor* = None
ReturnPoint: AActor* = None
boolStarts an action battle with Encounter's enemies where the party stands. EnemyActors stand for its enemies in order; missing ones appear in front of the party. Source gets the exploration's callback; ReturnPoint (optional) is where the explorer stands afterwards. Returns false when a battle cannot start now.

URSEActionCombatComponent

Module RSE, display name RSE Action Combat. "RSE Action Combat" (D-171, package A3; docs/product/components.md): what a character does in real-time action battles, on any pawn (our characters, a project's own Blueprint characters through IRSEExplorerPawn).

NodeKindCategoryParametersReturnsDescription
Find Action Combat (FindActionCombat)pure, staticRPG Saga|Action BattleActor: AActor*URSEActionCombatComponent*The action combat component of Actor, or null.
Get Character Mesh (GetCharacterMesh)pureRPG Saga|Action BattleUSkeletalMeshComponent*The character's main skeletal mesh (the character's mesh, else its first skeletal mesh).
Get Director (GetDirector)pureRPG Saga|Action BattleARSEActionBattleDirector*Get Director
Get Muzzle Location (GetMuzzleLocation)pureRPG Saga|Action BattleFVectorWhere this character's shots start now (world).
Get Unit Id (GetUnitId)pureRPG Saga|Action Battleint32The unit this character is in the running action battle (INDEX_NONE outside one).
Is Hit Window Open (IsHitWindowOpen)pureRPG Saga|Action BattleboolAn attack of this character can land now (its hit window is open).
Is in Action Battle (IsInActionBattle)pureRPG Saga|Action BattleboolIs in Action Battle
On Action Event (OnActionEvent)eventRPG Saga|Action BattleEvent: FRSEBattleEvent (ref)Every battle event about this character (it acts, it is hit, it guards...), after the component reacted.
On Hit Claimed (OnHitClaimed)eventRPG Saga|Action BattleVictim: AActor*
Location: FVector
This machine claimed a hit of this character's attack (the host decides whether it lands).

URSEActionControlsComponent

Module RSE, display name RSE Action Controls. "RSE Action Controls" (D-171, package A3): one local player's controls in an action battle, on their player controller.

NodeKindCategoryParametersReturnsDescription
Add Look (AddLook)functionRPG Saga|Action BattleYawDegrees: float
PitchDegrees: float
Turns the view (degrees).
Cycle Party Order (CyclePartyOrder)functionRPG Saga|Action BattleboolGives the party the next order of Party Order Cycle (after the last one this player gave).
Find Action Controls (FindActionControls)pure, staticRPG Saga|Action BattleController: APlayerController*URSEActionControlsComponent*The controls of Controller (null when it has none).
Get Camera Rig (GetCameraRig)pureRPG Saga|Action BattleARSEActionCameraRig*Get Camera Rig
Get Controlled Unit (GetControlledUnit)pureRPG Saga|Action Battleint32The unit this player commands now (INDEX_NONE without one).
Get Last Party Order (GetLastPartyOrder)pureRPG Saga|Action BattleERSEActionPartyOrderThe last party order this player gave (the rules' Default Party Order before any).
Get Lock Target (GetLockTarget)pureRPG Saga|Action Battleint32The hard-locked unit (INDEX_NONE = none).
Get Mapping Context (GetMappingContext)pureRPG Saga|Action BattleUInputMappingContext*The mapping context the controls use (built from the settings' keys unless one is set there).
Get Selectable Abilities (GetSelectableAbilities)pureRPG Saga|Action BattleTArray<URSEAbilityData*>The abilities the selection cycles through (the controlled unit's, without its basic attack).
Get Selected Ability (GetSelectedAbility)pureRPG Saga|Action BattleURSEAbilityData*Get Selected Ability
Get Soft Target (GetSoftTarget)pureRPG Saga|Action Battleint32The enemy an attack would turn to now without a hard lock (INDEX_NONE = none).
Is Action Input Active (IsActionInputActive)pureRPG Saga|Action BattleboolThe action mapping context is active for this player.
Is Aiming (IsAiming)pureRPG Saga|Action BattleboolIs Aiming
Is Guarding (IsGuarding)pureRPG Saga|Action BattleboolIs Guarding
Issue Party Order (IssuePartyOrder)functionRPG Saga|Action BattleOrder: ERSEActionPartyOrder
UnitId: int32 = -1
boolGives a party order (A2) as this player: UnitId INDEX_NONE = every member the AI drives on the player's side. Goes through the command bus (a guest's to the host); Co-op Rules -> Companion Orders decides who may order whom. Returns true when applied (or forwarded by a guest).
Lock on Unit (LockOnUnit)functionRPG Saga|Action BattleTargetUnitId: int32boolHard lock on a unit (INDEX_NONE releases). Returns whether the battle accepted it.
On Action Input (OnActionInput)eventRPG Saga|Action BattleInput: ERSEActionInput
bPressed: bool
Every input of this player (Blueprint reactions, tutorials).
On Party Order Issued (OnPartyOrderIssued)eventRPG Saga|Action BattleOrder: ERSEActionPartyOrder
bAccepted: bool
A party order this player gave (HUD feedback, tutorials).
Press Input (PressInput)functionRPG Saga|Action BattleInput: ERSEActionInput
bPressed: bool = true
Presses (or releases) an input as if its key did.
Switch Character (SwitchCharacter)functionRPG Saga|Action BattleDirection: int32 = 1boolTakes command of the next party member (Direction > 0) or the previous.
Switch Target (SwitchTarget)functionRPG Saga|Action BattleDirection: int32boolThe next target to the right (Direction > 0) or left.
Toggle Lock On (ToggleLockOn)functionRPG Saga|Action BattleboolLocks on the best target (or releases the lock). Returns true when locked now.

URSEActionInterop

Module RSE. AI interop for action battles (D-175 / D-171, package B2): what the Behavior Tree nodes, the StateTree nodes and Blueprints call to play a unit of a real-time battle with the project's own brain: attacks, abilities, dodge / block / parry, walking to and keeping a range, and the questions those decis...

NodeKindCategoryParametersReturnsDescription
Action Attack (ActionAttack)function, staticRPG Saga|Action InteropActor: AActor*
Target: AActor*
bHeavy: bool = false
boolThe actor's unit starts the weapon's attack on Target (lock-on, facing, combo step or shot). Returns true when the battle took it.
Action Block (ActionBlock)function, staticRPG Saga|Action InteropActor: AActor*
bRaise: bool
boolThe actor's unit raises or lowers its guard.
Action Dodge (ActionDodge)function, staticRPG Saga|Action InteropActor: AActor*
WorldDirection: FVector
boolThe actor's unit dodges toward a world direction (zero = away from the incoming attack).
Action Has Incoming Threat (ActionHasIncomingThreat)pure, staticRPG Saga|Action InteropActor: AActor*
MaxSecondsToHit: float = 0.000000
boolAn attack is on its way to the actor's unit that it has not answered yet.
Action Is Target in Reach (ActionIsTargetInReach)pure, staticRPG Saga|Action InteropActor: AActor*
Target: AActor*
Ability: URSEAbilityData*
MarginCm: float = 0.000000
boolThe actor's weapon (or the ability) reaches Target from where they stand.
Action Parry (ActionParry)function, staticRPG Saga|Action InteropActor: AActor*boolThe actor's unit opens a parry window.
Action Set Own AI (ActionSetOwnAI)function, staticRPG Saga|Action InteropActor: AActor*
bOwnAI: bool
boolThe actor's unit is played by the project's own brain (true) or by the framework's action AI (false).
Action Use Ability (ActionUseAbility)function, staticRPG Saga|Action InteropActor: AActor*
Ability: URSEAbilityData*
Target: AActor*
Location: FVector
boolThe actor's unit uses an ability on Target (or at Location). Returns true when the battle took it.

URSEActionRules

Module RSECore, display name Action Battle. Real-time action battles (D-171, docs/design/action-battle.md).

NodeKindCategoryParametersReturnsDescription
Apply Preset (ApplyPreset)functionRPG Saga|Action BattlePreset: ERSEActionPresetSets every rule to a shipped starting point (Melee, Shooter, Hybrid). The weapon is left as it is.

URSEActionSimDriver

Module RSE. The server side of an action battle (D-171, package A3; the D-141 split of the live battles): owns the headless battle (URSEActionBattle) and runs it on the authority only (single player, the host).

NodeKindCategoryParametersReturnsDescription
Get AI (GetAI)pureRPG Saga|Action BattleURSEActionAIController*The real-time AI of this battle (null before BeginBattle and after EndBattle).
Get Battle (GetBattle)pureRPG Saga|Action BattleURSEActionBattle*Get Battle

URSEAppLifecycleSubsystem

Module RSE. The game's reaction to platform events (D-170), in each game world: listens to URSEPlatformUserSubsystem (RSECore) and - controller disconnect of the primary user: pauses the world (through URSETimeControlSubsystem, so co-op never pauses for everyone) and opens the reconnect screen (Platform ->...

NodeKindCategoryParametersReturnsDescription
Get Reconnect View Model (GetReconnectViewModel)pureRPG Saga|PlatformURSEReconnectViewModel*The reconnect screen's view-model while it is open (null otherwise).
Hide Reconnect Prompt (HideReconnectPrompt)functionRPG Saga|PlatformCloses the reconnect screen and releases its pause.
Is Paused for Platform (IsPausedForPlatform)pureRPG Saga|PlatformboolThis subsystem holds a world pause request now (disconnect or suspend).
Is Reconnect Prompt Open (IsReconnectPromptOpen)pureRPG Saga|PlatformboolThe reconnect screen is open.
On Reconnect Prompt Changed (OnReconnectPromptChanged)eventRPG Saga|PlatformbOpen: boolThe reconnect screen opened or closed.
On Return to Title Requested (OnReturnToTitleRequested)eventRPG Saga|PlatformThe primary user signed out (Platform -> Return To Title On Sign Out): bind it to show a message first.
Show Reconnect Prompt (ShowReconnectPrompt)functionRPG Saga|PlatformboolOpens the reconnect screen and pauses (also for a buyer's own flows). Returns true when it is open.

URSEAppearanceComponent

Module RSE. Builds a modular character on its actor from a URSECharacterAppearance (D-046): the leader skeletal mesh with the Anim Blueprint, follower skeletal parts copying its pose (leader pose), static parts on sockets, material variants, and the visible parts of the equipment worn.

NodeKindCategoryParametersReturnsDescription
Rebuild (Rebuild)functionAppearanceLoads (if needed) and builds again. Editor preview too.

URSEArchetype

Module RSECore. A template content is made from (D-095, docs/design/studio.md section 6): "Knight", "Goblin", "Merchant", "Healing spell".

NodeKindCategoryParametersReturnsDescription
Ensure Template (EnsureTemplate)functionRPG Saga|ArchetypesCreates the Template (of Content Class, else the base class) when it is missing or of the wrong class.
Get Parent Archetype (GetParentArchetype)pureRPG Saga|ArchetypesURSEArchetype*The parent archetype (loaded), or null.
Has Parent Cycle (HasParentCycle)pureRPG Saga|ArchetypesboolThe parent chain loops back (A -> B -> A).

URSEArchetypeLibrary

Module RSECore. Archetype inheritance (D-095, docs/design/studio.md section 6 and section 16): creating content from an archetype, per-field overrides, propagation that asks first (a report with per-asset changes, applied only to the assets the designer checks, overridden fields never touched), "Reset to archetype"...

NodeKindCategoryParametersReturnsDescription
Apply Propagation (ApplyPropagation)function, staticRPG Saga|ArchetypesArchetype: URSEArchetype*
Selected: TArray<UObject*> (ref)
FRSEArchetypeApplyResultPropagates Archetype to the Selected assets only (the checked rows): copies the archetype's value of every inherited field that differs. Overridden fields are never written. The differences are recomputed, so a stale report cannot overwrite anything. Modified assets are marked dirty; child archetypes that changed are listed for propagating next.
Compute Propagation (ComputePropagation)function, staticRPG Saga|ArchetypesArchetype: URSEArchetype*
Candidates: TArray<UObject*> (ref)
FRSEArchetypePropagationReportWhat propagating Archetype would do to Candidates (content assets and child archetypes; others are ignored): per asset, the inherited fields that would change and the overridden fields that differ but are kept. Changes nothing.
Detach from Archetype (DetachFromArchetype)function, staticRPG Saga|ArchetypesAsset: UObject*boolRemoves the archetype link; the asset keeps its current values and stops following the archetype.
Get Archetype (GetArchetype)pure, staticRPG Saga|ArchetypesAsset: UObject*URSEArchetype*The archetype Asset inherits from (content: its archetype; archetype: its parent), loaded; null when none.
Get Archetype Link (GetArchetypeLink)pure, staticRPG Saga|ArchetypesAsset: UObject*FRSEArchetypeLinkThe link of Asset (empty when it has none, or in cooked builds).
Get Field Value Text (GetFieldValueText)pure, staticRPG Saga|ArchetypesAsset: UObject*
Field: FName
FStringShort text of a field's value on Asset (a content asset or an archetype's Template), for lists and reports.
Get Inheritable Fields (GetInheritableFields)pure, staticRPG Saga|ArchetypesAsset: UObject*TArray<FName>Fields Asset can inherit from its archetype (empty without an archetype).
Get Out Of Date Fields (GetOutOfDateFields)pure, staticRPG Saga|ArchetypesAsset: UObject*TArray<FName>Inherited fields whose value differs from the archetype's (the archetype changed and was not propagated yet).
Initialize from Archetype (InitializeFromArchetype)function, staticRPG Saga|ArchetypesContent: UObject*
Archetype: URSEArchetype*
boolMakes Content inherit from Archetype: links it, clears its overrides and copies every archetype field (identity fields listed in Non Inherited Fields are copied once, and only when Content has not set them). Content must be of the archetype's content class (or a subclass). False (and a warning) when it is not, or when Content is itself an archetype (use Set Parent Archetype).
Is Field Inherited (IsFieldInherited)pure, staticRPG Saga|ArchetypesAsset: UObject*
Field: FName
boolThe field comes from the archetype (Asset has one, the field is inheritable and not overridden): shown greyed.
Is Field Overridden (IsFieldOverridden)pure, staticRPG Saga|ArchetypesAsset: UObject*
Field: FName
boolThe author changed this field on Asset (propagation keeps it).
Keep Differences as Overrides (KeepDifferencesAsOverrides)function, staticRPG Saga|ArchetypesAsset: UObject*TArray<FName>Marks every inherited field that differs from the archetype as overridden ("keep my edits"). Returns the fields.
Reset All Fields to Archetype (ResetAllFieldsToArchetype)function, staticRPG Saga|ArchetypesAsset: UObject*boolResets every inheritable field (all overrides dropped).
Reset Field to Archetype (ResetFieldToArchetype)function, staticRPG Saga|ArchetypesAsset: UObject*
Field: FName
bool"Reset to archetype": copies the archetype's value of Field and makes the field inherited again.
Set Field Overridden (SetFieldOverridden)function, staticRPG Saga|ArchetypesAsset: UObject*
Field: FName
bOverridden: bool
boolMarks a field overridden (kept by propagation) or inherited again (the value stays until the next propagation).
Set Parent Archetype (SetParentArchetype)function, staticRPG Saga|ArchetypesChild: URSEArchetype*
Parent: URSEArchetype*
boolMakes Child derive from Parent (its Template inherits Parent's Template), or detaches it when Parent is null. Refused when the classes do not fit or the chain would loop.
Set Template from Content (SetTemplateFromContent)function, staticRPG Saga|ArchetypesArchetype: URSEArchetype*
Source: URSEPrimaryDataAsset*
boolCopies Source (content of the archetype's kind) into Archetype's Template: "make an archetype from this".
Validate Archetype Link (ValidateArchetypeLink)function, staticRPG Saga|ArchetypesAsset: UObject*
OutErrors: TArray<FText> (out)
OutWarnings: TArray<FText> (out)
boolProblems of Asset's archetype link: missing archetype, wrong class, unknown overridden fields, parent loops.

URSEAreaMapViewModel

Module RSE. The full area map screen (D-089, D-092): pan, zoom, legend with category filters, region names, the player, quest objectives and player pins placed with the pin wheel.

NodeKindCategoryParametersReturnsDescription
Activate Marker (ActivateMarker)functionRPG Saga|MapMarker: FRSEMapMarkerView (ref)boolA marker was clicked: an objective opens its quest in the journal (settings). Returns true when it did something.
Aim Pin Wheel (AimPinWheel)functionRPG Saga|MapOffset: FVector2DPicks the slice an offset points at (wheel radii, screen axes), e.g. the stick or the mouse from the wheel's center.
Cancel Pin Wheel (CancelPinWheel)functionRPG Saga|MapCancel Pin Wheel
Center On (CenterOn)functionRPG Saga|MapUV: FVector2DMoves the view so that UV is at the center.
Center on Player (CenterOnPlayer)functionRPG Saga|MapCenter on Player
Confirm Pin Wheel (ConfirmPinWheel)functionRPG Saga|MapboolApplies the selected slice (a new pin, a new type or remove) and closes the wheel. Returns true when applied.
Find Pin At (FindPinAt)pureRPG Saga|MapUV: FVector2Dint32The pin under UV (within the pick radius at the current zoom), or 0.
Focus Quest (FocusQuest)functionRPG Saga|MapQuest: URSEQuestData*boolCenters the view on a quest's objective (journal "Show on map"). Returns false when it has none on this level.
Get View Span (GetViewSpan)pureRPG Saga|MapfloatVisible map span in map units (across the view's shorter side).
Is Category Shown (IsCategoryShown)pureRPG Saga|MapCategory: FGameplayTagboolIs Category Shown
Open Pin Wheel (OpenPinWheel)functionRPG Saga|MapUV: FVector2DboolOpens the pin wheel at UV (map coordinates): the pin types, plus Remove when a pin is there.
Pan (Pan)functionRPG Saga|MapDelta: FVector2DMoves the view by Delta (in view widths: 1 = one whole view).
Place Pin (PlacePin)functionRPG Saga|MapUV: FVector2D
Type: FGameplayTag
PinId: int32 = 0
boolPlaces a pin of Type at UV, or changes the type of PinId (non-zero). Replaces the oldest pin when full (settings).
Select Pin Wheel (SelectPinWheel)functionRPG Saga|MapIndex: int32Select Pin Wheel
Set Legend Focused (SetLegendFocused)functionRPG Saga|MapbFocused: boolMoves the keyboard / gamepad focus into the legend or back to the map.
Toggle Category (ToggleCategory)functionRPG Saga|MapCategory: FGameplayTagShows / hides a category's markers (legend filter).
Toggle Pin At (TogglePinAt)functionRPG Saga|MapUV: FVector2DboolRemoves the pin near UV (map coordinates), or places a pin of the first type there. Returns true when something changed.
Zoom By (ZoomBy)functionRPG Saga|MapSteps: float
Anchor: FVector2D
Zooms by Steps zoom steps (negative = out), keeping Anchor (map coordinates) where it is on screen.

URSEAttributeRegistry

Module RSECore. The attributes and resources of a project (D-054, docs/design/attributes.md).

NodeKindCategoryParametersReturnsDescription
Find Attribute Definition (FindAttributeDefinition)pureRPG Saga|AttributesTag: FGameplayTag
OutDefinition: FRSEAttributeDefinition (out)
boolThe definition of an attribute (name, bounds, formula). False when the registry does not define it.
Find Resource Definition (FindResourceDefinition)pureRPG Saga|AttributesTag: FGameplayTag
OutDefinition: FRSEResourceDefinition (out)
boolThe definition of a resource (maximum, start, regeneration, gains). False when the registry does not define it.
Get Display Name (GetDisplayName)pureRPG Saga|AttributesTag: FGameplayTagFTextPlayer-facing name of an attribute or resource (its definition, else the last part of the tag).
Get HUDResources (GetHUDResources)pureRPG Saga|AttributesbBattleHUD: bool
bPartyMenu: bool
TArray<FGameplayTag>Resources, in HUD order; bBattleHUD / bPartyMenu filter by where they are shown.
Get Short Label (GetShortLabel)pureRPG Saga|AttributesTag: FGameplayTagFTextShort label of an attribute or resource ("HP", "ATK").
Get Visible Attributes (GetVisibleAttributes)pureRPG Saga|AttributesTArray<FGameplayTag>Attributes shown in menus, in UI order.
Reset to Built in Defaults (ResetToBuiltInDefaults)functionAttributesFills Attributes and Resources with the framework's built-in definitions (the class defaults).

URSEAudioSubsystem

Module RSE. The game's audio (D-036, docs/design/audio.md): music, sound effects and the mixer.

NodeKindCategoryParametersReturnsDescription
Apply Music Now (ApplyMusicNow)functionRPG Saga|AudioApplies pending music changes now instead of next frame.
Clear Layer (ClearLayer)functionRPG Saga|AudioLayer: ERSEMusicLayerClears a layer of the music stack: the layer below plays again.
Play Story Music (PlayStoryMusic)functionRPG Saga|AudioTrack: FRSEMusicTrack (ref)
Context: ERSEMusicContext = Story
Story override (Play Music effect, console): covers area music until RestoreMusic.
Restore Music (RestoreMusic)functionRPG Saga|AudioEnds the story override: the music below comes back.
Set Area Music (SetAreaMusic)functionRPG Saga|AudioTrack: FRSEMusicTrack (ref)Area / map music of the current world (URSEAudioWorldSubsystem). Ignored while the base was set explicitly.
Set Base Context (SetBaseContext)functionRPG Saga|AudioContext: ERSEMusicContextSets the base music to a context explicitly (the front end: MainMenu); area music then leaves the base alone until the next map.
Set Context Layer (SetContextLayer)functionRPG Saga|AudioLayer: ERSEMusicLayer
Context: ERSEMusicContext
Sets a layer to a context's settings track (a context without a track clears the layer).
Set Dialog Active (SetDialogActive)functionRPG Saga|AudiobActive: boolDialog music on / off (only when a Dialog context track is set).
Set Layer (SetLayer)functionRPG Saga|AudioLayer: ERSEMusicLayer
Context: ERSEMusicContext
Track: FRSEMusicTrack (ref)
Sets a layer of the music stack to a track (the highest set layer plays).
Stop Story Music (StopStoryMusic)functionRPG Saga|AudioFadeOut: float = -1.000000Silence requested by the story (Stop Music effect) until RestoreMusic. FadeOut < 0 = default.

URSEAuthorityPolicy

Module RSE. Who runs the game logic (D-134, docs/design/networking.md §3.5).

NodeKindCategoryParametersReturnsDescription
Has Authority (HasAuthority)overrideRPG Saga|PlayersWorld: UWorld*boolThis machine applies the game logic in World (single-player: always).
Is Multiplayer Session (IsMultiplayerSession)overrideRPG Saga|PlayersWorld: UWorld*boolMore than one player shares World (a network session, or several local players): the co-op rules apply.

URSEAuthoritySubsystem

Module RSECore. The authority mode and the local player's id for this game instance (D-133).

NodeKindCategoryParametersReturnsDescription
Get Authority Mode (GetAuthorityMode)pureRPG Saga|CommandsERSEAuthorityModeStandalone (single player), Authority (session host) or Proxy (session guest).
Get Local Player Id (GetLocalPlayerId)pureRPG Saga|CommandsFRSEPlayerIdThe player of this machine (the host in single player and on the host).
Get Session Players (GetSessionPlayers)pureRPG Saga|CommandsTArray<FRSEPlayerId>The players of the session (D-138): the host first, then the guests. Single player: only the host. The network layer keeps it up to date (joins, leaves); group decisions (dialog votes) count these players.
Has Authority (HasAuthority)pureRPG Saga|CommandsboolThis machine may change game state: single player or the host of a session.
Is Networked (IsNetworked)pureRPG Saga|CommandsboolA network session is running (host or guest).
On Authority Mode Changed (BP_OnModeChanged)eventRPG Saga|CommandsOldMode: ERSEAuthorityMode
NewMode: ERSEAuthorityMode
The mode changed (a session started or ended).
Set Authority Mode (SetAuthorityMode)functionRPG Saga|CommandsNewMode: ERSEAuthorityMode
NewLocalPlayer: FRSEPlayerId
Sets the mode and this machine's player. Called by the network layer when a session starts or ends (and by tests); Standalone always uses the host id.
Set Session Players (SetSessionPlayers)functionRPG Saga|CommandsPlayers: TArray<FRSEPlayerId> (ref)Sets the session's players (RSENet on join / leave, tests). The host is always included.

URSEBattle

Module RSECore. Rules shared by both battle modes: units, resources, damage and healing, defeat, end of battle and the event stream (D-006).

NodeKindCategoryParametersReturnsDescription
Apply Status (ApplyStatus)functionRPG Saga|BattleSourceId: int32
TargetId: int32
Status: URSEStatusData*
Chance: float
Tries to apply a status (Chance in percent); immunity and stacking follow the status data.
Are Units Enemies (AreUnitsEnemies)pureRPG Saga|BattleUnitA: int32
UnitB: int32
boolWhether two units are on different teams.
Change Resource (ChangeResource)functionRPG Saga|BattleSourceId: int32
TargetId: int32
Resource: FGameplayTag (ref)
Delta: float
floatChanges a unit's resource with a battle event: HP losses go through shields and reactions, HP gains heal. Returns the change applied.
Deal Damage (DealDamageBP)functionRPG Saga|BattleSourceId: int32
TargetId: int32
Amount: float
Element: FGameplayTag
int32Deals HP damage decided by a rule (no stats, no rolls): Amount before the target's affinity to Element (if any); shields, reactions and defeat follow. SourceId may be -1 (the environment). Returns HP lost.
Defeat Unit (DefeatUnit)functionRPG Saga|BattleUnitId: int32Marks a unit defeated and checks for the end of battle.
Get Battle Mode Tag (GetBattleModeTag)pureRPG Saga|BattleFGameplayTagThe battle mode this battle runs (Battle.Mode.Tactics / ATB / Turn / FreeTactics). Each mode class reports its own tag, so systems that care about the mode (AI records, adaptive difficulty, use conditions, statistics) never need a chain of class checks. Empty for the abstract base.
Get Controlling Status (GetControllingStatus)pureRPG Saga|Battle|StatusUnitId: int32URSEStatusData*The status that controls the unit now (the first with a control behavior), or null.
Get Environment Tags (GetEnvironmentTags)pureRPG Saga|BattleFGameplayTagContainerGet Environment Tags
Get Outcome (GetOutcome)pureRPG Saga|BattleERSEBattleOutcomeResult of the battle from the player team's side (Ongoing while it runs).
Get Player Team (GetPlayerTeam)pureRPG Saga|BattleFGameplayTagThe player's team tag in this battle.
Get Seed (GetSeed)pureRPG Saga|Battleint32Seed the battle started with (deterministic rolls after the battle, e.g. loot, D-042).
Get Turns Taken (GetTurnsTaken)pureRPG Saga|BattleTeam: FGameplayTag (ref)int32Turns taken so far by units of a team.
Get Unit (GetUnitBP)pureRPG Saga|BattleUnitId: int32
OutUnit: FRSEBattleUnit (out)
boolA unit of this battle by id. Returns false when there is none.
Get Unit Attribute (GetUnitAttribute)pureRPG Saga|Battle|AttributesUnitId: int32
Attribute: FGameplayTag
floatFinal attribute value of a unit (0 for an unknown unit).
Get Unit Ids (GetUnitIds)pureRPG Saga|BattleTeam: FGameplayTag
bActiveOnly: bool = true
TArray<int32>Ids of the units of a team (empty = every team); bActiveOnly skips fallen and withdrawn ones.
Get Unit Own Team (GetUnitOwnTeam)pureRPG Saga|Battle|StatusUnitId: int32FGameplayTagThe team a unit belongs to, whatever a status (Charm) makes it fight for now.
Get Unit Resource (GetUnitResource)pureRPG Saga|Battle|AttributesUnitId: int32
Resource: FGameplayTag
floatCurrent value of a unit's resource.
Get Unit Resource Max (GetUnitResourceMax)pureRPG Saga|Battle|AttributesUnitId: int32
Resource: FGameplayTag
floatMaximum of a unit's resource (0 when it lacks it).
Get Winning Team (GetWinningTeam)pureRPG Saga|BattleFGameplayTagThe team that won (empty while the battle runs).
Heal Unit (HealUnitBP)functionRPG Saga|BattleSourceId: int32
TargetId: int32
Amount: float
floatRestores HP to a unit (a heal event). Returns HP restored.
Is Battle Over (IsBattleOver)pureRPG Saga|BattleboolThe battle has ended (victory, defeat or escape).
Is Unit Active (IsUnitActive)pureRPG Saga|BattleUnitId: int32boolThe unit stands on the field (not defeated, not withdrawn).
Is Unit Controlled by Status (IsUnitControlledByStatus)pureRPG Saga|Battle|StatusUnitId: int32boolWhether a status takes the player's command of the unit away (the AI acts for it).
Modify Unit Resource (ModifyUnitResource)functionRPG Saga|Battle|AttributesUnitId: int32
Resource: FGameplayTag
Delta: float
Adds to a unit's resource (negative removes), within its bounds; HP at 0 defeats the unit. For custom rules and cues.
On Battle Event (OnBattleEvent)eventRPG Saga|BattleEvent: FRSEBattleEvent (ref)Every battle event, in order (damage, heals, statuses, turns, defeats, the end).
On Resource Changed (OnResourceChanged)eventRPG Saga|Battle|AttributesUnitId: int32
Resource: FGameplayTag
OldValue: float
NewValue: float
Fired whenever a unit's resource value changes (damage, costs, gains, regeneration).
Remove Statuses (RemoveStatuses)functionRPG Saga|BattleSourceId: int32
TargetId: int32
StatusTags: FGameplayTagContainer (ref)
Removes every status on TargetId whose tag matches any of StatusTags.
Roll Int (RollInt)functionRPG Saga|BattleMax: int32int32A deterministic random integer in [0, Max) from the battle's stream (use it instead of Random nodes so replays and the simulator stay exact).
Roll Percent (RollPercent)functionRPG Saga|BattlefloatA deterministic random value in [0, 100) from the battle's stream.
Scan Unit (ScanUnit)functionRPG Saga|BattleSourceId: int32
TargetId: int32
Emits UnitScanned (the bestiary reveals the target's entry).
Set Unit Base Stat (SetUnitBaseStat)functionRPG Saga|Battle|AttributesUnitId: int32
Stat: FGameplayTag
Value: float
boolReplaces the base value of one stat of a unit while the battle runs (D-169, G2): an outside system (the GAS bridge) reports a changed stat. Equipment, Pact and statuses still apply on top; resources above their new maximum are clamped (HP at 0 does not defeat: only damage does). Refused on a proxy or finished battle. Authority code only: other machines get the result through the usual state mirror. Returns true when the value changed.
Shift Turn (ShiftTurn)functionRPG Saga|BattleSourceId: int32
TargetId: int32
TurnFraction: float
Moves the unit's next turn by TurnFraction of a turn: positive = sooner (haste-like), negative = later (delay). Tactics: CT; ATB: the gauge; turn-based: the timeline (CTB) or the place in the round (Round).
Unit Has Status (UnitHasStatus)pureRPG Saga|BattleUnitId: int32
Status: FGameplayTag
boolWhether a unit has a status matching the tag.

URSEBattleBannerViewModel

Module RSE. Text banners of battle presentations (D-034): the ability name plate and the large cinematic titles.

NodeKindCategoryParametersReturnsDescription
On Banner Started (OnBannerStarted)eventRPG Saga|UI|BannerRaised when a style starts showing a new text (widgets play their intro).

URSEBattleCuePlayerComponent

Module RSE. Plays battle presentation timelines (D-034) and times interactive action commands.

NodeKindCategoryParametersReturnsDescription
Add Camera Shake (AddCameraShake)functionRPG Saga|Battle PresentationAmplitude: float
RotationAmplitude: float
Frequency: float
Duration: float
Shakes the battle camera (location amplitude in cm, rotation in degrees, frequency in Hz, seconds).
Flash (Flash)functionRPG Saga|Battle PresentationColor: FLinearColor (ref)
Alpha: float
FadeIn: float
Hold: float
FadeOut: float
Flashes the screen with a color (fade in, hold, fade out in seconds).
Get Caster (GetCaster)pureRPG Saga|Battle PresentationAActor*The actor of the unit using the action.
Get Impact Point (GetImpactPoint)pureRPG Saga|Battle PresentationbOnGround: boolFVectorThe aimed tile / area center (D-055): ground level, or chest height above it. Falls back to the targets' center.
Get Primary Target (GetPrimaryTarget)pureRPG Saga|Battle PresentationAActor*The actor of the action's primary target (none for an empty tile).
Get Subject Point (GetSubjectPoint)pureRPG Saga|Battle PresentationActor: AActor*FVectorChest height location of a unit (what shots look at). Transient pose offsets (shake, lunge, hop, hit reactions) are left out: shots frame the unit's resting place, so a shaking unit never shakes the camera.
Get Subjects (GetSubjects)pureRPG Saga|Battle PresentationSubject: ERSECueSubject
OutActors: TArray<AActor*> (out)
The actors of a cue subject: the caster, the primary target or every affected unit.
Play Hit Reaction (PlayHitReaction)functionRPG Saga|Battle PresentationTarget: AActor*
From: FVector (ref)
Scale: float
bDodge: bool = false
bHeavy: bool = false
Target recoil away from From (hit) or a sidestep (dodge). bHeavy: a critical (the anim set's HitHeavy from the front).

URSEBattleCue_Custom

Module RSE, display name Custom (Blueprint). A presentation step written in Blueprint (D-052): create a Blueprint class from it and override On Cue Start (and optionally On Cue Update / On Cue Stop) to spawn effects, move actors, play sounds or animations on the cue's subjects.

NodeKindCategoryParametersReturnsDescription
On Cue Start (OnCueStart)overrideRPG Saga|Battle PresentationPlayer: URSEBattleCuePlayerComponent*
SubjectActors: TArray<AActor*> (ref)
The cue starts: Player gives the caster, the impact point, camera shakes, flashes.
On Cue Stop (OnCueStop)overrideRPG Saga|Battle PresentationPlayer: URSEBattleCuePlayerComponent*
SubjectActors: TArray<AActor*> (ref)
bSkipped: bool
The cue ended (time up, skipped or stopped): leave things in their final state.
On Cue Update (OnCueUpdate)overrideRPG Saga|Battle PresentationPlayer: URSEBattleCuePlayerComponent*
SubjectActors: TArray<AActor*> (ref)
Alpha: float
Every frame while it runs (bReceiveUpdate): Alpha goes from 0 to 1 over Duration.

URSEBattleHUDViewModel

Module RSE. Common base of the battle HUD view-models (D-052): the battle log, the result banner, the key prompts and the battle events for floating numbers.

NodeKindCategoryParametersReturnsDescription
On Battle Event (OnBattleEvent)eventBattle HUDEvent: FRSEBattleEvent (ref)
WorldLocation: FVector
A battle event presented on a unit (damage, heal, miss, status...): floating numbers.
Refresh Now (RefreshNow)functionRPG Saga|UI|Battle HUDRebuilds the view now (tests; the HUD refreshes every frame on its own).
Set Preview Info (SetPreviewInfo)functionRPG Saga|UI|Battle HUDInfo: FText (ref)Sets (or clears, with empty text) the preview summary line.

URSEBattleLauncherSubsystem

Module RSE. The C++ behind the battle launcher (P55, D-179): starts, restarts and auto-plays a battle of any mode from one FRSEBattleLaunchPreset, on the map the player explores.

NodeKindCategoryParametersReturnsDescription
Get Last Launch (GetLastLaunch)pureRPG Saga|Dev|LauncherOutPreset: FRSEBattleLaunchPreset (out)
OutSeed: int32 (out)
boolThe preset of the last start (valid after one), with the seed it ran on.
Is Auto Play (IsAutoPlay)pureRPG Saga|Dev|LauncherboolIs Auto Play
Is Launcher Visible (IsLauncherVisible)pureRPG Saga|Dev|LauncherboolIs Launcher Visible
Restart Battle (RestartBattle)functionRPG Saga|Dev|LauncherbNewSeed: bool
OutMessage: FString (out)
boolFights the last started battle again. While it runs (or has just ended) it is restarted from its beginning with the party as before it; once exploration has control again it starts anew. New seed: a new seed for the rolls; else the same seed (the same battle again, as far as the player's input is the same, e.g. with auto-play).
Set Auto Play (SetAutoPlay)functionRPG Saga|Dev|LauncherbEnabled: boolThe AI plays the party's units too (RSE.Battle.AutoPlay).
Set Launcher Visible (SetLauncherVisible)functionRPG Saga|Dev|LauncherbVisible: boolShows or hides the launcher panel (and gives it the mouse); the F10 key and RSE.Rooms.Launcher call it.
Start Battle (StartBattle)functionRPG Saga|Dev|LauncherPreset: FRSEBattleLaunchPreset (ref)
OutMessage: FString (out)
boolStarts the preset's battle. A running battle makes this fail (use Restart). OutMessage why it did not start, or what started.

URSEBattleMenuLibrary

Module RSECore. Blueprint access to the battle menu model (custom providers, custom presenters; D-122).

NodeKindCategoryParametersReturnsDescription
Add Menu Entry (AddMenuEntry)function, staticRPG Saga|Battle MenuModel: FRSEBattleMenuModel (ref)
Entry: FRSEBattleMenuEntry (ref)
CategoryLabel: FText (ref)
Shape: ERSEBattleMenuCategoryShape = Group
Adds an entry to the menu (its category is made with Category Label / Shape when missing).
Find Menu Entry (FindMenuEntry)pure, staticRPG Saga|Battle MenuModel: FRSEBattleMenuModel (ref)
EntryId: FName
OutEntry: FRSEBattleMenuEntry (out)
boolThe entry with this id, if any.
Get Menu Unit Character (GetMenuUnitCharacter)pure, staticRPG Saga|Battle MenuContext: FRSEBattleMenuContext (ref)URSECharacterData*The unit the menu is for (its battle unit id) and its character.
Make Ability Menu Entry (MakeAbilityMenuEntry)pure, staticRPG Saga|Battle MenuContext: FRSEBattleMenuContext (ref)
Ability: URSEAbilityData*
CategoryId: FName
FRSEBattleMenuEntryAn entry for an ability of the unit (cost, resource, uses left, reasons), for a custom provider.
Menu Has Ability (MenuHasAbility)pure, staticRPG Saga|Battle MenuModel: FRSEBattleMenuModel (ref)
Ability: URSEAbilityData*
boolThe menu already has this ability (an earlier provider added it).

URSEBattleMenuProvider

Module RSECore, display name Battle Menu Provider. A source of battle menu entries (D-122, docs/design/battle-menus.md): the config's providers fill the active unit's menu in order (movement, the command layout's abilities and items, Pacts, the turn commands, custom ones).

NodeKindCategoryParametersReturnsDescription
Gather (Gather)overrideRPG Saga|Battle MenuContext: FRSEBattleMenuContext (ref)
Model: FRSEBattleMenuModel (ref)
Adds this provider's entries to Model (Context: the battle and the unit).

URSEBattleMenuViewModel

Module RSE. One local player's battle menu (D-122, docs/design/battle-menus.md): the host's model and list as this player sees them, plus the menu's own navigation (open category, page, highlight, ring open).

NodeKindCategoryParametersReturnsDescription
Activate Entry (ActivateEntry)functionRPG Saga|Battle MenuEntryId: FNameboolActivates an entry: the host aims it or issues its command. Disabled entries tell why (the message line).
Activate List Row (ActivateListRow)functionRPG Saga|Battle MenuRow: int32The list's rows (list-shaped presenters).
Cancel Aim (CancelAim)functionRPG Saga|Battle MenuBack out of the aim.
Close Category (CloseCategory)functionRPG Saga|Battle MenuboolBack to the categories. Returns false when already there.
Get Highlighted Node Id (GetHighlightedNodeId)pureRPG Saga|Battle MenuFNameThe highlighted node's id on the current level (a category on the first ring), or none.
Get Hotbar Slots (GetHotbarSlots)pureRPG Saga|Battle MenuMinSlots: int32
PageSize: int32
OutSlots: TArray<FName> (out)
The hotbar's slots for the active unit's character: its saved order, new entries in free slots (RSEBattleMenu::ResolveHotbar).
Get Nodes (GetNodes)pureRPG Saga|Battle MenuOutNodes: TArray<FRSEBattleMenuNode> (out)What the current level shows (RSEBattleMenu::GetNodes): categories, groups, families, entries.
Get Owning Player (GetOwningPlayer)pureRPG Saga|Battle MenuAPlayerController*Get Owning Player
Get Path (GetPath)pureRPG Saga|Battle MenuFRSEBattleMenuPathWhere the menu is: the open category, group and family.
Highlight Category (HighlightCategory)functionRPG Saga|Battle MenuCategoryId: FNameHighlight Category
Highlight Entry (HighlightEntry)functionRPG Saga|Battle MenuEntryId: FNameHighlight Entry
Highlight List Row (HighlightListRow)functionRPG Saga|Battle MenuRow: int32Highlight List Row
Highlight Node (HighlightNode)functionRPG Saga|Battle MenuNodeId: FNameHighlights a node of the current level (the host may preview its entry).
Move Hotbar Slot (MoveHotbarSlot)functionRPG Saga|Battle MenuFrom: int32
To: int32
MinSlots: int32
PageSize: int32
boolMoves a slot onto another (they swap) and saves the order for the character. Returns false when nothing changed.
On Changed (OnChanged)eventRPG Saga|Battle Menu
Open Category by Id (OpenCategoryById)functionRPG Saga|Battle MenuCategoryId: FNameOpen Category by Id
Open Family by Id (OpenFamilyById)functionRPG Saga|Battle MenuCategoryId: FName
FamilyId: FName
Opens a tier family of a category directly (a hotbar slot): its tiers become the level.
Pick Category (PickCategory)functionRPG Saga|Battle MenuCategoryId: FNameboolPicks a category: Direct or single-entry ones act at once, the others open. Returns true when it acted.
Pick Node (PickNode)functionRPG Saga|Battle MenuNodeId: FNameboolPicks a node of the current level: an entry (or a category / family that acts) is used, the others open. Returns true when it acted.
Set Expanded (SetExpanded)functionRPG Saga|Battle MenubInExpanded: boolSet Expanded
Set Page (SetPage)functionRPG Saga|Battle MenuInPage: int32Set Page

URSEBattleModeOverrideLibrary

Module RSECore. D-182: the battle mode override's data side: reports, resolution and the per-mode copy of an encounter.

NodeKindCategoryParametersReturnsDescription
Can Encounter Run in Mode (CanEncounterRunInMode)pure, staticRPG Saga|Battle|Mode OverrideEncounter: URSEEncounterData*
Mode: FGameplayTag
OutWhyNot: FText (out)
boolWhether Encounter's data can run in Mode (OutWhyNot: the first problem).
Get Battle Mode Short Name (GetBattleModeShortName)pure, staticRPG Saga|Battle|Mode OverrideMode: FGameplayTagFStringThe short name of a mode (Tactics, Live, ATB, Turn, Action), for logs, commands and file names.
Get Encounter Mode Report (GetEncounterModeReport)pure, staticRPG Saga|Battle|Mode OverrideEncounter: URSEEncounterData*FRSEEncounterModeReportWhich modes Encounter's data can run in (one entry per overridable mode): its Mode Override switches, the features switched on, an enemy list to bring into another mode, and the automatic fallbacks each mode uses. The map's battle sites (a grid zone, a classic stage) are checked by the world report (RSE Encounter Site -> Build Mode Report).
Make Encounter for Mode (MakeEncounterForMode)function, staticRPG Saga|Battle|Mode OverrideOuter: UObject*
Encounter: URSEEncounterData*
Mode: FGameplayTag
URSEEncounterData*A transient copy of Encounter to fight in Mode: the mode set, the mode's rules profile (Mode Rules Profiles) applied, and the data-only fallbacks (classic rows). The copy keeps the encounter's name, so its asset id (quests, bestiary) is the same. Grid fallbacks need the zone: ApplyGridFallbacks.
Parse Battle Mode (ParseBattleMode)pure, staticRPG Saga|Battle|Mode OverrideName: FStringFGameplayTagBattle.Mode.* from a short name: Tactics / Grid, FreeTactics / Live, ATB, Turn, Action (or a full tag name). Empty when unknown.
Resolve Battle Mode (ResolveBattleMode)pure, staticRPG Saga|Battle|Mode OverrideEncounter: URSEEncounterData*
OverrideMode: FGameplayTag
FRSEBattleModeResolutionThe mode Encounter is fought in with OverrideMode active (empty = no override).

URSEBattleModeOverrideSubsystem

Module RSECore. D-182: the session's battle mode override.

NodeKindCategoryParametersReturnsDescription
Clear Battle Mode Override (ClearBattleModeOverride)functionRPG Saga|Battle|Mode OverrideEncounters start in their own mode again.
Get Battle Mode Override (GetBattleModeOverride)pureRPG Saga|Battle|Mode OverrideFGameplayTagThe override's mode (empty: none).
Has Battle Mode Override (HasBattleModeOverride)pureRPG Saga|Battle|Mode OverrideboolHas Battle Mode Override
On Battle Mode Override Changed (OnBattleModeOverrideChanged)eventRPG Saga|Battle|Mode OverrideMode: FGameplayTagThe override changed (empty tag: cleared).
Resolve Battle Mode (ResolveBattleMode)pureRPG Saga|Battle|Mode OverrideEncounter: URSEEncounterData*FRSEBattleModeResolutionThe mode Encounter is fought in now (the override when the encounter allows it and can run in it).
Set Battle Mode Override (SetBattleModeOverride)functionRPG Saga|Battle|Mode OverrideMode: FGameplayTagboolFights every encounter that allows it in Mode (Battle.Mode.*). An empty tag clears the override. Returns false for a mode that is not overridable.

URSEBattleScriptEffect

Module RSECore, display name Battle Script Effect. What a scripted battle event changes (D-117).

NodeKindCategoryParametersReturnsDescription
Apply (Apply)overrideRPG Saga|Battle ScriptContext: FRSEBattleScriptContext (ref)Applies the effect.
Describe (Describe)overrideRPG Saga|Battle ScriptFTextOne line for the editor and logs.

URSEBattleScriptRunner

Module RSECore. Runs a battle's reinforcements and scripted events (D-117, docs/product/reinforcements.md).

NodeKindCategoryParametersReturnsDescription
Can Queue Wave (CanQueueWave)pureRPG Saga|ReinforcementsCallId: int32boolWhether a called wave may be handed to the battle now (its Delay Rounds passed).
Fire Event (FireEvent)functionRPG Saga|Battle ScriptId: FNameboolFires a scripted event now, whatever its trigger (once-only events that already fired are refused). Returns true when it fired.
Get Call (GetCall)pureRPG Saga|ReinforcementsCallId: int32
OutCall: FRSEReinforcementCallView (out)
boolGet Call
Get Calls (GetCalls)pureRPG Saga|ReinforcementsTArray<FRSEReinforcementCallView>Every call so far (calling, incoming, arrived, cancelled).
Get Incoming Count (GetIncomingCount)pureRPG Saga|ReinforcementsTeam: FGameplayTagint32Units on their way for Team (called, not joined yet).
Get Round (GetRound)pureRPG Saga|Reinforcementsint32The current round as the triggers count it (the battle's own rounds, else counted in turns).
Get Times Fired (GetTimesFired)pureRPG Saga|Battle ScriptId: FNameint32Times a scripted event fired in this battle.
Is Calling (IsCalling)pureRPG Saga|ReinforcementsUnitId: int32boolThe unit is calling for help now.
On Call Cancelled (BP_OnCallCancelled)eventRPG Saga|ReinforcementsCall: FRSEReinforcementCallView (ref)A call was stopped before it completed (Blueprint).
On Call Started (BP_OnCallStarted)eventRPG Saga|ReinforcementsCall: FRSEReinforcementCallView (ref)A unit started calling for help (Blueprint).
On Script Event (BP_OnScriptEvent)eventRPG Saga|Battle ScriptEvent: FRSEBattleScriptEventView (ref)A scripted battle event fired (Blueprint).
On Wave Arrived (BP_OnWaveArrived)eventRPG Saga|ReinforcementsCall: FRSEReinforcementCallView (ref)Every unit of a wave joined the battle (Blueprint).
On Wave Called (BP_OnWaveCalled)eventRPG Saga|ReinforcementsCall: FRSEReinforcementCallView (ref)A wave is on its way (Blueprint).
Process Pending (ProcessPending)functionRPG Saga|ReinforcementsboolThe safe point: evaluates the triggers, completes or cancels calls, fires scripted events (their effects) and brings in auto-joined waves. Never call it from inside a battle event. Returns true when something happened.
Set Auto Join (SetAutoJoin)functionRPG Saga|ReinforcementsbInAutoJoin: boolHeadless joining: called waves enter by themselves at their round (Free Tactics: hidden points of the snapshot).
Start Reinforcements (StartReinforcements)functionRPG Saga|ReinforcementsData: URSEReinforcementData*
CallerId: int32
bSkipCallTime: bool
int32A group calls now (a scripted event, Blueprint): its waves with a Battle Start, When Alerted or Manual trigger are due; the rest follow their triggers. CallerId calls (INDEX_NONE = by the data's Caller rule). bSkipCallTime: no channel. Returns the new group's index.

URSEBattleStartGate

Module RSE. The one rule every battle start goes through (D-120): no battle starts over a story scene, a blocking dialog or a custom block.

NodeKindCategoryParametersReturnsDescription
Add Block (AddBlock)functionRPG Saga|BattleReason: FNameKeeps battles from starting until the matching RemoveBlock (counted per reason): a custom cinematic, a tutorial screen, a network hand-off.
Can Start Now (CanStartNow)pureRPG Saga|BattleboolA battle may start now (nothing blocks and no start is waiting).
Cancel Pending Start (CancelPendingStart)functionRPG Saga|BattleDrops the waiting start without running it.
Get Block Reason (GetBlockReason)pureRPG Saga|BattleFNameWhy no battle can start now: Scene, Dialog or a custom block reason. None = a battle may start.
Has Pending Start (HasPendingStart)pureRPG Saga|BattleboolA start is waiting for the block to lift.
On Deferred Start (OnDeferredStart)eventRPG Saga|BattleLabel: FString
bStarted: bool
A waiting start ran (bStarted: the battle started).
Remove Block (RemoveBlock)functionRPG Saga|BattleReason: FNameRemove Block

URSEBattleTransitionSubsystem

Module RSE. Plays the screen transitions between exploration and battles (D-083).

NodeKindCategoryParametersReturnsDescription
Is Playing (IsPlaying)pureRPG Saga|BattleboolA transition plays.

URSEBestiarySubsystem

Module RSECore. The bestiary (D-047): every enemy type met and defeated, saved as section "Bestiary".

NodeKindCategoryParametersReturnsDescription
Find Entry (FindEntryBP)pureRPG Saga|BestiaryCharacter: URSECharacterData*
OutEntry: FRSEBestiaryEntry (out)
boolThe saved counts of Character. Returns false when it has no entry.
Get Bestiary Characters (GetCharactersBP)pureRPG Saga|BestiaryTArray<URSECharacterData*>Enemies with an entry, sorted by category then name.
Get Knowledge (GetKnowledgeBP)pureRPG Saga|BestiaryCharacter: URSECharacterData*FRSEBestiaryKnowledgeWhat the entry of Character reveals now (name, description, stats, affinities, drops).
On Bestiary Changed (BP_OnChanged)eventRPG Saga|BestiaryFired after any change (menus refresh).
Record Defeat (RecordDefeatBP)functionRPG Saga|BestiaryCharacter: URSECharacterData*Counts one defeat of Character.
Record Encounter (RecordEncounterBP)functionRPG Saga|BestiaryCharacter: URSECharacterData*
Level: int32
Counts one enemy of Character met at Level (a custom encounter, a scripted fight).

URSEBlueprintLibrary_Art

Module RSECore, display name RSEBlueprint Library Art. Portraits and icons for UMG screens (D-075): the same lookups the built-in screens use.

NodeKindCategoryParametersReturnsDescription
Get Character Portrait (GetCharacterPortrait)pure, staticRPG Saga|ArtCharacter: URSECharacterData*
Variant: FName = None
TSoftObjectPtr<UTexture2D>The portrait of a character (its Portrait, a variant's, or the generated art library's). Null = none: show an initial.
Get Icon (GetIcon)pure, staticRPG Saga|ArtAsset: UObject*TSoftObjectPtr<UTexture2D>The icon of an item, ability or status (its Icon, or the generated art library's). Null = none.
Get Quest Image (GetQuestImage)pure, staticRPG Saga|ArtQuest: URSEQuestData*TSoftObjectPtr<UTexture2D>D-155: a quest's journal picture (its Header Image, or the generated art library's). Null = none.
Get Speaker Portrait (GetSpeakerPortrait)pure, staticRPG Saga|ArtSpeaker: URSESpeakerData*
Expression: FGameplayTag
TSoftObjectPtr<UTexture2D>A speaker's dialog portrait for an expression (its Portraits, neutral, its character's portrait, the library's).

URSEBlueprintLibrary_Audio

Module RSE, display name RSEBlueprint Library Audio. Music, sounds and volumes from Blueprint (D-052).

NodeKindCategoryParametersReturnsDescription
Get Audio Subsystem (GetAudioSubsystem)pure, staticRPG Saga|AudioWorldContextObject: UObject*URSEAudioSubsystem*The game's audio: the music stack, the sound catalog and the mixer.
Get Volume (GetVolume)pure, staticRPG Saga|Audio|VolumeChannel: ERSEAudioChannelfloatThe player's volume of a channel (0-1).
Play Music (PlayMusic)function, staticRPG Saga|AudioWorldContextObject: UObject*
Track: FRSEMusicTrack (ref)
Plays a track as story music (covers the area music) until Restore Music.
Play Music Context (PlayMusicContext)function, staticRPG Saga|AudioWorldContextObject: UObject*
Context: ERSEMusicContext
Plays the Audio settings' track of a context (Boss, Victory, a custom mood...) as story music, until Restore Music.
Play Sound 2D (PlaySound2D)function, staticRPG Saga|AudioWorldContextObject: UObject*
Sound: FGameplayTag
VolumeMultiplier: float = 1.000000
PitchMultiplier: float = 1.000000
boolPlays the catalog sound of a tag, not placed in the world (UI, stingers). Returns whether the tag has a sound.
Play Sound at Location (PlaySoundAtLocation)function, staticRPG Saga|AudioWorldContextObject: UObject*
Sound: FGameplayTag
Location: FVector
VolumeMultiplier: float = 1.000000
PitchMultiplier: float = 1.000000
boolPlays the catalog sound of a tag at a location. Returns whether the tag has a sound.
Reset Volumes (ResetVolumes)function, staticRPG Saga|Audio|VolumeEvery channel back to the Audio settings' default volume.
Restore Music (RestoreMusic)function, staticRPG Saga|AudioWorldContextObject: UObject*Ends the story music: the area music comes back.
Set Volume (SetVolume)function, staticRPG Saga|Audio|VolumeChannel: ERSEAudioChannel
Volume: float
bSave: bool = true
Sets and applies a channel volume (0-1); bSave stores it in the player's options.
Stop Music (StopMusic)function, staticRPG Saga|AudioWorldContextObject: UObject*
FadeOut: float = -1.000000
Story silence until Restore Music. FadeOut < 0 = the default fade.

URSEBlueprintLibrary_Battle

Module RSE, display name RSEBlueprint Library Battle. Battles from Blueprint (D-052): start an encounter from its data asset, find the running battle and its outcome, reach the directors.

NodeKindCategoryParametersReturnsDescription
Find ATBDirector (FindATBDirector)pure, staticRPG Saga|BattleWorldContextObject: UObject*
Encounter: URSEEncounterData* = None
ARSEATBBattleDirector*The map's ATB director (battle stage) for an encounter (none = the first one).
Find Tactics Director (FindTacticsDirector)pure, staticRPG Saga|BattleWorldContextObject: UObject*
Encounter: URSEEncounterData* = None
ARSETacticsBattleDirector*The map's Tactics director for an encounter (none = the first one).
Get Current Battle (GetCurrentBattle)pure, staticRPG Saga|BattleWorldContextObject: UObject*URSEBattle*The running battle (units, resources, events), or none.
Get Current Battle Outcome (GetCurrentBattleOutcome)pure, staticRPG Saga|BattleWorldContextObject: UObject*ERSEBattleOutcomeOutcome of the running battle from the player's side (Ongoing while it runs or without a battle).
Get Current Encounter (GetCurrentEncounter)pure, staticRPG Saga|BattleWorldContextObject: UObject*URSEEncounterData*The encounter being fought, or none.
Get Exploration Subsystem (GetExplorationSubsystem)pure, staticRPG Saga|BattleWorldContextObject: UObject*URSEExplorationSubsystem*Hands control from exploration to battles and back (Start Encounter, encounter events).
Get Unit Display Name (GetUnitDisplayName)pure, staticRPG Saga|BattleUnit: FRSEBattleUnit (ref)FTextDisplay name of a battle unit (its character's name).
Is in Battle (IsInBattle)pure, staticRPG Saga|BattleWorldContextObject: UObject*boolA battle is running on this map (started from exploration or directly on a director).
Start Encounter (StartEncounter)function, staticRPG Saga|BattleWorldContextObject: UObject*
Encounter: URSEEncounterData*
Source: AActor* = None
boolStarts a battle from an encounter asset: a Tactics encounter on the map's Tactics director that has it, a classic (ATB / turn-based) one on the map's battle stage. Source: the actor asking (it receives the encounter events).

URSEBlueprintLibrary_CombatRoles

Module RSECore, display name RSEBlueprint Library Combat Roles. Combat roles for Blueprints and scripts (D-093): definitions, asset roles, suggestions.

NodeKindCategoryParametersReturnsDescription
Get Combat Role Definition (GetCombatRoleDefinition)pure, staticRPG Saga|Combat RolesRole: FGameplayTag
OutDefinition: FRSECombatRoleDefinition (out)
boolThe definition of a role. Returns false when the project defines no such role.
Get Combat Roles (GetCombatRoles)pure, staticRPG Saga|Combat RolesTArray<FRSECombatRoleDefinition>Every combat role of the project (Project Settings -> Combat Roles).
Resolve Combat Role (ResolveCombatRole)pure, staticRPG Saga|Combat RolesQuery: FRSECombatRoleQuery (ref)FRSECombatRoleResolutionThe role looked up from a query (per-instance overrides and assets), with the project's registries.
Suggest Combat Role (SuggestCombatRole)pure, staticRPG Saga|Combat RolesShape: FRSECombatRoleShape (ref)FRSECombatRoleSuggestionThe suggested role for a measured shape, with the project's thresholds.

URSEBlueprintLibrary_Commands

Module RSECore, display name RSEBlueprint Library Commands. Blueprint access to the command bus, the players, the authority mode and the seeds (D-133).

NodeKindCategoryParametersReturnsDescription
Equal (Player Id) (EqualEqual_PlayerId)pure, staticRPG Saga|CommandsA: FRSEPlayerId
B: FRSEPlayerId
boolBoth ids are the same player.
Get Authority Mode (GetAuthorityMode)pure, staticRPG Saga|CommandsWorldContextObject: UObject*ERSEAuthorityModeStandalone (single player), Authority (session host) or Proxy (session guest).
Get Host Player Id (GetHostPlayerId)pure, staticRPG Saga|CommandsFRSEPlayerIdThe host's id (slot 0).
Get Local Player Id (GetLocalPlayerId)pure, staticRPG Saga|CommandsWorldContextObject: UObject*FRSEPlayerIdThis machine's player (the host in single player).
Get State Section Revision (GetStateSectionRevision)pure, staticRPG Saga|SaveWorldContextObject: UObject*
SectionId: FName
int32How many times a state section changed (its revision; 0 = never).
Has Game Authority (HasGameAuthority)pure, staticRPG Saga|CommandsWorldContextObject: UObject*boolThis machine may change game state (single player or the session host).
Is Host Player (IsHostPlayer)pure, staticRPG Saga|CommandsPlayer: FRSEPlayerIdboolThe player is the host.
Is Valid Player (IsValidPlayer)pure, staticRPG Saga|CommandsPlayer: FRSEPlayerIdboolA real player (not the game itself).
Make Player Id (MakePlayerId)pure, staticRPG Saga|CommandsSlot: int32FRSEPlayerIdThe id of a session slot (0 = host, 1.. = guests).
Next Game Seed (NextGameSeed)function, staticRPG Saga|SeedsWorldContextObject: UObject*
Stream: FName
int32The next seed of a named stream of the world seed (use it for any random roll that matters to the game).
Submit Command (Game) (SubmitGameCommand)function, staticRPG Saga|CommandsWorldContextObject: UObject*
Command: FInstancedStruct (ref)
FRSECommandResultSends a command as this machine's player (validated and applied by its handler, or sent to the host on a guest).
Was Command Applied (WasCommandApplied)pure, staticRPG Saga|CommandsResult: FRSECommandResult (ref)boolThe command was validated and applied.

URSEBlueprintLibrary_ExploreRPG

Module RSECore, display name RSEBlueprint Library Explore RPG. Exploration RPG rules for Blueprints (D-109).

NodeKindCategoryParametersReturnsDescription
Find Revive Option (FindReviveOption)function, staticRPG Saga|Exploration RPGWorldContextObject: UObject*
Fallen: URSECharacterData*
FRSEReviveOptionThe best way to revive a fallen member now (an item, a spell, help up).
Get Attempt Chance (GetAttemptChance)pure, staticRPG Saga|Exploration RPGWorldContextObject: UObject*
Score: float
Difficulty: float
floatChance (0..1) of an attempt with Score against Difficulty.
Get Member Skill (GetMemberSkill)function, staticRPG Saga|Exploration RPGWorldContextObject: UObject*
Member: URSECharacterData*
Skill: ERSEExploreSkill
floatA party member's score in an exploration skill now (Project Settings -> Exploration RPG -> Skills).
Revive Fallen Member (ReviveFallenMember)function, staticRPG Saga|Exploration RPGWorldContextObject: UObject*
Fallen: URSECharacterData*
boolRevives a fallen member the best way available. Returns true when it got up.

URSEBlueprintLibrary_FollowerLife

Module RSECore, display name RSEBlueprint Library Follower Life. Follower rules for Blueprints (D-129).

NodeKindCategoryParametersReturnsDescription
Get Follower Drift (GetFollowerDrift)pure, staticRPG Saga|Party FieldSeed: int32
Time: float
Radius: float
Period: float
FVector2DA member's smooth drift around its formation slot at Time (cm), deterministic from Seed.
Get Formation Spread (GetFormationSpread)pure, staticRPG Saga|Party FieldProfile: URSEFollowerProfile*
FreeWidth: float
floatThe formation's width for a free width around the leader (cm), from a profile.

URSEBlueprintLibrary_Game

Module RSECore, display name RSEBlueprint Library Game. Game-wide systems from Blueprint (D-052): rules profiles, adaptive difficulty, tutorials, the bestiary and the card collection.

NodeKindCategoryParametersReturnsDescription
Can Challenge Card Opponent (CanChallengeCardOpponent)pure, staticRPG Saga|CardsWorldContextObject: UObject*
Opponent: URSECardOpponentData*
ERSECardChallengeResultWhether the player can challenge an opponent now (conditions, rematch rule, deck).
Challenge Card Opponent (ChallengeCardOpponent)function, staticRPG Saga|CardsWorldContextObject: UObject*
Opponent: URSECardOpponentData*
Opens the card table against an opponent (checks and table screen), like the Start Card Match effect.
Get Active Rules Profile (GetActiveRulesProfile)pure, staticRPG Saga|RulesWorldContextObject: UObject*URSERulesProfile*The rules profile in use (none = the global Project Settings).
Get Bestiary Knowledge (GetBestiaryKnowledge)pure, staticRPG Saga|BestiaryWorldContextObject: UObject*
Enemy: URSECharacterData*
FRSEBestiaryKnowledgeWhat the bestiary reveals about an enemy now.
Get Bestiary Subsystem (GetBestiarySubsystem)pure, staticRPG Saga|BestiaryWorldContextObject: UObject*URSEBestiarySubsystem*The bestiary: enemies met and defeated, what their entries reveal, and its change event.
Get Card Count (GetCardCount)pure, staticRPG Saga|CardsWorldContextObject: UObject*
Card: URSECardData*
int32Copies of a card the player owns.
Get Card Subsystem (GetCardSubsystem)pure, staticRPG Saga|CardsWorldContextObject: UObject*URSECardSubsystem*The card game: collection, deck, matches and their events.
Get Defeat Count (GetDefeatCount)pure, staticRPG Saga|BestiaryWorldContextObject: UObject*
Enemy: URSECharacterData*
int32Times an enemy type was defeated.
Get Difficulty Subsystem (GetDifficultySubsystem)pure, staticRPG Saga|DifficultyWorldContextObject: UObject*URSEDifficultySubsystem*Adaptive enemy intelligence of the game (per battle mode).
Get Enemy Intelligence (GetEnemyIntelligence)pure, staticRPG Saga|DifficultyWorldContextObject: UObject*
Mode: FGameplayTag
floatCurrent adaptive enemy intelligence (0-1) of a battle mode (Battle.Mode.*).
Get Rules Subsystem (GetRulesSubsystem)pure, staticRPG Saga|RulesWorldContextObject: UObject*URSERulesSubsystem*The game's rules profile (switchable by the story; battles copy it when they start).
Get Tutorial Subsystem (GetTutorialSubsystem)pure, staticRPG Saga|TutorialsWorldContextObject: UObject*URSETutorialSubsystem*Contextual tutorials: triggers, seen state and the tutorial event.
Give Card (GiveCard)function, staticRPG Saga|CardsWorldContextObject: UObject*
Card: URSECardData*
Count: int32 = 1
int32Gives copies of a card (capped by the copies limit). Returns copies added.
Is Tutorial Seen (IsTutorialSeen)pure, staticRPG Saga|TutorialsWorldContextObject: UObject*
Tutorial: URSETutorialData*
boolThe tutorial was shown already.
Notify Tutorial Trigger (NotifyTutorialTrigger)function, staticRPG Saga|TutorialsWorldContextObject: UObject*
Trigger: FGameplayTag
URSETutorialData*Reports a game event (Tutorial.Trigger.*): the first unseen tutorial with that trigger shows. Any new tag works as a custom trigger. Returns the tutorial shown, or none.
Set Active Rules Profile (SetActiveRulesProfile)function, staticRPG Saga|RulesWorldContextObject: UObject*
Profile: URSERulesProfile*
Switches the game's rules profile (none = the default profile). Running battles keep theirs.
Set Enemy Intelligence (SetEnemyIntelligence)function, staticRPG Saga|DifficultyWorldContextObject: UObject*
Mode: FGameplayTag
Intelligence: float
Sets the adaptive enemy intelligence (0-1) of a battle mode; adaptation continues from there.
Show Tutorial (ShowTutorial)function, staticRPG Saga|TutorialsWorldContextObject: UObject*
Tutorial: URSETutorialData*
bEvenIfSeen: bool = false
boolShows a tutorial now (marks it seen). bEvenIfSeen: again, even when already seen.

URSEBlueprintLibrary_Growth

Module RSECore, display name RSEBlueprint Library Growth. Progression systems from Blueprint (D-144): the game's system, points, allocations, the board, teachers, mastery and use growth.

NodeKindCategoryParametersReturnsDescription
Allocate Attribute Points (AllocateAttributePoints)function, staticRPG Saga|ProgressionWorldContextObject: UObject*
Character: URSECharacterData*
Stat: FGameplayTag
Count: int32 = 1
ERSEGrowthResult--- Changing (party commands) ---
Auto Allocate Growth (AutoAllocateGrowth)function, staticRPG Saga|ProgressionWorldContextObject: UObject*
Character: URSECharacterData*
ERSEGrowthResultSpends the character's points with the allocation policy.
Award Growth Points (AwardGrowthPoints)function, staticRPG Saga|ProgressionWorldContextObject: UObject*
Character: URSECharacterData*
Currency: FGameplayTag
Amount: int32 = 1
ERSEGrowthResultGives (or takes) points; Character empty = every member. Host only.
Buy Growth Ability (BuyGrowthAbility)function, staticRPG Saga|ProgressionWorldContextObject: UObject*
Character: URSECharacterData*
Ability: URSEAbilityData*
ERSEGrowthResultBuy Growth Ability
Can Learn from Teacher (CanLearnFromTeacher)pure, staticRPG Saga|ProgressionWorldContextObject: UObject*
Character: URSECharacterData*
Teacher: URSETeacherData*
Ability: URSEAbilityData*
ERSEGrowthResultWhether the character may learn the teacher's offer for Ability now.
Describe Growth Result (DescribeGrowthResult)pure, staticRPG Saga|ProgressionResult: ERSEGrowthResultFTextText of a result ("Not enough points.").
Estimate Class Growth Board Fill Level (EstimateClassGrowthBoardFillLevel)function, staticRPG Saga|Progression|GeneratorClass: URSEClassData*
Profile: URSERulesProfile*
MaxLevel: int32 = 99
int32D-154: Estimate Growth Board Fill Level for a hero of Class (its plan's board), e.g. while generating content.
Estimate Growth Board Fill Level (EstimateGrowthBoardFillLevel)function, staticRPG Saga|Progression|GeneratorCharacter: URSECharacterData*
Profile: URSERulesProfile*
MaxLevel: int32 = 99
StartLevel: int32 = 1
int32D-154: the level at which Character's growth board is full when every point goes to it and battles give a typical playthrough's points (Profile's Battle Points, Simulated Victories Per Level and Enemies Per Victory; empty = the project's settings), counted from Start Level. -1 = not full by Max Level (or no board). Generated boards fill near their Target Level.
Generate Growth Board (GenerateGrowthBoard)function, staticRPG Saga|Progression|GeneratorClass: URSEClassData*
Params: FRSEGrowthGeneratorParams (ref)
Board: URSEGrowthBoard*
Plan: URSEGrowthPlan* = None
Fills Board from Class (deterministic; replaces its nodes and edges) and gives Plan (optional) its board points.
Generate Growth Point Tables (GenerateGrowthPointTables)function, staticRPG Saga|Progression|GeneratorClass: URSEClassData*
Params: FRSEGrowthGeneratorParams (ref)
Plan: URSEGrowthPlan*
Fills Plan's point grants, key attributes and ability catalog from Class (deterministic; replaces them).
Get Ability Rank (GetAbilityRank)pure, staticRPG Saga|ProgressionWorldContextObject: UObject*
Character: URSECharacterData*
Ability: URSEAbilityData*
FRSEAbilityRankModifierUse growth rank (1 = base) and multipliers of an ability for the character.
Get Allocated Attribute Points (GetAllocatedAttributePoints)pure, staticRPG Saga|ProgressionWorldContextObject: UObject*
Character: URSECharacterData*
Stat: FGameplayTag
int32Points put into an attribute (Classic + Points).
Get Available Growth Points (GetAvailableGrowthPoints)pure, staticRPG Saga|ProgressionWorldContextObject: UObject*
Character: URSECharacterData*
Currency: FGameplayTag
int32Points of Currency the character may spend now.
Get Growth Board (GetGrowthBoard)pure, staticRPG Saga|ProgressionWorldContextObject: UObject*
Character: URSECharacterData*
URSEGrowthBoard*Get Growth Board
Get Growth Board Problems (GetGrowthBoardProblems)function, staticRPG Saga|Progression|GeneratorBoard: URSEGrowthBoard*
Errors: TArray<FText> (out)
Warnings: TArray<FText> (out)
Structural problems of a board (errors block a valid board; warnings are advice).
Get Growth Currencies (GetGrowthCurrencies)pure, staticRPG Saga|ProgressionWorldContextObject: UObject*
Character: URSECharacterData*
TArray<FGameplayTag>The currencies the character spends in the current system.
Get Growth Generator Defaults (GetGrowthGeneratorDefaults)pure, staticRPG Saga|Progression|GeneratorFRSEGrowthGeneratorParamsThe generator inputs of Project Settings -> Progression Systems -> Generator.
Get Growth Node Cost (GetGrowthNodeCost)pure, staticRPG Saga|ProgressionWorldContextObject: UObject*
Character: URSECharacterData*
NodeId: FName
int32What unlocking the node would cost now (-1 = not reachable yet).
Get Growth Options (GetGrowthOptions)pure, staticRPG Saga|ProgressionWorldContextObject: UObject*
Character: URSECharacterData*
TArray<FRSEGrowthOption>What the character could take now, scored (what Auto would pick from).
Get Growth Plan (GetGrowthPlan)pure, staticRPG Saga|ProgressionWorldContextObject: UObject*
Character: URSECharacterData*
URSEGrowthPlan*The character's Growth Plan and board (may be empty).
Get Mastery Points (GetMasteryPoints)pure, staticRPG Saga|ProgressionWorldContextObject: UObject*
Character: URSECharacterData*
Item: URSEItemData*
Ability: URSEAbilityData*
bMastered: bool (out)
int32Mastery points of an item's ability for the character, and whether it is mastered.
Get Progression System (GetProgressionSystem)pure, staticRPG Saga|ProgressionWorldContextObject: UObject*ERSEProgressionSystemThe progression system the game uses now.
Is Growth Node Unlocked (IsGrowthNodeUnlocked)pure, staticRPG Saga|ProgressionWorldContextObject: UObject*
Character: URSECharacterData*
NodeId: FName
boolThe node is open for the character (Classic + Growth Board).
Learn from Teacher (LearnFromTeacher)function, staticRPG Saga|ProgressionWorldContextObject: UObject*
Character: URSECharacterData*
Teacher: URSETeacherData*
Ability: URSEAbilityData*
ERSEGrowthResultLearn from Teacher
Respec Character (RespecCharacter)function, staticRPG Saga|ProgressionWorldContextObject: UObject*
Character: URSECharacterData*
Teacher: URSETeacherData* = None
ERSEGrowthResultResets the character's spent points (Teacher: the NPC offering it, for NPC mode).
Set Progression System (SetProgressionSystem)function, staticRPG Saga|ProgressionWorldContextObject: UObject*
System: ERSEProgressionSystemChoice
bForce: bool = false
ERSEGrowthResultThe system the game uses from now on (New Game choice; Force skips the settings' check). Host only.
Unlock Growth Node (UnlockGrowthNode)function, staticRPG Saga|ProgressionWorldContextObject: UObject*
Character: URSECharacterData*
NodeId: FName
ERSEGrowthResultUnlock Growth Node

URSEBlueprintLibrary_Items

Module RSECore, display name RSEBlueprint Library Items. Items and money from Blueprint (D-052): the shared inventory, money, shop prices and purchases, inns.

NodeKindCategoryParametersReturnsDescription
Add Money (AddMoney)function, staticRPG Saga|EconomyWorldContextObject: UObject*
Amount: int32
int32Adds money (capped by the Economy Max Money). Returns the money actually added.
Buy (Buy)function, staticRPG Saga|EconomyWorldContextObject: UObject*
Shop: URSEShopData*
EntryIndex: int32
Count: int32 = 1
ERSEShopResultPays and adds Count of the entry's item.
Can Buy (CanBuy)pure, staticRPG Saga|EconomyWorldContextObject: UObject*
Shop: URSEShopData*
EntryIndex: int32
Count: int32 = 1
ERSEShopResultWhether the party could buy Count of a shop entry now, or why not (money, stock, availability, room).
Can Sell (CanSell)pure, staticRPG Saga|EconomyWorldContextObject: UObject*
Item: URSEItemData*
Count: int32 = 1
Shop: URSEShopData* = None
ERSEShopResultWhether the party could sell Count of an item now, or why not (key items, not enough, the shop does not buy).
Get Buy Price (GetBuyPrice)pure, staticRPG Saga|EconomyWorldContextObject: UObject*
Shop: URSEShopData*
EntryIndex: int32
int32Price of a shop entry (its override, else the item's price).
Get Inn Cost (GetInnCost)pure, staticRPG Saga|EconomyWorldContextObject: UObject*
CostOverride: int32 = -1
int32Price of a night (CostOverride >= 0, else the Economy default).
Get Inventory Items (GetInventoryItems)function, staticRPG Saga|ItemsWorldContextObject: UObject*
Kind: ERSEItemKind
OutItems: TArray<URSEItemData*> (out)
OutCounts: TArray<int32> (out)
Held items of a kind in acquisition order, with their counts (same index).
Get Inventory Stacks (GetInventoryStacks)pure, staticRPG Saga|ItemsWorldContextObject: UObject*TArray<FRSEItemStack>Every stack of the inventory (item and count).
Get Item Count (GetItemCount)pure, staticRPG Saga|ItemsWorldContextObject: UObject*
Item: URSEItemData*
int32How many of an item the party holds.
Get Item Kind (GetItemKind)pure, staticRPG Saga|ItemsItem: URSEItemData*ERSEItemKindConsumable, equipment, key item or document.
Get Max Buy Count (GetMaxBuyCount)pure, staticRPG Saga|EconomyWorldContextObject: UObject*
Shop: URSEShopData*
EntryIndex: int32
int32Most of an entry the party could buy now (money, stock, stack room).
Get Money (GetMoney)pure, staticRPG Saga|EconomyWorldContextObject: UObject*int32The party's money.
Get Offered Shop Entries (GetOfferedShopEntries)pure, staticRPG Saga|EconomyWorldContextObject: UObject*
Shop: URSEShopData*
TArray<int32>Entries of a shop offered now (availability passes), including sold-out ones.
Get Sell Price (GetSellPrice)pure, staticRPG Saga|EconomyWorldContextObject: UObject*
Item: URSEItemData*
Shop: URSEShopData* = None
int32What a shop pays for one item (Shop empty = the Economy settings' sell ratio).
Get Stock Left (GetStockLeft)pure, staticRPG Saga|EconomyWorldContextObject: UObject*
Shop: URSEShopData*
EntryIndex: int32
int32Stock left of a shop entry (-1 = unlimited).
Give Item (GiveItem)function, staticRPG Saga|ItemsWorldContextObject: UObject*
Item: URSEItemData*
Count: int32 = 1
int32Gives items to the party (capped by the item's stack limit). Returns how many were added.
Has Item (HasItem)pure, staticRPG Saga|ItemsWorldContextObject: UObject*
Item: URSEItemData*
Count: int32 = 1
boolThe party holds at least Count of an item.
Rest at Inn (RestAtInn)function, staticRPG Saga|EconomyWorldContextObject: UObject*
CostOverride: int32 = -1
ERSEInnResultPays and restores every member, then the rest fade plays (like the Rest At Inn effect).
Sell (Sell)function, staticRPG Saga|EconomyWorldContextObject: UObject*
Item: URSEItemData*
Count: int32 = 1
Shop: URSEShopData* = None
ERSEShopResultRemoves Count of Item and pays their sell price.
Spend Money (SpendMoney)function, staticRPG Saga|EconomyWorldContextObject: UObject*
Amount: int32
boolPays Amount if the party has it. Returns false (and pays nothing) otherwise.
Take Item (TakeItem)function, staticRPG Saga|ItemsWorldContextObject: UObject*
Item: URSEItemData*
Count: int32 = 1
int32Takes up to Count items from the party. Returns how many were taken.

URSEBlueprintLibrary_Narrative

Module RSECore, display name RSEBlueprint Library Narrative. Story state from Blueprint (D-052): flags, variables, puzzles, areas and events, conditions and effects, interactions, dialogs and quests.

NodeKindCategoryParametersReturnsDescription
Abort Dialog (AbortDialog)function, staticRPG Saga|DialogWorldContextObject: UObject*Stops the running blocking dialog now (effects already applied stay applied).
Add Member (Context) (EffectAddMember)function, staticRPG Saga|Narrative|ContextContext: FRSEEffectContext (ref)
Character: URSECharacterData*
boolRecruits a character. Returns false if already a member.
Add Money (Context) (EffectAddMoney)function, staticRPG Saga|Narrative|ContextContext: FRSEEffectContext (ref)
Amount: int32
int32Adds money (negative: takes up to what the party has). Returns the change applied.
Add to Variable (AddToVariable)function, staticRPG Saga|NarrativeWorldContextObject: UObject*
Variable: FGameplayTag
Delta: int32 = 1
int32Adds to a story variable (negative subtracts). Returns the new value.
Can Run Interaction (CanRunInteraction)pure, staticRPG Saga|NarrativeWorldContextObject: UObject*
Interaction: URSEInteractionData*
boolWhether an Interaction asset would run now.
Check Conditions (CheckConditions)pure, staticRPG Saga|NarrativeWorldContextObject: UObject*
Conditions: FRSEConditionSet (ref)
boolWhether a list of conditions passes now (an empty list passes).
Check Conditions (Context) (ContextCheckConditions)pure, staticRPG Saga|Narrative|ContextContext: FRSEConditionContext (ref)
Conditions: FRSEConditionSet (ref)
boolEvaluates a list of conditions in this context (composite Blueprint conditions).
Complete Quest Objective (CompleteQuestObjective)function, staticRPG Saga|QuestsWorldContextObject: UObject*
Quest: URSEQuestData*
Objective: FName
boolCompletes an objective of an active quest's current stage.
Get Dialog Subsystem (GetDialogSubsystem)pure, staticRPG Saga|DialogWorldContextObject: UObject*URSEDialogSubsystem*Dialogs of the game: the running dialog, barks, history and events.
Get Item Count (Context) (ContextGetItemCount)pure, staticRPG Saga|Narrative|ContextContext: FRSEConditionContext (ref)
Item: URSEItemData*
int32How many of an item the party holds in this context.
Get Level (Context) (ContextGetLevel)pure, staticRPG Saga|Narrative|ContextContext: FRSEConditionContext (ref)
Character: URSECharacterData*
int32Level of a character in this context.
Get Money (Context) (ContextGetMoney)pure, staticRPG Saga|Narrative|ContextContext: FRSEConditionContext (ref)int32The party's money in this context.
Get Narrative Subsystem (GetNarrativeSubsystem)pure, staticRPG Saga|NarrativeWorldContextObject: UObject*URSENarrativeSubsystem*The story state of the game (flags, variables, puzzles, areas, events) and its events.
Get Party Members (Context) (ContextGetPartyMembers)pure, staticRPG Saga|Narrative|ContextContext: FRSEConditionContext (ref)TArray<URSECharacterData*>Characters in the party in this context, in menu order.
Get Quest Status (GetQuestStatus)pure, staticRPG Saga|QuestsWorldContextObject: UObject*
Quest: URSEQuestData*
ERSEQuestStatusStatus of a quest (not started, active, completed, failed...).
Get Quest Subsystem (GetQuestSubsystem)pure, staticRPG Saga|QuestsWorldContextObject: UObject*URSEQuestSubsystem*Quests and endings of the game, with their events.
Get Variable (GetVariable)pure, staticRPG Saga|NarrativeWorldContextObject: UObject*
Variable: FGameplayTag
int32A story variable (Narrative.Var.*); 0 when never set.
Get Variable (Context) (ContextGetVariable)pure, staticRPG Saga|Narrative|ContextContext: FRSEConditionContext (ref)
Variable: FGameplayTag
int32A story variable in this context (0 when never set).
Get World (Context) (ContextGetWorldContext)pure, staticRPG Saga|Narrative|ContextContext: FRSEConditionContext (ref)UObject*The game world of a context (null in headless tests). World nodes inside Blueprint effects work without it too.
Give Item (Context) (EffectGiveItem)function, staticRPG Saga|Narrative|ContextContext: FRSEEffectContext (ref)
Item: URSEItemData*
Count: int32 = 1
int32Gives items to the party (capped by the stack limit). Returns how many were added.
Is Area Unlocked (IsAreaUnlocked)pure, staticRPG Saga|NarrativeWorldContextObject: UObject*
Area: FGameplayTag
boolWhether a story area (Narrative.Area.*) is unlocked.
Is Area Unlocked (Context) (ContextIsAreaUnlocked)pure, staticRPG Saga|Narrative|ContextContext: FRSEConditionContext (ref)
Area: FGameplayTag
boolWhether a story area is unlocked in this context.
Is Dialog Active (IsDialogActive)pure, staticRPG Saga|DialogWorldContextObject: UObject*boolA blocking dialog is running (saving, travel and random encounters wait for it).
Is Event Seen (IsEventSeen)pure, staticRPG Saga|NarrativeWorldContextObject: UObject*
Event: FGameplayTag
boolWhether a scene or event (Narrative.Event.*) was seen.
Is Event Seen (Context) (ContextIsEventSeen)pure, staticRPG Saga|Narrative|ContextContext: FRSEConditionContext (ref)
Event: FGameplayTag
boolWhether a scene or event was seen in this context.
Is Flag Set (IsFlagSet)pure, staticRPG Saga|NarrativeWorldContextObject: UObject*
Flag: FGameplayTag
boolWhether a story flag (Narrative.Flag.*) is set.
Is Flag Set (Context) (ContextIsFlagSet)pure, staticRPG Saga|Narrative|ContextContext: FRSEConditionContext (ref)
Flag: FGameplayTag
boolWhether a flag is set in this context.
Is Party Member (Context) (ContextIsPartyMember)pure, staticRPG Saga|Narrative|ContextContext: FRSEConditionContext (ref)
Character: URSECharacterData*
boolWhether a character is in the party in this context.
Is Puzzle Solved (IsPuzzleSolved)pure, staticRPG Saga|PuzzlesWorldContextObject: UObject*
Puzzle: FGameplayTag
boolWhether a puzzle (Narrative.Puzzle.*) is solved.
Is Puzzle Solved (Context) (ContextIsPuzzleSolved)pure, staticRPG Saga|Narrative|ContextContext: FRSEConditionContext (ref)
Puzzle: FGameplayTag
boolWhether a puzzle is solved in this context.
Is Quest Active (IsQuestActive)pure, staticRPG Saga|QuestsWorldContextObject: UObject*
Quest: URSEQuestData*
boolThe quest is active.
Modify Member Resource (Context) (EffectModifyMemberResource)function, staticRPG Saga|Narrative|ContextContext: FRSEEffectContext (ref)
Character: URSECharacterData*
Resource: FGameplayTag
Delta: float
Changes a party member's resource (HP, MP, custom) by Delta, within its bounds.
Modify Variable (Context) (EffectModifyVariable)function, staticRPG Saga|Narrative|ContextContext: FRSEEffectContext (ref)
Variable: FGameplayTag
Op: ERSEVariableOp
Value: int32
Sets (Op Set) or adds to (Op Add) a story variable.
Remove Member (Context) (EffectRemoveMember)function, staticRPG Saga|Narrative|ContextContext: FRSEEffectContext (ref)
Character: URSECharacterData*
Departure: ERSEDepartureKind = Permanent
boolA character leaves (permanently: its equipment returns to the inventory).
Request Battle (RequestBattle)function, staticRPG Saga|NarrativeWorldContextObject: UObject*
Encounter: TSoftObjectPtr<URSEEncounterData>
Asks the game to start a battle (the encounter decides its mode), exactly like the Start Battle effect.
Request Battle (Context) (EffectRequestBattle)function, staticRPG Saga|Narrative|ContextContext: FRSEEffectContext (ref)
Encounter: TSoftObjectPtr<URSEEncounterData>
Requests a battle (performed after a running dialog, like the Start Battle effect).
Request Dialog (Context) (EffectRequestDialog)function, staticRPG Saga|Narrative|ContextContext: FRSEEffectContext (ref)
Dialog: TSoftObjectPtr<UObject>
Requests a dialog (after a running dialog, like the Start Dialog effect).
Request Scene (RequestScene)function, staticRPG Saga|NarrativeWorldContextObject: UObject*
Scene: TSoftObjectPtr<UObject>
Event: FGameplayTag
bMarkSeen: bool = true
Asks the game to play a scene (Scene Data or a dialog), exactly like the Play Scene effect.
Request Screen (RequestScreen)function, staticRPG Saga|NarrativeWorldContextObject: UObject*
Screen: TSoftObjectPtr<UObject>
Asks the game to open the screen of a data asset (a shop, a code lock, a card opponent, a tutorial), like the effects that open them.
Request Screen (Context) (EffectRequestScreen)function, staticRPG Saga|Narrative|ContextContext: FRSEEffectContext (ref)
Screen: TSoftObjectPtr<UObject>
Requests the screen of a data asset (shop, code lock, card opponent, tutorial).
Restore Party (Context) (EffectRestoreParty)function, staticRPG Saga|Narrative|ContextContext: FRSEEffectContext (ref)
Character: URSECharacterData* = None
Full HP / MP, no KO, no lasting statuses. Character empty = every member.
Run Effects (RunEffects)function, staticRPG Saga|NarrativeWorldContextObject: UObject*
Effects: FRSEEffectList (ref)
int32Runs a list of effects now, in order (each one's Only If gate is checked). Returns how many ran.
Run Effects (Context) (EffectRunEffects)function, staticRPG Saga|Narrative|ContextContext: FRSEEffectContext (ref)
Effects: FRSEEffectList (ref)
int32Runs a list of effects in this context. Returns how many ran.
Run Interaction (RunInteraction)function, staticRPG Saga|NarrativeWorldContextObject: UObject*
Interaction: URSEInteractionData*
ERSEInteractionResultRuns an Interaction asset (conditions, then effects; one-shot ones only once).
Set Area Unlocked (SetAreaUnlocked)function, staticRPG Saga|NarrativeWorldContextObject: UObject*
Area: FGameplayTag
bUnlocked: bool = true
Unlocks (or locks again) a story area.
Set Area Unlocked (Context) (EffectSetAreaUnlocked)function, staticRPG Saga|Narrative|ContextContext: FRSEEffectContext (ref)
Area: FGameplayTag
bUnlocked: bool = true
Unlocks or locks a story area.
Set Event Seen (SetEventSeen)function, staticRPG Saga|NarrativeWorldContextObject: UObject*
Event: FGameplayTag
bSeen: bool = true
Marks a scene or event seen (or unseen).
Set Event Seen (Context) (EffectSetEventSeen)function, staticRPG Saga|Narrative|ContextContext: FRSEEffectContext (ref)
Event: FGameplayTag
bSeen: bool = true
Marks a scene or event seen or unseen.
Set Flag (SetFlag)function, staticRPG Saga|NarrativeWorldContextObject: UObject*
Flag: FGameplayTag
bValue: bool = true
Sets or clears a story flag. Quests, doors and conditions react at once.
Set Flag (Context) (EffectSetFlag)function, staticRPG Saga|Narrative|ContextContext: FRSEEffectContext (ref)
Flag: FGameplayTag
bValue: bool = true
Sets or clears a story flag (reported like the Set Flag effect).
Set Puzzle Solved (SetPuzzleSolved)function, staticRPG Saga|PuzzlesWorldContextObject: UObject*
Puzzle: FGameplayTag
bSolved: bool = true
Marks a puzzle solved (or unsolved again).
Set Puzzle Solved (Context) (EffectSetPuzzleSolved)function, staticRPG Saga|Narrative|ContextContext: FRSEEffectContext (ref)
Puzzle: FGameplayTag
bSolved: bool = true
Marks a puzzle solved or unsolved.
Set Variable (SetVariable)function, staticRPG Saga|NarrativeWorldContextObject: UObject*
Variable: FGameplayTag
Value: int32
Sets a story variable.
Start Dialog (StartDialog)function, staticRPG Saga|DialogWorldContextObject: UObject*
Dialog: URSEDialogData*
Initiator: FGameplayTag
StartNode: FName = None
boolStarts a dialog (a blocking one waits for the running one; barks start at once). Returns true when it started or was queued.
Start Quest (StartQuest)function, staticRPG Saga|QuestsWorldContextObject: UObject*
Quest: URSEQuestData*
bIgnoreAvailability: bool = false
boolStarts a quest (checks its availability unless bIgnoreAvailability).
Take Item (Context) (EffectTakeItem)function, staticRPG Saga|Narrative|ContextContext: FRSEEffectContext (ref)
Item: URSEItemData*
Count: int32 = 1
int32Takes up to Count items from the party. Returns how many were taken.
To Condition Context (EffectToConditionContext)pure, staticRPG Saga|Narrative|ContextContext: FRSEEffectContext (ref)FRSEConditionContextThe read-only view of an effect context (to call the condition Context nodes from an effect).

URSEBlueprintLibrary_Party

Module RSECore, display name RSEBlueprint Library Party. The party from Blueprint (D-052): members and recruitment, the ATB formation, levels and experience, attributes and resources, equipment, field use of abilities and items, and Pacts.

NodeKindCategoryParametersReturnsDescription
Add Experience (AddExperience)function, staticRPG Saga|Party|ProgressionWorldContextObject: UObject*
Character: URSECharacterData*
Amount: int32
FRSELevelUpResultGives experience to a character: levels, stats, HP / MP and class abilities follow. Returns the levels gained and what they unlocked.
Add Experience to Party (AddExperienceToParty)function, staticRPG Saga|Party|ProgressionWorldContextObject: UObject*
Amount: int32
bOnlyStanding: bool = true
int32Gives the same experience to every member (bOnlyStanding: members that are not KO). Returns total levels gained.
Add Party Member (AddPartyMember)function, staticRPG Saga|PartyWorldContextObject: UObject*
Character: URSECharacterData*
boolRecruits a character (main, secondary or guest). Returns false if already a member.
Award Pact Points (AwardPactPoints)function, staticRPG Saga|PactsWorldContextObject: UObject*
Pact: URSEPactData*
Points: int32
Gives points to a Pact (spent on its abilities).
Bind Pact (BindPact)function, staticRPG Saga|PactsWorldContextObject: UObject*
Character: URSECharacterData*
Pact: URSEPactData*
ERSEPactBindResultBinds a Pact to a main character (replacing the one it held). Only outside battle.
Can Bind Pact (CanBindPact)pure, staticRPG Saga|PactsWorldContextObject: UObject*
Character: URSECharacterData*
Pact: URSEPactData*
ERSEPactBindResultWhether a character may take a Pact now.
Can Equip (CanEquip)pure, staticRPG Saga|Party|EquipmentWorldContextObject: UObject*
Character: URSECharacterData*
Item: URSEEquipmentData*
SlotId: FName
ERSEEquipResultWhether a character could wear Item in SlotId (class, slot kind, locked guest gear; ignores the inventory).
Can Learn Pact Ability (CanLearnPactAbility)pure, staticRPG Saga|PactsWorldContextObject: UObject*
Pact: URSEPactData*
Ability: URSEAbilityData*
ERSEPactLearnResultWhether a Pact ability can be learned now, or why not (points, prerequisites).
Cast Ability on Members (CastAbilityOnMembers)function, staticRPG Saga|Party|FieldWorldContextObject: UObject*
User: URSECharacterData*
Ability: URSEAbilityData*
Targets: TArray<URSECharacterData*> (ref)
ERSEFieldUseResultA member casts an ability outside battle (healing, cures) on members; its costs are paid.
Equip (Equip)function, staticRPG Saga|Party|EquipmentWorldContextObject: UObject*
Character: URSECharacterData*
Item: URSEEquipmentData*
SlotId: FName
ERSEEquipResultTakes Item from the inventory and puts it in SlotId; what it replaces goes back to the inventory.
Forget Ability (ForgetAbility)function, staticRPG Saga|Party|AbilitiesWorldContextObject: UObject*
Character: URSECharacterData*
Ability: URSEAbilityData*
ERSEAbilityLearnResultA character forgets an ability: a learned one is removed, a class ability is hidden until learned again. No Change = it does not have it.
Get ATB Formation (GetATBFormation)pure, staticRPG Saga|Party|FormationWorldContextObject: UObject*TArray<URSECharacterData*>Members that fight in ATB / turn-based battles now, in order.
Get ATB Party Size (GetATBPartySize)pure, staticRPG Saga|Party|FormationWorldContextObject: UObject*int32Size of the ATB party (Battle settings of the game's rules profile).
Get ATB Row (GetATBRow)pure, staticRPG Saga|Party|FormationWorldContextObject: UObject*
Character: URSECharacterData*
ERSEATBRowThe ATB row (front / back) a member fights in.
Get Bound Pact (GetBoundPact)pure, staticRPG Saga|PactsWorldContextObject: UObject*
Character: URSECharacterData*
URSEPactData*A character's Pact, or none.
Get Equip Candidates (GetEquipCandidates)pure, staticRPG Saga|Party|EquipmentWorldContextObject: UObject*
Character: URSECharacterData*
SlotId: FName
TArray<URSEEquipmentData*>Inventory equipment the character could wear in SlotId.
Get Equipment (GetEquipment)pure, staticRPG Saga|Party|EquipmentWorldContextObject: UObject*
Character: URSECharacterData*
FRSECharacterEquipmentWhat a character wears (slot id -> item).
Get Equipped Item (GetEquippedItem)pure, staticRPG Saga|Party|EquipmentWorldContextObject: UObject*
Character: URSECharacterData*
SlotId: FName
URSEEquipmentData*The item a character wears in a slot, or none.
Get Experience (GetExperience)pure, staticRPG Saga|Party|ProgressionWorldContextObject: UObject*
Character: URSECharacterData*
int32Experience total of a character.
Get Experience to Next Level (GetExperienceToNextLevel)pure, staticRPG Saga|Party|ProgressionWorldContextObject: UObject*
Character: URSECharacterData*
int32Experience still missing for the next level (0 at the maximum level).
Get Learned Abilities (GetLearnedAbilities)pure, staticRPG Saga|Party|AbilitiesWorldContextObject: UObject*
Character: URSECharacterData*
TArray<URSEAbilityData*>Abilities a character learned through Learn Ability, in learning order.
Get Learned Pact Abilities (GetLearnedPactAbilities)pure, staticRPG Saga|PactsWorldContextObject: UObject*
Pact: URSEPactData*
TArray<URSEAbilityData*>Abilities learned with a Pact, in learning order.
Get Level (GetLevel)pure, staticRPG Saga|Party|ProgressionWorldContextObject: UObject*
Character: URSECharacterData*
int32Current level of a character.
Get Member Abilities (GetMemberAbilities)pure, staticRPG Saga|PartyWorldContextObject: UObject*
Character: URSECharacterData*
TArray<URSEAbilityData*>Abilities a member has now: its class's for its level, plus those of its equipment and Pact, then the learned ones.
Get Member Attribute (GetMemberAttribute)pure, staticRPG Saga|Party|AttributesWorldContextObject: UObject*
Character: URSECharacterData*
Attribute: FGameplayTag
floatFinal attribute of a member (level, equipment, derived formulas).
Get Member Attributes (GetMemberAttributes)pure, staticRPG Saga|Party|AttributesWorldContextObject: UObject*
Character: URSECharacterData*
FRSEAttributeSetEvery attribute of a member now (level and equipment).
Get Member Resource (GetMemberResource)pure, staticRPG Saga|Party|AttributesWorldContextObject: UObject*
Character: URSECharacterData*
Resource: FGameplayTag
floatCurrent value of a member's resource (HP, MP, custom ones kept after battle).
Get Member Resource Max (GetMemberResourceMax)pure, staticRPG Saga|Party|AttributesWorldContextObject: UObject*
Character: URSECharacterData*
Resource: FGameplayTag
floatMaximum of a member's resource now (level, equipment).
Get Member Vitals (GetMemberVitals)pure, staticRPG Saga|PartyWorldContextObject: UObject*
Character: URSECharacterData*
FRSECharacterVitalsCurrent resources, KO and lasting statuses of a member.
Get Owned Pacts (GetOwnedPacts)pure, staticRPG Saga|PactsWorldContextObject: UObject*TArray<URSEPactData*>Pacts the party has obtained, in the order obtained.
Get Pact Holder (GetPactHolder)pure, staticRPG Saga|PactsWorldContextObject: UObject*
Pact: URSEPactData*
URSECharacterData*Who holds a Pact, or none.
Get Pact Points (GetPactPoints)pure, staticRPG Saga|PactsWorldContextObject: UObject*
Pact: URSEPactData*
int32Unspent points of a Pact.
Get Party Members (GetPartyMembers)pure, staticRPG Saga|PartyWorldContextObject: UObject*TArray<URSECharacterData*>Characters in the party, in menu order.
Get Party State (GetPartyState)pure, staticRPG Saga|PartyWorldContextObject: UObject*FRSEPartyStateThe whole party state (members, inventory, money, equipment, formation, Pacts, levels), read-only.
Get Party Subsystem (GetPartySubsystem)pure, staticRPG Saga|PartyWorldContextObject: UObject*URSEPartySubsystem*The party of the game (state, attributes and resources, and their events).
Get Tactics Roster (GetTacticsRoster)pure, staticRPG Saga|Party|FormationWorldContextObject: UObject*TArray<URSECharacterData*>Members that can be deployed in Tactics battles (main and secondary characters).
Give Pact (GivePact)function, staticRPG Saga|PactsWorldContextObject: UObject*
Pact: URSEPactData*
boolThe party obtains a Pact. Returns false if already owned.
Has Learned Ability (HasLearnedAbility)pure, staticRPG Saga|Party|AbilitiesWorldContextObject: UObject*
Character: URSECharacterData*
Ability: URSEAbilityData*
boolWhether a character learned an ability through Learn Ability (class, equipment and Pact abilities do not count).
Has Pact (HasPact)pure, staticRPG Saga|PactsWorldContextObject: UObject*
Pact: URSEPactData*
boolThe party owns a Pact.
Is In ATB Formation (IsInATBFormation)pure, staticRPG Saga|Party|FormationWorldContextObject: UObject*
Character: URSECharacterData*
boolThe member fights in ATB / turn-based battles now.
Is Member KO (IsMemberKO)pure, staticRPG Saga|PartyWorldContextObject: UObject*
Character: URSECharacterData*
boolThe member is knocked out (HP 0).
Is Party Member (IsPartyMember)pure, staticRPG Saga|PartyWorldContextObject: UObject*
Character: URSECharacterData*
boolThe character is in the party now.
Learn Ability (LearnAbility)function, staticRPG Saga|Party|AbilitiesWorldContextObject: UObject*
Character: URSECharacterData*
Ability: URSEAbilityData*
ERSEAbilityLearnResultA character learns an ability for good (like the Learn Ability effect; the game shows a notice). No Change = it already has it.
Learn Pact Ability (LearnPactAbility)function, staticRPG Saga|PactsWorldContextObject: UObject*
Pact: URSEPactData*
Ability: URSEAbilityData*
ERSEPactLearnResultSpends Pact points on one of its abilities. Only outside battle.
Modify Member Resource (ModifyMemberResource)function, staticRPG Saga|Party|AttributesWorldContextObject: UObject*
Character: URSECharacterData*
Resource: FGameplayTag
Delta: float
Adds Delta (negative removes) to a member's resource, within its bounds; HP 0 = KO.
Notify Party Changed (NotifyPartyChanged)function, staticRPG Saga|PartyWorldContextObject: UObject*Reports a party change made outside story effects (quests re-evaluate, menus refresh). The nodes above do it themselves.
Preview Equip (PreviewEquip)function, staticRPG Saga|Party|EquipmentWorldContextObject: UObject*
Character: URSECharacterData*
Item: URSEEquipmentData*
OutCurrent: FRSEAttributeSet (out)
OutAfter: FRSEAttributeSet (out)
boolAttributes now and with Item worn instead (equipment comparison). Returns false when the character cannot wear it.
Remove Party Member (RemovePartyMember)function, staticRPG Saga|PartyWorldContextObject: UObject*
Character: URSECharacterData*
Departure: ERSEDepartureKind = Permanent
boolA character leaves: Permanent returns its equipment to the inventory; Parallel Scenario keeps it on the character.
Restore Party (RestoreParty)function, staticRPG Saga|PartyWorldContextObject: UObject*
Character: URSECharacterData* = None
Full HP / MP, no KO, no lasting statuses (rest points, story heals). Character empty = every member.
Set ATB Row (SetATBRow)function, staticRPG Saga|Party|FormationWorldContextObject: UObject*
Character: URSECharacterData*
Row: ERSEATBRow
ERSEFormationResultMoves a member to the front or back ATB row.
Set In ATB Formation (SetInATBFormation)function, staticRPG Saga|Party|FormationWorldContextObject: UObject*
Character: URSECharacterData*
bActive: bool
ERSEFormationResultMoves a member into (bActive) or out of the ATB party.
Set Level (SetLevel)function, staticRPG Saga|Party|ProgressionWorldContextObject: UObject*
Character: URSECharacterData*
Level: int32
FRSELevelUpResultSets a character's level (experience moves to the level's threshold).
Unbind Pact (UnbindPact)function, staticRPG Saga|PactsWorldContextObject: UObject*
Character: URSECharacterData*
ERSEPactBindResultTakes a character's Pact away. Only outside battle.
Unequip (Unequip)function, staticRPG Saga|Party|EquipmentWorldContextObject: UObject*
Character: URSECharacterData*
SlotId: FName
boolReturns the item in SlotId to the inventory.
Use Item on Members (UseItemOnMembers)function, staticRPG Saga|Party|FieldWorldContextObject: UObject*
Item: URSEConsumableData*
Targets: TArray<URSECharacterData*> (ref)
ERSEFieldUseResultUses one consumable on members (a single target, or several when the item hits the whole party).

URSEBlueprintLibrary_PartyField

Module RSECore, display name RSEBlueprint Library Party Field. Party field rules for Blueprints (D-097).

NodeKindCategoryParametersReturnsDescription
Compute Formation Slots (ComputeFormationSlots)pure, staticRPG Saga|Party FieldLeaderLocation: FVector
LeaderYaw: float
Count: int32
TArray<FVector>World places of Count followers behind a leader (Project Settings -> Party Field -> Formation Slots).
Decide Follow Action (DecideFollowAction)pure, staticRPG Saga|Party FieldDistanceToSlot: float
DistanceToLeader: float
ERSEFollowActionWhat a follower does next, from its distance to its place and to the leader.
Get Command Success Chance (GetCommandSuccessChance)pure, staticRPG Saga|Party FieldCommand: URSEPartyCommandData*
Member: URSECharacterData*
floatChance (0..1) that Member's attempt at Command works.

URSEBlueprintLibrary_Save

Module RSE, display name RSEBlueprint Library Save. Saving and loading from Blueprint (D-052).

NodeKindCategoryParametersReturnsDescription
Allow Saving (AllowSaving)function, staticRPG Saga|SaveWorldContextObject: UObject*
Reason: FName
Lifts a save block set with Block Saving (same reason).
Block Saving (BlockSaving)function, staticRPG Saga|SaveWorldContextObject: UObject*
Reason: FName
Scope: ERSESaveBlockScope = All
Blocks saving for a reason until Allow Saving with the same reason (a custom no-save area, a minigame). Scope Consumable Item Only still allows save points. Reasons are counted.
Can Save Now (CanSaveNow)function, staticRPG Saga|SaveWorldContextObject: UObject*
Source: ERSESaveRequestSource
Reasons: TArray<FName> (out)
boolWhether a save is allowed now; Reasons lists what blocks it (Battle, Dialog, Cutscene, NoSaveZone...).
Delete Save Slot (DeleteSaveSlot)function, staticRPG Saga|SaveWorldContextObject: UObject*
SlotName: FString
boolDeletes a save slot (its file and backup).
Get Continue Slot (GetContinueSlot)function, staticRPG Saga|SaveWorldContextObject: UObject*
SlotName: FString (out)
boolThe most recent loadable slot (Continue). Returns false when there is none.
Get Play Time Seconds (GetPlayTimeSeconds)pure, staticRPG Saga|SaveWorldContextObject: UObject*floatPlay time of this game in seconds.
Get Save Flow Subsystem (GetSaveFlowSubsystem)pure, staticRPG Saga|SaveWorldContextObject: UObject*URSESaveFlowSubsystem*The save flow in the world: save points, the save item, the save screen, load and travel.
Get Save Slots (GetSaveSlots)function, staticRPG Saga|SaveWorldContextObject: UObject*TArray<FRSESaveSlotInfo>Every slot's summary (autosaves first, then manual slots; empty ones included).
Get Save Subsystem (GetSaveSubsystem)pure, staticRPG Saga|SaveWorldContextObject: UObject*URSESaveSubsystem*Save files, slots, save rules, play time and the save events.
Get Slot Name (GetSlotName)pure, staticRPG Saga|SaveWorldContextObject: UObject*
SlotIndex: int32
FStringName of manual slot N (0-based).
Has Any Save (HasAnySave)pure, staticRPG Saga|SaveWorldContextObject: UObject*boolAt least one loadable save exists (Continue / Load in a main menu).
Load Game (LoadGame)function, staticRPG Saga|SaveWorldContextObject: UObject*
SlotName: FString
ERSESaveResultLoads a slot and opens its map (the player appears where the save was made).
Open Save Screen (OpenSaveScreen)function, staticRPG Saga|SaveWorldContextObject: UObject*
SavePointId: FName
boolOpens the save screen (slot list), like a save point does.
Save Game (SaveGame)function, staticRPG Saga|SaveWorldContextObject: UObject*
SlotName: FString
SavePointId: FName
ERSESaveResultSaves the game now in a slot, with the player's place (SavePointId: the save point used, if any). Manual saves cannot overwrite the autosave slots.
Start New Game (StartNewGame)function, staticRPG Saga|SaveWorldContextObject: UObject*A new game for every saved system (party, story, quests, cards...), play time back to zero.

URSEBlueprintLibrary_Stealth

Module RSECore, display name RSEBlueprint Library Stealth. Stealth rules for Blueprints (D-097).

NodeKindCategoryParametersReturnsDescription
Advance Detection Meter (AdvanceDetectionMeter)function, staticRPG Saga|StealthMeter: FRSEDetectionMeter (ref)
Rate: float
DeltaSeconds: float
boolAdvances a detection meter (fills at Rate, drains after the decay delay). Returns true the moment it becomes full.
Compute Detection Fill Rate (ComputeDetectionFillRate)pure, staticRPG Saga|StealthInput: FRSEDetectionInput (ref)
Behavior: URSERoamingBehaviorData*
floatHow fast an enemy with Behavior fills its detection meter for what it perceives (meter share per second; 0 = nothing).
Get Detection Awareness (GetDetectionAwareness)pure, staticRPG Saga|StealthMeter: FRSEDetectionMeter (ref)ERSEStealthAwarenessD-151: unaware, suspicious or alerted, from a meter.

URSEBlueprintLibrary_UI

Module RSE, display name RSEBlueprint Library UI. Screens, input prompts, visual styles and player options from Blueprint (D-052).

NodeKindCategoryParametersReturnsDescription
Close Modal Screen (CloseModalScreen)function, staticRPG Saga|UIWorldContextObject: UObject*
Screen: UObject*
Unregisters a custom screen (the HUD comes back; world input waits a moment so the closing press does not reach it).
Get Active Visual Style (GetActiveVisualStyle)pure, staticRPG Saga|Visual StyleWorldContextObject: UObject*URSEVisualStyle*The style applied now, or none.
Get Dialog Text Speed (GetDialogTextSpeed)pure, staticRPG Saga|DialogWorldContextObject: UObject*int32Index into the Dialog settings' text speed steps (the player's option).
Get Gamepad Label Style (GetGamepadLabelStyle)pure, staticRPG Saga|InputERSEGamepadLabelStyleThe gamepad label set in use (the player's choice, else the project's).
Get Input Device (GetInputDevice)pure, staticRPG Saga|InputERSEInputDeviceThe device the key prompts show (the forced one, else the one used last).
Get Key Label (GetKeyLabel)pure, staticRPG Saga|InputKey: FKeyFTextShort label of a key for prompts (theme, active gamepad label set: Xbox, PlayStation, Steam Deck).
Get Keys Label (GetKeysLabel)pure, staticRPG Saga|InputKeys: TArray<FKey> (ref)FTextThe label of the first key of Keys for the device in use (empty when the device has none).
Get Player Option Bool (GetPlayerOptionBool)pure, staticRPG Saga|OptionsKey: FString
bDefault: bool = false
boolA stored bool player option (Default when never set).
Get Player Option Float (GetPlayerOptionFloat)pure, staticRPG Saga|OptionsKey: FString
Default: float = 0.000000
floatA stored float player option (Default when never set).
Get Player Option Int (GetPlayerOptionInt)pure, staticRPG Saga|OptionsKey: FString
Default: int32 = 0
int32A stored player option (Default when never set). Keys are shared with the built-in options screen.
Get Player Option String (GetPlayerOptionString)pure, staticRPG Saga|OptionsKey: FString
Default: FString
FStringA stored text player option (Default when never set).
Get Visual Style Subsystem (GetVisualStyleSubsystem)pure, staticRPG Saga|Visual StyleWorldContextObject: UObject*URSEVisualStyleSubsystem*The visual style layer of the current world (area -> player -> default).
Get Visual Styles (GetVisualStyles)function, staticRPG Saga|Visual StyleTArray<URSEVisualStyle*>The styles the player can pick from, in order.
Is Any Modal Screen Open (IsAnyModalScreenOpen)pure, staticRPG Saga|UIWorldContextObject: UObject*boolAny modal screen is open (menus, dialogs, shops, the card table...).
Is Dialog Auto Advance (IsDialogAutoAdvance)pure, staticRPG Saga|DialogWorldContextObject: UObject*boolDialog lines advance by themselves (the player's option).
Is Game Input Blocked (IsGameInputBlocked)pure, staticRPG Saga|UIWorldContextObject: UObject*boolWorld actions (Interact, the menu key) must wait: a screen is open or has just closed.
Open Modal Screen (OpenModalScreen)function, staticRPG Saga|UIWorldContextObject: UObject*
Screen: UObject*
Options: FRSEModalScreenOptions
Registers a custom screen as open: the exploration / battle HUD hides and world input waits until Close Modal Screen.
Set Dialog Auto Advance (SetDialogAutoAdvance)function, staticRPG Saga|DialogWorldContextObject: UObject*
bEnabled: bool
Turns dialog auto-advance on or off (stored in the player's options).
Set Dialog Text Speed (SetDialogTextSpeed)function, staticRPG Saga|DialogWorldContextObject: UObject*
Step: int32
Sets the text speed step (index into the Dialog settings' steps; stored in the player's options).
Set Gamepad Label Style (SetGamepadLabelStyle)function, staticRPG Saga|InputStyle: ERSEGamepadLabelStyleThe player's gamepad label set (Auto = automatic). Stored in the player's options.
Set Player Option Bool (SetPlayerOptionBool)function, staticRPG Saga|OptionsKey: FString
bValue: bool
Stores a bool player option (GameUserSettings.ini).
Set Player Option Float (SetPlayerOptionFloat)function, staticRPG Saga|OptionsKey: FString
Value: float
Stores a float player option (GameUserSettings.ini).
Set Player Option Int (SetPlayerOptionInt)function, staticRPG Saga|OptionsKey: FString
Value: int32
Stores an integer player option (GameUserSettings.ini).
Set Player Option String (SetPlayerOptionString)function, staticRPG Saga|OptionsKey: FString
Value: FString
Stores a text player option (GameUserSettings.ini).
Set Quest Tracker Hidden (SetQuestTrackerHidden)function, staticRPG Saga|QuestsWorldContextObject: UObject*
Reason: FName
bHidden: bool
Hides the quest tracker while any reason is set (a custom screen, a cutscene). Battles hide it on their own.
Set Visual Style (SetVisualStyle)function, staticRPG Saga|Visual StyleWorldContextObject: UObject*
Style: URSEVisualStyle*
bSave: bool = true
The player's style (none = the default); applied at once, saved per user when bSave.
Show Notification (ShowNotification)function, staticRPG Saga|QuestsWorldContextObject: UObject*
Header: FText
Body: FText
Color: FLinearColor
Shows a notification through the quest HUD (header, body, accent color).
Show Tutorial Screen (ShowTutorialScreen)function, staticRPG Saga|TutorialsWorldContextObject: UObject*
Tutorial: URSETutorialData*
Shows a tutorial screen again without changing its seen state (a Help page).

URSEBlueprintLibrary_World

Module RSE, display name RSEBlueprint Library World. The world from Blueprint (D-052): travel between maps and fast travel, areas, interaction, puzzles, story scenes, shops and the card table.

NodeKindCategoryParametersReturnsDescription
Add Encounter Rate Effect (AddEncounterRateEffect)function, staticRPG Saga|EncountersWorldContextObject: UObject*
SourceId: FName
Multiplier: float
Steps: int32
Seconds: float
boolChanges the random encounter rate for a while (Repel / Lure from a Blueprint): Multiplier 0 = no random battles, 2 = twice as many; Steps and Seconds (0 = not limited) count down while exploring. SourceId: the same id refreshes or ends it.
Discover Place (DiscoverPlace)function, staticRPG Saga|TravelWorldContextObject: UObject*
Place: URSETravelDestinationData*
Discovers a fast-travel place (it appears on the world map).
Fast Travel To (FastTravelTo)function, staticRPG Saga|TravelWorldContextObject: UObject*
Destination: URSETravelDestinationData*
boolFast travel to a world map place (it must be available).
Get Current Area (GetCurrentArea)pure, staticRPG Saga|TravelWorldContextObject: UObject*URSEAreaData*The area the player is in now (area volume, else the map's area), or none.
Get Encounter Rate Multiplier (GetEncounterRateMultiplier)pure, staticRPG Saga|EncountersWorldContextObject: UObject*floatThe random battle chance multiplier now: rate effects x equipment traits x the player's frequency option.
Get Encounter Subsystem (GetEncounterSubsystem)pure, staticRPG Saga|EncountersWorldContextObject: UObject*URSEEncounterSubsystem*The world's random encounter system: rate, rate effects, generated groups, visible enemy events.
Get Fast Travel Block (GetFastTravelBlock)pure, staticRPG Saga|TravelWorldContextObject: UObject*ERSEFastTravelBlockWhether fast travel works now, and why not (battle, dialog, story lock...).
Get Focused Interactable (GetFocusedInteractable)pure, staticRPG Saga|InteractionWorldContextObject: UObject*ARSEInteractableActor*The interactable the prompt shows now, or none.
Get Travel Subsystem (GetTravelSubsystem)pure, staticRPG Saga|TravelWorldContextObject: UObject*URSETravelSubsystem*Zone navigation and fast travel (TravelTo, the world map, the area catalog).
Interact with Focused (InteractWithFocused)function, staticRPG Saga|InteractionWorldContextObject: UObject*boolInteracts with the focused interactable, like pressing Interact.
Is Area Discovered (IsAreaDiscovered)pure, staticRPG Saga|TravelWorldContextObject: UObject*
Area: URSEAreaData*
boolThe player has been to an area.
Is Code Lock Solved (IsCodeLockSolved)pure, staticRPG Saga|PuzzlesWorldContextObject: UObject*
Lock: URSECodeLockData*
boolThe code lock was solved.
Is Exploration Active (IsExplorationActive)pure, staticRPG Saga|ExplorationWorldContextObject: UObject*boolThe explorer has control (no battle, menu, dialog).
Is Place Discovered (IsPlaceDiscovered)pure, staticRPG Saga|TravelWorldContextObject: UObject*
Place: URSETravelDestinationData*
boolA fast-travel place was discovered.
Is Scene Playing (IsScenePlaying)pure, staticRPG Saga|ScenesWorldContextObject: UObject*boolA story scene is on screen.
Is Traveling (IsTraveling)pure, staticRPG Saga|TravelWorldContextObject: UObject*boolA travel is queued, fading out or loading.
Open Card Album (OpenCardAlbum)function, staticRPG Saga|CardsWorldContextObject: UObject*boolOpens the card album / deck editor.
Open Code Lock (OpenCodeLock)function, staticRPG Saga|PuzzlesWorldContextObject: UObject*
Lock: URSECodeLockData*
Opens a code lock screen (unless it is solved), like the Open Code Lock effect.
Open Shop (OpenShop)function, staticRPG Saga|EconomyWorldContextObject: UObject*
Shop: URSEShopData*
Opens a shop screen, like the Open Shop effect.
Open World Map (OpenWorldMap)function, staticRPG Saga|TravelWorldContextObject: UObject*
Reason: FText (out)
boolOpens the world map (after a running dialog). Returns false when fast travel is blocked; Reason says why.
Play Narration (PlayNarration)function, staticRPG Saga|PuzzlesWorldContextObject: UObject*
Lines: TArray<FText> (ref)
Effects: TArray<URSEWorldEffect*> (ref)
boolNarrator lines in the dialog box (examine texts, hints), then optional effects.
Play Rest Fade (PlayRestFade)function, staticRPG Saga|EconomyWorldContextObject: UObject*Plays the inn's fade to black and back (the party is not changed; see Rest At Inn).
Play Scene (PlayScene)function, staticRPG Saga|ScenesWorldContextObject: UObject*
Scene: URSESceneData*
bReplay: bool = false
boolPlays a story scene (queued behind a running one). bReplay: no end effects (theater).
Skip Scene (SkipScene)function, staticRPG Saga|ScenesWorldContextObject: UObject*Skips the running scene now (its end effects still run).
Start Card Match (StartCardMatch)function, staticRPG Saga|CardsWorldContextObject: UObject*
Opponent: URSECardOpponentData*
boolStarts a card match now (no dialog wait; a notice explains a refusal).
Travel to Map (TravelToMap)function, staticRPG Saga|TravelWorldContextObject: UObject*
Map: TSoftObjectPtr<UWorld>
ArrivalPoint: FName
Area: TSoftObjectPtr<URSEAreaData>
boolTravels to a map: fade out with the destination's name, open the map, place the player at the arrival point (ArrivalPoint None = the point for the map left, else the default one). Waits for a running dialog.

URSECameraFocusInterface

Module RSE. RSECamera Focus Interface

NodeKindCategoryParametersReturnsDescription
Get Camera Focus (GetCameraFocus)overrideRPG Saga|CameraOutFeet: TArray<FVector> (out)
OutIgnoredActors: TArray<AActor*> (out)
Feet of the characters to keep visible (world, most important first) and the actors never hidden.

URSECameraHandOffLibrary

Module RSE. D-127: hand-overs of the player's view without a visible jump.

NodeKindCategoryParametersReturnsDescription
Freeze View (FreezeView)function, staticRPG Saga|CameraController: APlayerController*
LifeSeconds: float = 2.000000
ACameraActor*Spawns a transient camera exactly at the controller's current view (location, rotation, field of view, post process) and makes it the view target at once: possessing another pawn no longer moves the picture, and the next Set View Target with Blend blends from this frozen view. The camera destroys itself after Life Seconds (game time; keep it longer than the blend); 0 = the caller destroys it. Returns the camera, or null without a camera manager.

URSECameraOcclusionSubsystem

Module RSE. The camera occlusion of the RPG cameras (D-113, D-116, Camera Occlusion settings).

NodeKindCategoryParametersReturnsDescription
Get Circle Strength (GetCircleStrength)pureRPG Saga|CameraSlot: int32floatD-116: how far the see-through circle is open (0..1) around the focus character Slot (0 = the leader / active unit).
Get Fading Count (GetFadingCount)pureRPG Saga|Cameraint32Objects in the way at the last check that fade instead of hiding (opted-in materials).
Get Ghost Count (GetGhostCount)pureRPG Saga|Cameraint32D-116: objects (or instances) wearing the ghost material now, opening or closing.
Get Hidden Count (GetHiddenCount)pureRPG Saga|Cameraint32Objects hidden now (the fallback, the forced parts and the single instances).
Get Hidden Instance Count (GetHiddenInstanceCount)pureRPG Saga|Cameraint32Single instances of instanced meshes hidden now (D-112: trees of an instanced forest).
Restore All (RestoreAll)functionRPG Saga|CameraShows everything the occlusion hid (a cut, the end of a battle). The next check hides what is still in the way.
Update Now (UpdateNow)functionRPG Saga|CameraRuns a check now (tests, scripts; the timer does it on its own).

URSECardAlbumViewModel

Module RSE. Card album and deck editor (D-028): owned cards by rarity, the deck (max size by the card rules), add / remove, auto-build and the validation message.

NodeKindCategoryParametersReturnsDescription
Activate (Activate)functionRPG Saga|UI|AlbumAdds the selected collection card / removes the selected deck card.
Activate Row (ActivateRow)functionRPG Saga|UI|AlbumInColumn: int32
Index: int32
Selects a row and activates it (a click).
Auto Build (AutoBuild)functionRPG Saga|UI|AlbumAuto Build
Leave (Leave)functionRPG Saga|UI|AlbumCloses the album (the last valid deck stays).
Move Selection (MoveSelection)functionRPG Saga|UI|AlbumDelta: int32Move Selection
Select (Select)functionRPG Saga|UI|AlbumInColumn: int32
Index: int32
Select
Set Column (SetColumn)functionRPG Saga|UI|AlbumInColumn: int32Set Column

URSECardChallengerComponent

Module RSE. Makes any actor (an NPC, a sign, a table) a card opponent (D-028).

NodeKindCategoryParametersReturnsDescription
Can Challenge (CanChallenge)pureRPG Saga|CardsERSECardChallengeResultWhether the player can challenge now (conditions, rematch rule, deck).
Challenge (Challenge)functionRPG Saga|CardsAsks for a match (the card presentation checks CanChallenge again and explains a refusal).

URSECardPresentationSubsystem

Module RSE. Card game director in the world (D-028).

NodeKindCategoryParametersReturnsDescription
Is Card Screen Open (IsBusy)pureRPG Saga|CardsboolA card screen (table or album) is open.
On Challenge Refused (BP_OnChallengeRefused)eventRPG Saga|CardsOpponent: URSECardOpponentData*
Reason: ERSECardChallengeResult
A challenge was refused (conditions, rematch rule, deck; Blueprint).
On Match Presented (BP_OnMatchPresented)eventRPG Saga|CardsResult: FRSECardMatchResult (ref)The table closed after a match (Blueprint).
Open Album (OpenAlbum)functionRPG Saga|CardsboolOpens the album / deck editor. Returns false when busy.
Start Challenge (StartChallenge)functionRPG Saga|CardsOpponent: URSECardOpponentData*boolStarts a match against Opponent now. Returns false when refused (a notice explains why).

URSECardSubsystem

Module RSECore. Owns the player's card collection for the session and runs matches (D-028).

NodeKindCategoryParametersReturnsDescription
Auto Build Deck (AutoBuildDeck)functionRPG Saga|CardsReplaces the deck with the strongest one from the owned cards (RSECardDeck::BuildBest).
Can Challenge (CanChallenge)pureRPG Saga|CardsOpponent: URSECardOpponentData*ERSECardChallengeResultWhether the player can challenge Opponent now (conditions, rematch rule, deck).
Get Card Collection (GetCollectionBP)pureRPG Saga|CardsFRSECardCollectionOwned cards and counts, the deck and the record against each opponent (read-only).
Get Card Count (GetCardCount)pureRPG Saga|CardsCard: URSECardData*int32Copies of a card the player owns.
Get Deck (GetDeckBP)pureRPG Saga|CardsTArray<URSECardData*>The player's deck, in order.
Get Wins (GetWins)pureRPG Saga|CardsOpponent: URSECardOpponentData*int32Matches won against an opponent.
Give Card (GiveCard)functionRPG Saga|CardsCard: URSECardData*
Count: int32 = 1
int32Adds copies (capped by MaxCopiesPerCard). Returns copies added.
On Card Collection Changed (OnCardCollectionChanged)eventRPG Saga|CardsOwned cards or the deck changed.
On Card Match Finished (OnCardMatchFinished)eventRPG Saga|CardsResult: FRSECardMatchResult (ref)A match was played and applied (the table replays it).
On Card Match Requested (OnCardMatchRequested)eventRPG Saga|CardsOpponent: TSoftObjectPtr<URSECardOpponentData> (ref)A Start Card Match effect or Request Match asked for a match.
Play Match (Instant) (PlayMatchBP)functionRPG Saga|CardsOpponent: URSECardOpponentData*
Seed: int32
OutResult: FRSECardMatchResult (out)
boolPlays and applies a whole match at once, without the table screen (record, stake, rewards). Seed 0 = the next seed of the game's Cards stream (world seed).
Request Match (RequestMatchBP)functionRPG Saga|CardsOpponent: URSECardOpponentData*Asks the presentation to start a match (checks come there), like the Start Card Match effect.
Set Deck (SetDeck)functionRPG Saga|CardsDeck: TArray<URSECardData*> (ref)ERSEDeckValidationReplaces the deck if it is valid.
Simulate Match (SimulateMatchBP)pureRPG Saga|CardsOpponent: URSECardOpponentData*
Seed: int32
OutResult: FRSECardMatchResult (out)
boolThe same match without changing anything (previews).
Take Card (TakeCard)functionRPG Saga|CardsCard: URSECardData*
Count: int32 = 1
int32Removes up to Count copies; the deck loses copies no longer owned. Returns copies removed.
Validate Deck (ValidateDeck)pureRPG Saga|CardsDeck: TArray<URSECardData*> (ref)ERSEDeckValidationWhether a deck is valid (size, owned copies), or why not.

URSECardTableViewModel

Module RSE. The War card table (D-028): replays a finished match (RSECardTimeline) step by step, then shows the result.

NodeKindCategoryParametersReturnsDescription
Continue (Continue)functionRPG Saga|UI|CardsLeaves the result (only once it is shown).
Cycle Speed (CycleSpeed)functionRPG Saga|UI|CardsNext replay speed (Cards UI -> SpeedOptions).
Get Match Card (GetMatchCard)pureRPG Saga|UI|CardsMatchCard: int32URSECardData*The card of a match card index (steps refer to cards by index).
On Step (OnStep)eventRPG Saga|UI|CardsStep: FRSECardAnimStep (ref)Every replay step as it starts (animate it).
Skip to Result (SkipToResult)functionRPG Saga|UI|CardsJumps to the end of the replay and shows the result.

URSECharacterAnimInstance

Module RSE. Animation logic of every character (D-046, CLAUDE.md 3.5), in C++ so Anim Blueprints stay thin: - locomotion values for the blend space (Speed, Direction, bIsMoving), measured from the movement component or, for actors moved directly (grid units, battle cue moves), from their motion; plus the inputs...

NodeKindCategoryParametersReturnsDescription
Get Battle State (GetBattleState)pureRPG Saga|AnimationERSEAnimBattleStateThe battle pose state the animation shows (idle, ready, hit, KO...).
Get Last Hit Direction (GetLastHitDirection)pureRPG Saga|AnimationERSEHitDirectionSide the last hit came from (Front before any hit).
Get Stance Overlay Alpha (GetStanceOverlayAlpha)pureRPG Saga|AnimationfloatD-185 addendum 2: the weight of the upper body stance now (0..1).
Get Stance Overlay Sequence (GetStanceOverlaySequence)pureRPG Saga|AnimationUAnimSequenceBase*D-185 addendum 2: the stance clip playing over the upper body (null when none).
Play Approach (PlayApproach)functionRPG Saga|AnimationfloatThe anim set's dash toward a target (battle cue Move, To Target). Returns seconds (0 = none: locomotion shows the move).
Play Reaction (PlayReaction)functionRPG Saga|AnimationReaction: ERSEAnimReactionfloatPlays a one-shot reaction over the current state (not while Down), as if from the front. Returns seconds it lasts (0 = none).
Play Reaction From (PlayReactionFrom)functionRPG Saga|AnimationReaction: ERSEAnimReaction
FromLocation: FVector (ref)
bHeavy: bool = false
floatPlays a one-shot reaction to a hit coming from a world location: the anim set's animation for that side (and HitHeavy for a heavy hit from the front). A knock-out soon after falls the same way. Returns seconds (0 = none).
Play Weapon Recoil (PlayWeaponRecoil)functionRPG Saga|AnimationHoldType: ERSEWeaponHoldType = Auto
Scale: float = 1.000000
floatD-185 addendum 2: kicks the procedural recoil (the spine and the weapon arm pitch, then recover): guns without a fire clip. The held weapon's kick (its hold profile, else the Weapon Hold settings' Recoil Defaults); HoldType picks the settings' kick when nothing is held. Needs the recoil nodes of the Anim Blueprint (Add Weapon Layers). Returns seconds it lasts (0 = off).
Set Battle State (SetBattleState)functionRPG Saga|AnimationNewState: ERSEAnimBattleStateEnters a battle state: its animation loops (Down and a non-looping Victory hold their last pose).
Set Variant Seed (SetVariantSeed)functionRPG Saga|AnimationSeed: int32Seed of the random animation variants (RSECharacterAnim::MakeSeed: battle seed + unit id). Resets the play counts, so the same battle events pick the same variants.

URSEClockHUDSubsystem

Module RSE. Shows the HUD clock while exploring in levels that have a Time of Day actor (D-101).

NodeKindCategoryParametersReturnsDescription
Set Clock Hidden (SetClockHidden)functionRPG Saga|TimebHidden: boolHides the clock (a cinematic, a screenshot) until shown again.

URSECodeLockViewModel

Module RSE. A code lock (D-039): digit, symbol or clock-hand wheels.

NodeKindCategoryParametersReturnsDescription
Leave (Leave)functionRPG Saga|UI|CodeLockLeave
Select Wheel (SelectWheel)functionRPG Saga|UI|CodeLockWheel: int32Select Wheel
Step Selected Wheel (StepSelectedWheel)functionRPG Saga|UI|CodeLockDirection: int32Moves the wheel selection (-1 left, +1 right, wrapping).
Submit (Submit)functionRPG Saga|UI|CodeLockEnters the code (D-138: the Submit Code command, checked on the authority): opens (and closes the screen), shows the wrong text, or locks out, when the outcome arrives.
Turn Wheel (TurnWheel)functionRPG Saga|UI|CodeLockDelta: int32Turns the selected wheel by Delta positions.
Turn Wheel At (TurnWheelAt)functionRPG Saga|UI|CodeLockWheel: int32
Delta: int32
Selects Wheel and turns it (the arrows above / below each wheel).

URSECombatRoleLibrary

Module RSE. Combat roles of placed objects (D-093): the role of a component, an actor or an asset, the cover information of a hit (for line of sight, cover and movement queries such as Free Tactics' cover query), and whether a place is inside a Combat Area.

NodeKindCategoryParametersReturnsDescription
Can Place At (CanPlaceAt)pure, staticRPG Saga|Combat RolesWorldContext: UObject*
Asset: UObject*
Location: FVector
boolWhether placement tools may put Asset (a mesh, Blueprint or class) at Location: false when its role keeps it out of Combat Areas and Location is inside one.
Can Place in Combat Area (CanPlaceInCombatArea)pure, staticRPG Saga|Combat RolesAsset: UObject*boolWhether Asset (a mesh, Blueprint or class) may be placed inside Combat Areas (false when its role keeps it out).
Get Actor Role (GetActorRole)pure, staticRPG Saga|Combat RolesActor: AActor*FRSECombatRoleResolutionThe role of a placed actor (its Combat Role component or tag, else its root mesh's or class's role).
Get Asset Role (GetAssetRole)pure, staticRPG Saga|Combat RolesAsset: UObject*FRSECombatRoleResolutionThe role stored for an asset: a static mesh, a Blueprint or an actor class (parents' roles are inherited).
Get Component Role (GetComponentRole)pure, staticRPG Saga|Combat RolesComponent: UPrimitiveComponent*FRSECombatRoleResolutionThe role of a placed component (all instances of an instanced mesh share it).
Get Cover Info (GetCoverInfo)pure, staticRPG Saga|Combat RolesComponent: UPrimitiveComponent*
InstanceIndex: int32 = -1
FRSECombatRoleCoverCover and blocking information of a placed component (a line trace's Hit Component and Item): the role's flags and the blocking volume in world space (the mesh's simple collision bounds, per instance for instanced meshes).
Is in Combat Area (IsInCombatArea)pure, staticRPG Saga|Combat RolesWorldContext: UObject*
Location: FVector
boolWhether a world position lies inside an enabled Combat Area of the level.

URSECommandHandler

Module RSECore. Validates and applies one command type (D-133).

NodeKindCategoryParametersReturnsDescription
Apply (Apply)overrideRPG Saga|CommandsContext: FRSECommandContext (ref)
Command: FInstancedStruct (ref)
Changes the state (only after Validate passed). Fire the system's own events as usual.
Get Command Type (GetCommandType)overrideRPG Saga|CommandsUScriptStruct*The command struct this handler applies (derived from RSE Command). Default: Command Type.
Validate (Validate)overrideRPG Saga|CommandsContext: FRSECommandContext (ref)
Command: FInstancedStruct (ref)
OutReason: FText (out)
boolWhether the command may run now (the sender, the state, the arguments). Must not change state. Return false with a Reason the player can read. Default: true.

URSECommandSubsystem

Module RSECore. The command bus (D-124 §3.3, D-133): the one path by which player actions change game state, in every mode.

NodeKindCategoryParametersReturnsDescription
Can Submit (CanSubmit)pureRPG Saga|CommandsCommand: FInstancedStruct (ref)FRSECommandResultWhether a command would be accepted now (handler found, permission, Validate), without applying it. On a guest: local check only.
Get Current Instigator (GetCurrentInstigator)pureRPG Saga|CommandsFRSEPlayerIdSender of the command being applied right now, else this machine's player.
Get Permission (GetPermission)pureRPG Saga|CommandsCommandType: UScriptStruct*ERSECommandPermissionWho may send CommandType now: the project's permission rule, else its handler's permission (AnyPlayer without a handler).
Has Handler (HasHandler)pureRPG Saga|CommandsCommandType: UScriptStruct*boolA handler is registered for CommandType or one of its base structs.
Is Allowed For (IsAllowedFor)pureRPG Saga|CommandsCommandType: UScriptStruct*
Player: FRSEPlayerId
boolWhether Player may send CommandType by permission alone (no state check): the UI greys out what a guest may not do. The game itself (None) and the host always may.
Is Applying Command (IsApplyingCommand)pureRPG Saga|CommandsboolA command is being applied right now (handlers, effects).
On Command Result (OnCommandResult)eventRPG Saga|CommandsResult: FRSECommandResult (ref)A command sent from this machine or applied on it has a result (Applied, Rejected...).
Register Handler Class (RegisterHandlerClass)functionRPG Saga|CommandsHandlerClass: TSubclassOf<URSECommandHandler>URSECommandHandler*Creates a handler of HandlerClass and registers it. Returns the handler, or null.
Register Handler Object (RegisterHandlerObject)functionRPG Saga|CommandsHandler: URSECommandHandler*Adds a handler object for its command type; one already registered for that type is replaced (with a warning).
Set Command Outcome (SetCommandOutcome)pureRPG Saga|CommandsOutcome: FInstancedStruct (ref)Attaches what the command being validated or applied did, in its system's terms (any USTRUCT): it is returned in the command's result (FRSECommandResult::Outcome) and sent back to a guest. Call it from a handler's Validate or Apply; the last call wins. Outside a handler it does nothing.
Submit Command (Submit)functionRPG Saga|CommandsCommand: FInstancedStruct (ref)FRSECommandResultSends a command as this machine's player. Command: any struct derived from RSE Command (Make Instanced Struct).
Submit Command As (SubmitAs)functionRPG Saga|CommandsCommand: FInstancedStruct (ref)
Instigator: FRSEPlayerId
FRSECommandResultSends a command for another player or for the game itself (FRSEPlayerId::None): AI, scripted sequences, tools, tests. Only where this machine has authority; a guest gets Not Allowed.
Unregister Handler (UnregisterHandler)functionRPG Saga|CommandsCommandType: UScriptStruct*Removes the handler of CommandType (exactly that type).

URSECommonUISubsystem

Module RSECommonUI. One local player's CommonUI host layer (D-176, docs/product/common-ui.md).

NodeKindCategoryParametersReturnsDescription
Find Screen Host (FindScreenHost)pureRPG Saga|UI|Common UIScreen: URSEScreenWidget*URSECommonScreenHost*The host of Screen while it is on a layer, else null.
Get Layer Stack (GetLayerStack)functionRPG Saga|UI|Common UILayer: ERSECommonUILayerUCommonActivatableWidgetContainerBase*The stack of Layer (made with the layout when needed). Null without a local player controller or Slate.
Get Layout (GetLayout)pureRPG Saga|UI|Common UIURSECommonUILayout*The layout made for this player (null when the project registered its own stacks or none was needed yet).
Get RSE Common UI (GetFor)pure, staticRPG Saga|UI|Common UIPlayer: UObject*URSECommonUISubsystem*The CommonUI host layer of the local player behind Player (a controller, pawn, widget or local player), or null.
Pop Screen (PopScreen)functionRPG Saga|UI|Common UIScreen: URSEScreenWidget*Pops Screen's host from its stack (the screen itself stays alive; its owner removes it).
Push Screen (PushScreen)functionRPG Saga|UI|Common UIScreen: URSEScreenWidget*
Layer: ERSECommonUILayer
URSECommonScreenHost*Pushes an RPG Saga screen onto Layer in a screen host. Returns the host (null when the layer has no stack).
Push Widget to Layer (PushWidgetToLayer)functionRPG Saga|UI|Common UILayer: ERSECommonUILayer
WidgetClass: TSubclassOf<UCommonActivatableWidget>
UCommonActivatableWidget*Pushes one of the project's activatable widgets onto Layer (above our screens there).
Register Layer Stack (RegisterLayerStack)functionRPG Saga|UI|Common UILayer: ERSECommonUILayer
Stack: UCommonActivatableWidgetContainerBase*
Uses Stack for Layer (a stack of the project's own primary layout). While any stack is registered no layout is made; layers without a stack then fall back to the nearest registered one below (else above).

URSECompanionOrderPolicy

Module RSECore. Who may order which companion in co-op (D-142).

NodeKindCategoryParametersReturnsDescription
Can Order (CanOrder)overrideRPG Saga|Co-opIssuer: FRSEPlayerId
Member: FPrimaryAssetId
MemberController: FRSEPlayerId
bMultiplayer: bool
boolWhether Issuer may order Member (invalid = "the best member", chosen later among the free ones), which MemberController drives now (invalid = the companion AI). bMultiplayer: several players share the world.

URSECompassView

Module RSE. The compass bar (D-092): cardinal points and ticks turning with the camera, markers at their bearing with the distance in meters and an up / down arrow, faded by distance.

NodeKindCategoryParametersReturnsDescription
Show View Model (ShowViewModel)functionRPG Saga|MapViewModel: URSECompassViewModel*Shows a compass view-model's places.

URSECondition_Custom

Module RSECore, display name Custom (Blueprint). A condition written in Blueprint: create a Blueprint class from it, override Is Condition Met and read the game through the "Context" nodes (RPG Saga\|Narrative\|Context) or any other node.

NodeKindCategoryParametersReturnsDescription
Is Condition Met (IsConditionMet)overrideRPG Saga|ConditionsContext: FRSEConditionContext (ref)boolWhether the condition holds now.

URSECoopEncounterPolicy

Module RSECore. Turns an encounter request into the battle to fight now (D-142).

NodeKindCategoryParametersReturnsDescription
Resolve (Resolve)overrideRPG Saga|Co-opEncounter: URSEEncounterData*
SessionPlayers: int32
FRSECoopEncounterResolutionThe battle Encounter becomes with SessionPlayers players in the session (0 or 1 = single player).

URSECoopNoticeSubsystem

Module RSE. One path for the co-op notices (D-142, docs/design/networking.md §9): any system calls Notify (one player) or NotifyAll; the presentation router delivers it to the player's machine (RSENet for a remote one), where it shows through the HUD's notification (the quest HUD's notice) and On Notice (for a...

NodeKindCategoryParametersReturnsDescription
Notify (Notify)functionRPG Saga|Co-opPlayer: FRSEPlayerId
Title: FText (ref)
Detail: FText (ref)
Kind: ERSECoopNoticeKind = Info
boolShows a notice to Player (their machine). Returns whether it was shown or sent.
Notify All (NotifyAll)functionRPG Saga|Co-opTitle: FText (ref)
Detail: FText (ref)
Kind: ERSECoopNoticeKind = Info
int32Shows a notice to every player (the authority's players; elsewhere the local ones). Returns players reached.
On Notice (OnNotice)eventRPG Saga|Co-opPlayer: APlayerController*
Notice: FRSEPresentation_Notice (ref)
Every notice shown on this machine (after the repeat filter).

URSECoverProvider

Module RSECore, display name Cover Provider. The pluggable answer to "what cover does this blocker give?" for Free Tactics line of sight and cover (D-091).

NodeKindCategoryParametersReturnsDescription
Get Blocker Cover (GetBlockerCover)overrideRPG Saga|Free TacticsBlocker: FRSENavBlocker (ref)ERSECoverLevelCover the blocker gives. Full blocks sight and projectiles; Partial protects a target standing close behind it; None lets everything through (never return Auto).

URSEDetectionMeterComponent

Module RSE. The detection meter over a visible enemy (D-097): a screen-space bar that fills while the enemy sees or hears the party and turns into "!" when it notices it.

NodeKindCategoryParametersReturnsDescription
Get Shown Value (GetShownValue)pureRPG Saga|StealthfloatThe value shown now.
Set Detection (SetDetection)functionRPG Saga|StealthValue: float
bAlerted: bool
Shows Value (0..1; hidden at or below Stealth -> Show Meter Above unless bAlerted).
Set Prompt (SetPrompt)functionRPG Saga|StealthPrompt: FText (ref)D-151: a prompt under the meter (shown even while the meter is empty); empty text = none.

URSEDialogControlPolicy

Module RSECore. Who controls a dialog in co-op (D-094, D-138): "the one who started it speaks, the others watch; story choices by the host, the speaker or a vote".

NodeKindCategoryParametersReturnsDescription
Can Control Flow (CanControlFlow)overrideRPG Saga|Dialog|Co-opPlayer: FRSEPlayerId
Speaker: FRSEPlayerId
boolWhether Player may advance lines, skip and finish waits of Speaker's dialog. Default: the speaker, and the host by setting.
Get Choice Decider (GetChoiceDecider)overrideRPG Saga|Dialog|Co-opDialog: URSEDialogData*
NodeId: FName
NodeDecider: ERSEDialogChoiceDecider
ERSEDialogChoiceDeciderWho picks the option of a choice. NodeDecider is the choice node's own setting (Default = the rules decide). Default: the node's setting, else Story Choice Decider for dialog assets and System Choice Decider for prompts made at run time (puzzles, travel questions).
Get Voters (GetVoters)overrideRPG Saga|Dialog|Co-opWorldContext: UObject*
OutVoters: TArray<FRSEPlayerId> (out)
Who votes on a vote choice. Default: the session's players (URSEAuthoritySubsystem::GetSessionPlayers).
Resolve Vote (ResolveVote)overrideRPG Saga|Dialog|Co-opVotes: TArray<FRSEDialogVote> (ref)
Options: TArray<FName> (ref)
Speaker: FRSEPlayerId
FNameThe winning option of a vote. Options = the choice's available options in display order. Default: the majority; a tie goes to the speaker's vote, then the host's, then the first of the tied options. None = no votes (nothing is picked).

URSEDialogLayout

Module RSE. How the dialog screen is arranged (P61).

NodeKindCategoryParametersReturnsDescription
Get Box Width Fraction (GetBoxWidthFraction)pure, staticRPG Saga|UI LayoutbCinematic: boolfloatThe width share of the classic box (Dialog UI -> Box Width Fraction, or the cinematic one).
Get Column Width (GetColumnWidth)overrideRPG Saga|UI LayoutfloatThe column's fixed width the screen builds (0 = none: the layout's anchors give the width).
Update Anchor (UpdateAnchor)overrideRPG Saga|UI LayoutContext: URSEScreenLayoutContext*
ScreenPosition: FVector2D
bOnScreen: bool
World-anchored layouts: moves the column to the speaker. ScreenPosition is over the speaker's head (layout units); bOnScreen false = no speaker actor or off screen (show the line somewhere readable). Called every frame while a line shows, so it must only move slots (no new widgets).

URSEDialogSubsystem

Module RSECore. Owns the dialogs of the game session (dialog-proposal.md 5.2): - one blocking dialog at a time (IsDialogActive: read by input, saving and random encounters) plus barks; - starts dialogs requested by the StartDialog effect (URSENarrativeSubsystem::GetEvents().OnDialogRequested); - defers requests mad...

NodeKindCategoryParametersReturnsDescription
Can Player Choose (CanPlayerChoose)pureRPG Saga|DialogPlayer: FRSEPlayerIdboolWhether Player may answer the active dialog's choice now (always true for a vote's voters).
Can Player Control Flow (CanPlayerControlFlow)pureRPG Saga|DialogPlayer: FRSEPlayerIdboolWhether Player may advance, skip or finish waits of the active dialog.
Get Active Choice Decider (GetActiveChoiceDecider)pureRPG Saga|DialogERSEDialogChoiceDeciderWho picks the option of the choice on screen (Speaker, Host or Vote; Default resolved by the policy).
Get Active Run Id (GetActiveRunId)pureRPG Saga|Dialogint32The running blocking dialog's run number (0 = none). Commands name it, so they never touch another dialog.
Get Active Speaker (GetActiveSpeaker)pureRPG Saga|DialogFRSEPlayerIdThe player who started the running blocking dialog: they speak, the others watch.
Get Deferred Request Count (GetDeferredRequestCount)pureRPG Saga|Dialogint32Number of dialog requests (battles, scenes, screens) waiting for the running dialog to end.
Get Vote Seconds Left (GetVoteSecondsLeft)pureRPG Saga|DialogfloatSeconds the running vote has left (0 = no vote, or no timeout).
Get Votes (GetVotes)pureRPG Saga|DialogTArray<FRSEDialogVote>Votes cast on the choice on screen (vote choices only).
Is Dialog Active (IsDialogActive)pureRPG Saga|DialogboolA blocking dialog is running.
Is Mirroring Dialog (IsMirroringDialog)pureRPG Saga|DialogboolThe active dialog is the authority's, shown here (a guest).
On Bark Started (BP_OnBarkStarted)eventRPG Saga|DialogDialog: URSEDialogData*A bark (ambient line over an NPC) started.
On Dialog Ended (BP_OnDialogEnded)eventRPG Saga|DialogOutcome: FGameplayTag
bCompleted: bool
A blocking dialog ended: its outcome tag and whether it reached its end (false when aborted).
On Dialog Started (BP_OnDialogStarted)eventRPG Saga|DialogDialog: URSEDialogData*A blocking dialog started (Blueprint).
On Dialog Votes Changed (BP_OnVotesChanged)eventRPG Saga|DialogNodeId: FName
Votes: TArray<FRSEDialogVote> (ref)
Set Control Policy (SetControlPolicy)functionRPG Saga|DialogPolicy: URSEDialogControlPolicy*Replaces the policy at run time (a session rule, a mode); null = back to the settings' class.

URSEDialogViewModel

Module RSE. The dialog (dialog-proposal.md 6.2-6.5): blocking dialog box with speaker, portraits, typewriter text, choices, backlog, auto-advance, fast-forward and skip; plus barks and emote balloons.

NodeKindCategoryParametersReturnsDescription
Advance (Advance)functionRPG Saga|UI|DialogLine: reveals the rest, or goes to the next line. Title card: skips it.
Cancel Choice (CancelChoice)functionRPG Saga|UI|DialogPicks the choice's cancel option (when it has one).
Choose Option (ChooseOption)functionRPG Saga|UI|DialogIndex: int32Highlights an option and confirms it (a click).
Confirm Choice (ConfirmChoice)functionRPG Saga|UI|DialogConfirms the highlighted option (locked ones do nothing).
Finish Title Card (FinishTitleCard)functionRPG Saga|UI|DialogFinish Title Card
Get Choices Text (GetChoicesText)pureRPG Saga|UI|DialogFTextThe choices as one text, one per line, the selected one marked (simple dialog screens).
Handle Click (HandleClick)functionRPG Saga|UI|DialogAdvance on a mouse click (Dialog UI -> bClickToAdvance).
Handle Dialog Key (HandleDialogKey)functionRPG Saga|UI|DialogKey: FKey
bPressed: bool
bRepeat: bool
boolEvery dialog key of the Dialog UI settings (advance, up / down, cancel, backlog, auto, fast-forward, skip), as the built-in box reads them. bPressed false = key up (fast-forward release). Returns true when the key is a dialog key.
Move Choice (MoveChoice)functionRPG Saga|UI|DialogDelta: int32Move Choice
On Screen Fx (OnScreenFx)eventRPG Saga|UI|DialogStyle: FRSEDialogScreenFxStyle (ref)
Seconds: float
A cue asked for a screen effect (fade, flash, shake).
Select Choice (SelectChoice)functionRPG Saga|UI|DialogIndex: int32Select Choice
Set Fast Forward (SetFastForward)functionRPG Saga|UI|DialogbHeld: boolFast-forward held (read lines type at once and advance quickly).
Skip Scene (SkipScene)functionRPG Saga|UI|DialogSkips the scene (skippable dialogs; a Level Sequence scene is skipped as a whole).
Toggle Auto Advance (ToggleAutoAdvance)functionRPG Saga|UI|DialogToggle Auto Advance
Toggle Backlog (ToggleBacklog)functionRPG Saga|UI|DialogToggle Backlog

URSEDifficultySubsystem

Module RSECore. Adaptive difficulty controller (CLAUDE.md 2.8, D-007): one per game session, one value per battle mode.

NodeKindCategoryParametersReturnsDescription
Get Difficulty State (GetStateBP)pureRPG Saga|DifficultyFRSEDifficultyStateThe whole adaptive state (per mode: intelligence, recent battles), read-only.
Get Intelligence For Encounter (GetIntelligenceForEncounterBP)pureRPG Saga|DifficultyEncounter: URSEEncounterData*floatEnemy intelligence a battle of Encounter would use now (its mode, its bounds, the override).
Get Mode Intelligence (GetModeIntelligence)pureRPG Saga|DifficultyMode: FGameplayTag (ref)floatCurrent adaptive enemy intelligence (0-1) of a battle mode, before encounter bounds and overrides.
Set Mode Intelligence (SetModeIntelligence)functionRPG Saga|DifficultyMode: FGameplayTag
Intelligence: float
Sets the adaptive enemy intelligence (0-1) of a battle mode, e.g. a chapter that starts harder. The adaptation continues from there (the Difficulty settings' limits still apply to battles). Saved.

URSEDoorComponent

Module RSE, display name RSE Door. Door behavior for any actor (D-165, docs/product/components.md): add it with an RSE Interactable component to your own door actor; Interact opens and closes it (a locked one says Interiors -> Locked Door Text), the prompt follows ("Open" / "Close"), and the swinging part (Swing Component: your leaf...

NodeKindCategoryParametersReturnsDescription
Get Prompt Text (GetPromptText)pureRPG Saga|InteriorsFTextThe prompt now: Open Text / Close Text, else Interiors -> Open / Close Door Text.
Is Locked (IsLocked)pureRPG Saga|InteriorsboolIs Locked
Is Open (IsOpen)pureRPG Saga|InteriorsboolIs Open
On Door Changed (OnDoorChanged)eventRPG Saga|InteriorsDoor: URSEDoorComponent*
bOpen: bool
Raised when the door opens or closes.
Set Locked (SetLocked)functionRPG Saga|InteriorsbInLocked: boolLocks or unlocks it (a locked door does not open).
Set Open (SetOpen)functionRPG Saga|InteriorsbInOpen: bool
bAnimate: bool = true
Opens or closes the door (swinging, or at once).
Use Door (UseDoor)functionRPG Saga|InteriorsWhat Interact does: says the locked line, or opens / closes it.

URSEDoorDetectorLibrary

Module RSE. Door detection for Blueprint and Python (D-158).

NodeKindCategoryParametersReturnsDescription
Find Building Door (FindBuildingDoor)function, staticRPG Saga|BuildingsBuilding: AActor*FRSEDoorFindingFinds the door of a building whose door is modelled into its mesh (sockets, then its geometry).

URSEEffect_Custom

Module RSECore, display name Custom (Blueprint). A custom effect written in Blueprint (D-052): subclass it, override On Apply and use the battle's Blueprint API (resources, attributes, statuses through other effects).

NodeKindCategoryParametersReturnsDescription
On Apply (OnApply)overrideRPG Saga|AbilitiesBattle: URSEBattle*
SourceId: int32
TargetId: int32
TargetTile: FRSEGridCoord
PowerMultiplier: float
Applies the effect. Change the battle through its nodes (Deal Damage, Heal Unit, Change Resource, Apply Status, Shift Turn...) and draw random numbers with Roll Int / Roll Percent so replays and the simulator stay deterministic.
Preview Damage (PreviewDamage)overrideRPG Saga|AbilitiesBattle: URSEBattle*
SourceId: int32
TargetId: int32
PowerMultiplier: float
floatExpected HP damage on the target (negative = healing), without rolling and without changing the battle: the damage forecast and the AI read it. Default 0 (the AI then sees no value in the effect). The source may be hypothetical.

URSEEncounterSubsystem

Module RSE. Random encounters v2 in the world (D-063, docs/design/random-encounters.md): - counts world steps while the explorer walks (rate effect durations, step respawns of visible groups; saved in the World section); - the encounter rate multiplier: party rate effects x equipment traits x the player's frequ...

NodeKindCategoryParametersReturnsDescription
Add Rate Effect (AddRateEffect)functionRPG Saga|EncountersEffect: FRSEEncounterRateEffect (ref)boolAdds a rate effect (the Encounters settings' stacking rules apply). Returns true if the state changed.
Compose Encounter (ComposeEncounter)functionRPG Saga|EncountersPool: URSEEncounterPoolData*
Seed: int32 = 0
URSEEncounterData*A new group from Pool for the current party and progression zone (the pool's zone, else the current area's). Seed 0 = a random one. The encounter is transient and kept alive while it may be fought. Null when the pool has no usable entry.
Get Active Rate Effects (GetActiveRateEffects)pureRPG Saga|EncountersTArray<FRSEEncounterRateEffect>The party's active rate effects (steps and seconds left).
Get Detection Scale (GetDetectionScale)pureRPG Saga|EncountersfloatVisible enemies' detection radius scale from the rate (Encounters settings: Rate Scales Enemy Detection).
Get Encounter Rate Multiplier (GetEncounterRateMultiplier)pureRPG Saga|EncountersfloatMultiplier of the random battle chance now: rate effects x equipment traits x the frequency option x the time and weather rules (Encounter Rate, D-101 / D-104), capped by the Encounters settings' Max Rate Multiplier (0 = none).
Get Frequency Index (GetFrequencyIndex)pureRPG Saga|Encountersint32The player's battle frequency choice (index into GetFrequencyNames).
Get Frequency Names (GetFrequencyNames)pureRPG Saga|EncountersTArray<FText>Names of the player's battle frequency choices (Encounters settings), in menu order.
Get Party Level (GetPartyLevel)pureRPG Saga|Encountersint32Party level used for generated groups (the ATB formation, Progression "Party Level Source").
Get Rate Effects Multiplier (GetRateEffectsMultiplier)pureRPG Saga|EncountersfloatOnly the active rate effects (items, abilities, story effects), without traits and the option.
Get World Steps (GetWorldSteps)pureRPG Saga|Encountersint64World steps walked over the whole game (saved).
Is Contact Allowed (IsContactAllowed)pureRPG Saga|EncountersboolVisible enemies may start a battle now (no battle running, the post-battle grace is over, exploration has control).
On Encounter Contact (BP_OnEncounterContact)eventRPG Saga|EncountersSpawner: ARSEEncounterSpawner*
Encounter: URSEEncounterData*
Initiative: ERSEBattleInitiative
On Encounter Rate Changed (BP_OnRateChanged)eventRPG Saga|EncountersMultiplier: float--- Events ---
On Enemy Alerted (BP_OnEnemyAlerted)eventRPG Saga|EncountersSpawner: ARSEEncounterSpawner*
Enemy: ARSERoamingEnemy*
bAlerted: bool
Remove Rate Effect (RemoveRateEffect)functionRPG Saga|EncountersSourceId: FNameboolEnds the rate effect of SourceId (None = every effect). Returns true if one ended.
Set Frequency Index (SetFrequencyIndex)functionRPG Saga|EncountersIndex: int32Stores the player's battle frequency choice (GameUserSettings.ini, with the other options).
Start Classic Encounter (StartClassicEncounter)functionRPG Saga|EncountersEncounter: URSEEncounterData*
Initiative: ERSEBattleInitiative
Director: ARSEATBBattleDirector* = None
Source: AActor* = None
boolStarts a classic battle (ATB / turn-based) with Encounter on Director (null = the map's classic battle director), with an initiative. Source receives the exploration's encounter-ended callback. Returns true if it started.

URSEEquipmentSlotSet

Module RSECore. A preset of character equipment slots (D-126): the classic JRPG set (weapon, off-hand, head, body, two accessories) or the ARPG set (helmet, body armor, hands, legs, feet, main hand, off-hand, two accessories).

NodeKindCategoryParametersReturnsDescription
Matches Project Settings (MatchesProjectSettings)pureRPG Saga|ItemsboolThe preset is what Project Settings -> Items uses now (same slot ids, types and off-hand).

URSEExplorationCameraArm

Module RSE. The exploration camera's arm (D-113).

NodeKindCategoryParametersReturnsDescription
Add Tilt Input (AddTiltInput)functionRPG Saga|Exploration|CameraLookUpDegrees: floatD-129: tilts the view (degrees; positive = up, toward the horizon), within the tactical camera's tilt limits. The player's Invert Camera Tilt option applies. Ignored inside interiors (the profile frames the view) and with tilting off.
Get Current Distance (GetCurrentDistance)pureRPG Saga|Exploration|CamerafloatThe zoom now (cm from the party) and where it glides.
Get Current Pitch (GetCurrentPitch)pureRPG Saga|Exploration|CamerafloatThe view's angle below the horizon now (degrees; the interior profile's inside a volume).
Get Current Tilt (GetCurrentTilt)pureRPG Saga|Exploration|CamerafloatD-129: the tilt now (it glides toward the target).
Get Target Distance (GetTargetDistance)pureRPG Saga|Exploration|CamerafloatGet Target Distance
Get Target Tilt (GetTargetTilt)pureRPG Saga|Exploration|CamerafloatD-129: the tilt the view aims at (degrees added to the zoom's angle; positive = steeper).
Is Tactical (IsTactical)pureRPG Saga|Exploration|CameraboolIs Tactical
Match View (MatchView)functionRPG Saga|Exploration|CameraYaw: float
Distance: float
Takes over a view (a battle camera handing back): the yaw goes to the controller, the zoom to Distance (clamped), the pan is cleared and the follow lag forgotten, so the view does not glide from where it was before.
Reset Tilt (ResetTilt)functionRPG Saga|Exploration|CamerabInstant: bool = falseD-129: puts the tilt back to the zoom's angle (bInstant cuts instead of gliding).
Set Target Distance (SetTargetDistance)functionRPG Saga|Exploration|CameraDistance: float
bInstant: bool = false
Zooms to Distance (clamped); bInstant cuts.
Set Target Tilt (SetTargetTilt)functionRPG Saga|Exploration|CameraTilt: float
bInstant: bool = false
D-129: sets the tilt (degrees, clamped; positive = steeper); bInstant cuts.

URSEExplorationCameraSubsystem

Module RSE. The exploration camera's shared state (D-113): the style in use (project settings, the level's RSE Exploration Camera actor, or a runtime choice such as an options menu), the tactical camera's values, and the zoom the party leaders share (switching the leader or coming back from a battle keeps the v...

NodeKindCategoryParametersReturnsDescription
Clear Camera Style (ClearCameraStyle)functionRPG Saga|Exploration|CameraBack to the level's or the project's style.
Get Camera Style (GetCameraStyle)pureRPG Saga|Exploration|CameraERSEExplorationCameraStyleThe style the exploration camera uses here: a runtime choice, else the level's, else Project Settings -> Exploration.
Get Tilt (GetTilt)pureRPG Saga|Exploration|CamerafloatD-129: the tilt the party's leaders share (degrees added to the zoom's angle; positive = steeper), clamped.
Get Zoom Distance (GetZoomDistance)pureRPG Saga|Exploration|CamerafloatThe zoom the tactical camera aims at (cm from the party).
Set Camera Style (SetCameraStyle)functionRPG Saga|Exploration|CameraStyle: ERSEExplorationCameraStyleSwitches the exploration camera's style now (an options menu, a story segment); every explorer re-reads it.
Set Zoom Distance (SetZoomDistance)functionRPG Saga|Exploration|CameraDistance: float
bInstant: bool = false
Zooms the tactical camera (cm, clamped to its limits); bInstant cuts instead of gliding.

URSEExplorationSubsystem

Module RSE. Hands control from third-person exploration to a battle and back (D-026).

NodeKindCategoryParametersReturnsDescription
Get Battle Mode For (GetBattleModeFor)pureRPG Saga|Battle|Mode OverrideEncounter: URSEEncounterData*FGameplayTagD-182: the mode Encounter would be fought in now (its own, or the session's Battle Mode Override when the encounter allows it).
Get Current Battle (GetCurrentBattleBP)pureRPG Saga|BattleURSEBattle*The battle of the running encounter, or none.
Get Current Encounter (GetCurrentEncounterBP)pureRPG Saga|BattleURSEEncounterData*The encounter being fought, or none.
Get Encounter Kind (GetEncounterKind)pureRPG Saga|BattleERSEExplorationBattleKindThe system of the running encounter (None outside battle).
Is Exploration Active (IsExplorationActive)pureRPG Saga|ExplorationboolTrue while the explorer has control (no battle, party menu closed).
Is in Encounter (IsInEncounter)pureRPG Saga|BattleboolA battle started from exploration is running (until control is back in exploration).
On Encounter Ended (BP_OnEncounterEnded)eventRPG Saga|BattleSource: AActor*
Kind: ERSEExplorationBattleKind
Outcome: ERSEBattleOutcome
Control is back in exploration after a battle (Blueprint).
On Encounter Started (BP_OnEncounterStarted)eventRPG Saga|BattleSource: AActor*
Kind: ERSEExplorationBattleKind
A battle started from exploration (Blueprint).
Start ATBEncounter (StartATBEncounter)functionRPG Saga|BattleDirector: ARSEATBBattleDirector*
Source: AActor* = None
ReturnPoint: AActor* = None
EncounterOverride: URSEEncounterData* = None
boolStarts a classic encounter (ATB or turn-based) on the director's stage; EncounterOverride replaces the director's encounter for this battle.
Start Encounter (StartEncounter)functionRPG Saga|BattleEncounter: URSEEncounterData*
Source: AActor* = None
ReturnPoint: AActor* = None
boolStarts a battle from an encounter asset (D-052): Tactics encounters on the map's Tactics director that has this encounter; classic ones (ATB, turn-based) on the map's ATB director (one with this encounter first, else any). The Start Battle story effect comes here too. Returns false when no director fits or an encounter is running.
Start Tactics Encounter (StartTacticsEncounter)functionRPG Saga|BattleDirector: ARSETacticsBattleDirector*
Source: AActor* = None
ReturnPoint: AActor* = None
boolStarts a Tactics encounter on the director's zone. ReturnPoint (optional) is where the explorer stands afterwards.

URSEExploreRPGSubsystem

Module RSE. The exploration RPG actions in the world (D-109, docs/design/exploration.md "Explorare RPG"): passive perception of traps by the visible party, "Search here", traps going off on the party and in Free Tactics battles, the lockpick screen, stealing from NPCs, distractions (aim, throw, the enemies come...

NodeKindCategoryParametersReturnsDescription
Begin Aim (BeginAim)functionRPG Saga|Exploration RPGboolStarts aiming (shows the landing marker).
Check Perception (CheckPerception)functionRPG Saga|Exploration RPGint32Runs the passive perception check now (it also runs on a timer). Returns traps spotted.
End Aim (EndAim)functionRPG Saga|Exploration RPGbThrow: boolboolStops aiming; bThrow throws at the aim point.
Get Aim Point (GetAimPoint)pureRPG Saga|Exploration RPGFVectorWhere a throw would land now (valid while aiming).
Get Lockpick (GetLockpick)pureRPG Saga|Exploration RPGURSELockpickViewModel*The open lockpick screen's view model (null when closed).
Get Member Score (GetMemberScore)pureRPG Saga|Exploration RPGMember: URSECharacterData*
Skill: ERSEExploreSkill
floatMember's score in Skill now.
Is Aiming (IsAiming)pureRPG Saga|Exploration RPGboolIs Aiming
Make Noise (MakeNoise)functionRPG Saga|Exploration RPGPoint: FVector
Radius: float
bInvestigateOnly: bool
int32A noise at Point: visible enemies within Radius come to look (bInvestigateOnly) or notice the party. Returns enemies reached.
On Distraction Landed (OnDistractionLanded)eventRPG Saga|Exploration RPGLocation: FVector
On Steal Attempted (OnStealAttempted)eventRPG Saga|Exploration RPGNPC: ARSENPC*
Result: ERSEStealResult
Thief: URSECharacterData*
Refresh Fallen (RefreshFallen)functionRPG Saga|Exploration RPGApplies the fallen rules to the visible party now (after a battle, a load): get up, lie down, or be carried.
Revive Member (ReviveMember)functionRPG Saga|Exploration RPGMember: URSECharacterData*boolRevives a fallen member the best way available (item, spell, help up).
Search At (SearchAt)functionRPG Saga|Exploration RPGPoint: FVector
Searcher: URSECharacterData*
int32"Search here" (D-097 command): Searcher's perception gets the search bonus around Point for a while; checks at once.
Throw At (ThrowAt)functionRPG Saga|Exploration RPGPoint: FVectorboolThrows a distraction at Point as this machine's player (D-138: the Throw Distraction command; the authority throws from their pawn): an item is used if the rules say so; the enemies near it come to look. Returns true when applied (or sent).

URSEExplorerComponent

Module RSE, display name RSE Explorer. Makes any pawn an explorer (D-165, docs/product/components.md): add it to your own character (a Blueprint character keeps its parent class) and the interaction prompt, the Interact key, encounters, stealth and the party systems treat it as the player's explorer.

NodeKindCategoryParametersReturnsDescription
Get Pawn (GetPawn)pureRPG Saga|ExplorerAPawn*The pawn this component explores with (its owner).
Interact (Interact)functionRPG Saga|ExplorerThe Interact input: runs what the pawn's prompt shows (the interaction system listens) and raises On Interact.
On Explorer State Changed (OnExplorerStateChanged)eventRPG Saga|ExplorerExplorer: URSEExplorerComponent*Party member, sneaking, in battle or fallen changed.
On Interact (OnInteract)eventRPG Saga|ExplorerPawn: APawn*The Interact input reached the pawn (Blueprint and level scripting hook).

URSEExplorerPawn

Module RSE. RSE Explorer Pawn

NodeKindCategoryParametersReturnsDescription
Get Explorer Party Member (GetExplorerPartyMember)overrideRPG Saga|ExplorerURSECharacterData*The party member this pawn is (null = the party's leader: the first of the formation).
Is Explorer Fallen (IsExplorerFallen)overrideRPG Saga|ExplorerboolFallen (D-109): lies on the ground until revived.
Is Explorer in Battle (IsExplorerInBattle)overrideRPG Saga|ExplorerboolA Free Tactics battle moves this pawn (its own movement and input wait).
Is Explorer Input Blocked (IsExplorerInputBlocked)overrideRPG Saga|ExplorerboolA menu or another modal screen of this pawn's player is open: its world actions wait (D-152).
Is Explorer Sneaking (IsExplorerSneaking)overrideRPG Saga|ExplorerboolSneaking (D-097): much harder to notice; sneak attacks and placing members need it.
Set Explorer Fallen (SetExplorerFallen)overrideRPG Saga|ExplorerbFallen: boolSet Explorer Fallen
Set Explorer in Battle (SetExplorerInBattle)overrideRPG Saga|ExplorerbInBattle: boolSet Explorer in Battle
Set Explorer Party Member (SetExplorerPartyMember)overrideRPG Saga|ExplorerMember: URSECharacterData*Set Explorer Party Member
Set Explorer Sneaking (SetExplorerSneaking)overrideRPG Saga|ExplorerbSneaking: boolSet Explorer Sneaking

URSEExplorers

Module RSE. The explorer of an actor (D-165): the actor itself when it implements IRSEExplorerPawn, else its component that does (URSEExplorerComponent).

NodeKindCategoryParametersReturnsDescription
Explorer Interact (ExplorerInteract)function, staticRPG Saga|ExplorerPawn: APawn*boolInteracts with what Pawn's prompt shows (the Interact input of a pawn that implements IRSEExplorerPawn itself; the explorer component and ARSEExplorationCharacter do it on their own). Returns true when it interacted.
Find Explorer (FindExplorer)pure, staticRPG Saga|ExplorerActor: AActor*UObject*The object that answers IRSEExplorerPawn for Actor (the actor, or its explorer component), or null.
Get Camera Arm (GetCameraArm)pure, staticRPG Saga|ExplorerActor: AActor*URSEExplorationCameraArm*The exploration camera arm of Actor (D-113), or null.
Get Explorer Party Member (GetPartyMember)pure, staticRPG Saga|ExplorerActor: AActor*URSECharacterData*The party member the explorer is (null when it is not an explorer, or is the leader without a member set).
Is Explorer (IsExplorer)pure, staticRPG Saga|ExplorerActor: AActor*boolActor is an explorer (implements the interface or carries an explorer component).
Is Explorer Fallen (IsFallen)pure, staticRPG Saga|ExplorerActor: AActor*boolIs Explorer Fallen
Is Explorer In Battle (IsInBattle)pure, staticRPG Saga|ExplorerActor: AActor*boolIs Explorer In Battle
Is Explorer Input Blocked (IsInputBlocked)pure, staticRPG Saga|ExplorerActor: AActor*boolIs Explorer Input Blocked
Is Explorer Sneaking (IsSneaking)pure, staticRPG Saga|ExplorerActor: AActor*boolIs Explorer Sneaking
Set Explorer Fallen (SetFallen)function, staticRPG Saga|ExplorerActor: AActor*
bFallen: bool
Set Explorer Fallen
Set Explorer In Battle (SetInBattle)function, staticRPG Saga|ExplorerActor: AActor*
bInBattle: bool
Set Explorer In Battle
Set Explorer Party Member (SetPartyMember)function, staticRPG Saga|ExplorerActor: AActor*
Member: URSECharacterData*
Set Explorer Party Member
Set Explorer Sneaking (SetSneaking)function, staticRPG Saga|ExplorerActor: AActor*
bSneaking: bool
Set Explorer Sneaking

URSEFallRecoverySubsystem

Module RSE. The safety net against gaps in a level's collision (D-112, Exploration settings -> Fall Recovery): on a timer it remembers where each explorer (the leader and the visible party; D-165: any character with IRSEExplorerPawn or an RSE Explorer component) last stood on solid ground, and puts back one tha...

NodeKindCategoryParametersReturnsDescription
On Character Recovered (OnCharacterRecovered)eventRPG Saga|ExplorationExplorer: ACharacter*
From: FVector
D-165: any explorer character was put back (also the ones On Explorer Recovered does not name).
On Explorer Recovered (OnExplorerRecovered)eventRPG Saga|ExplorationExplorer: ARSEExplorationCharacter*
From: FVector
An explorer was put back (From: where it was lost).
Recover Explorer (RecoverExplorer)functionRPG Saga|ExplorationExplorer: ACharacter*boolPuts an explorer back on the spot it last stood on safely. Returns false when no safe spot is known.

URSEFeatureLibrary

Module RSECore. Blueprint access to the feature toggles, so project code can adapt (hide a button when a system is off).

NodeKindCategoryParametersReturnsDescription
Is Feature Enabled (IsFeatureEnabled)pure, staticRPG Saga|FeaturesFeature: ERSEFeatureboolWhether a framework system is switched on (Project Settings -> RPG Saga Engine -> Features).

URSEFitText

Module RSE. UMG wrapper of SRSEFitText: a single line label that ends with "..." instead of being cut (D-106).

NodeKindCategoryParametersReturnsDescription
Get Text (GetText)pureRPG Saga|UIFTextThe whole text (not the shortened one on screen).
Set Color and Opacity (SetColorAndOpacity)functionRPG Saga|UIInColor: FSlateColorColor of the text (the shadow keeps its own).
Set Text (SetText)functionRPG Saga|UIInText: FText (ref)The text; it is shortened with an ellipsis only on screen, when its space is too narrow.

URSEFormulaTesterLibrary

Module RSECore. The formula tester (D-166): pick a character, class or archetype, a level and equipment, then see every attribute and derived stat computed step by step (base, formula result, add, percent, multiply, override, clamp, final), with the formula text and the problems highlighted (unknown variable, cycle...

NodeKindCategoryParametersReturnsDescription
Format Formula Test Report (FormatFormulaTestReport)pure, staticRPG Saga|Attributes|Formula TesterResult: FRSEFormulaTestResult (ref)FStringThe result as readable text, one line per stat and one per problem (logs, Python, bug reports).
Format Stat Trace (FormatStatTrace)pure, staticRPG Saga|Attributes|Formula TesterTrace: FRSEStatTrace (ref)FStringOne stat as a line: "Max HP = 120 (base 100 -> +10 -> x1.2 ...)".
Run Formula Test (RunFormulaTest)function, staticRPG Saga|Attributes|Formula TesterInput: FRSEFormulaTestInput (ref)FRSEFormulaTestResultRun Formula Test

URSEFoundationLibrary

Module RSECore. The Game Foundation API (D-095, docs/design/studio.md section 5 and section 16) for the Studio's foundation wizard and tools.

NodeKindCategoryParametersReturnsDescription
Analyze Impact (AnalyzeImpact)function, staticRPG Saga|FoundationFoundation: URSEGameFoundation*
Content: TArray<UObject*> (ref)
FRSEFoundationImpactReportEvery reference in Content (and, per settings, in framework settings) to a tag under a managed root (Stat, Resource, Element, Equip.Slot, Equip.Type, Ability.Type, Item.Category) that Foundation does not define, plus one proposed replacement per tag (the preset's suggestion, else a defined tag with the same name, else removal).
Apply Foundation (ApplyFoundation)function, staticRPG Saga|FoundationFoundation: URSEGameFoundation*
Target: FRSEFoundationApplyTarget (ref)
Options: FRSEFoundationApplyOptions (ref)
FRSEFoundationApplyReportWrites Foundation into Target: validation first (errors: nothing written), then the breaking-change check on Options.Content (breaking and not allowed: nothing written, the report holds the impact and proposed mapping).
Apply Replacement Mapping (ApplyReplacementMapping)function, staticRPG Saga|FoundationContent: TArray<UObject*> (ref)
Mapping: TArray<FRSEFoundationReplacement> (ref)
TArray<UObject*>Rewrites the tags of Mapping in Content (empty To = the reference is removed). Instanced sub-objects included. Returns the modified assets (marked dirty). Settings objects are never changed here.
Capture Current Setup (CaptureCurrentSetup)function, staticRPG Saga|FoundationFoundation: URSEGameFoundation*
Profile: URSERulesProfile*
Fills Foundation from the setup that applies under Profile (null = the global settings): registry, formulas, affinities, slots, command menu, modes, progression, economy, terms. Element, equipment kind, item and ability category lists are filled from the tags the setup uses. "Start from my current setup".
Get Foundation Presets (GetFoundationPresets)function, staticRPG Saga|FoundationTArray<URSEGameFoundation*>Foundations found in the library folders (Game Foundation settings), presets first by Sort Order.
Get Game Term (GetGameTerm)pure, staticRPG Saga|FoundationId: FName
Fallback: FText
FTextThe game's word for Id (Party, Class, Magic, Money...; HP / MP: also the attribute registry), or Fallback when the game does not define it.
Get Known Game Terms (GetKnownGameTerms)function, staticRPG Saga|FoundationTArray<FRSEGameTermInfo>Every word screens ask for (Party, Lv, EXP, HP...), with its default and current text (D-100).
Get Missing Tags (GetMissingTags)function, staticRPG Saga|FoundationFoundation: URSEGameFoundation*TArray<FName>Gameplay tags Foundation needs that the project does not have (the editor can add them before applying).
Get Tag Display Name (GetTagDisplayName)pure, staticRPG Saga|FoundationTag: FGameplayTagFTextThe player-facing name of a tag (Game Terms, else the last part of the tag).
Is Foundation Valid (IsFoundationValid)pure, staticRPG Saga|FoundationFoundation: URSEGameFoundation*boolTrue when ValidateFoundation has no errors.
Resolve Game Terms (ResolveGameTerms)pure, staticRPG Saga|FoundationText: FTextFTextText with its {Term.<Id>} arguments filled with the game's words; other arguments stay for a later Format Text.
Run Foundation Test Battle (RunFoundationTestBattle)function, staticRPG Saga|FoundationFoundation: URSEGameFoundation*TArray<FRSEFoundationTestBattle>A quick simulated battle with generated units (Game Foundation settings -> Test Battle) in every mode the foundation enables, applied to a transient sandbox: shows the setup is consistent and playable. Nothing in the project changes.
Run Starter Content Battles (RunStarterContentBattles)function, staticRPG Saga|FoundationFoundation: URSEGameFoundation*
Runs: int32
TArray<FRSEFoundationStarterBattleResult>Plays the foundation's starter content in the simulator (D-100): the starter party, at each battle's party level, against each starter encounter in its own mode, on a sandbox with the foundation applied (Game Foundation -> Starter Balance: runs, intelligence, target band). Runs = 0: the settings' value. Nothing in the project changes.
Validate Foundation (ValidateFoundation)function, staticRPG Saga|FoundationFoundation: URSEGameFoundation*TArray<FRSEFoundationIssue>Every problem of Foundation (missing required stats, formulas that do not compile, unknown tags, empty menus...).

URSEFreeTacticsBattle

Module RSECore. Headless Free Tactics battle (D-091, docs/design/free-tactics.md): the Tactics rules in free space.

NodeKindCategoryParametersReturnsDescription
Add Move Trigger (AddMoveTrigger)functionRPG Saga|Free TacticsTrigger: FRSEFreeMoveTrigger (ref)int32Adds a trap on the ground (D-109). Returns its id (the FieldId of its ZoneTriggered event).
Apply Surprise (ApplySurprise)functionRPG Saga|Free TacticsOpenerTeam: FGameplayTag
SurprisedUnitIds: TArray<int32> (ref)
A surprise round (call after StartBattle, before the first turn): SurprisedUnitIds lose their first turn (a TurnEnded with Battle.Turn.Surprised); OpenerTeam acts first (individual order: full Charge Time; team order: it opens round 1). Ignored when Free Tactics -> Surprise Rounds is off.
Can Act At (CanActAt)pureRPG Saga|Free Tactics|TraversalPoint: FVectorboolWhether a unit standing at Point may use abilities and items (false inside a volume whose kind forbids it: swimming).
Can Flee Battle (CanFleeBattle)pureRPG Saga|Free TacticsboolThe party may run away from this battle (the encounter allows it and Free Tactics -> Fleeing is on).
Check Door (CheckDoor)pureRPG Saga|Free TacticsUnitId: int32
DoorIndex: int32
ERSEFreeDoorCheckWhether UnitId (the active unit) may open or close the door now: in reach on its floor, unlocked, nobody in the way, the budget.
Check Flee (CheckFlee)pureRPG Saga|Free TacticsUnitId: int32
Point: FVector
ERSEFreeFleeCheckWhether UnitId (the active unit, on the player's team) could flee from Point now: fleeing allowed, Point within its movement (its own spot = no walk), and no enemy there within Escape Radius that sees it (Escape Hidden Radius when it does not). The enemies are taken where they stand now.
Check Jump (CheckJumpBP)pureRPG Saga|Free Tactics|FieldUnitId: int32
Point: FVector
OutPlan: FRSEFreeJumpPlan (out)
ERSEFreeJumpCheckBlueprint: CheckJump.
Create Surface Circle (CreateSurfaceCircle)functionRPG Saga|Free Tactics|FieldCreatorId: int32
Data: URSETileZoneData*
Center: FVector
Radius: float
DurationOverride: int32 = -1
int32A round surface (Blueprint, dev commands).
Damage Object (DamageObject)functionRPG Saga|Free Tactics|FieldSourceId: int32
ObjectId: int32
Amount: float
Damages an object; at 0 HP it breaks (its blocker leaves the snapshot: paths, sight and cover change), and may explode.
End Battle as Escape (EndBattleAsEscape)functionRPG Saga|Free TacticsEnds the battle as an escape (Fled): a flee ability, a story exit.
Execute Command (ExecuteCommand)functionRPG Saga|Free TacticsCommand: FRSEFreeTacticsCommand (ref)ERSEFreeCommandResultThe single entry point of decisions: validates Command (the active unit's, affordable, reachable, a valid target) and applies it. Nothing changes when it is refused.
Get Controller (GetController)pureRPG Saga|Free TacticsUnitId: int32URSEFreeTacticsController*Who decides for a unit: its own controller, else its team's; null = nobody (the caller drives it).
Get Door Count (GetDoorCount)pureRPG Saga|Free Tacticsint32Doors of the battle area (the snapshot's).
Get Escape Progress (GetEscapeProgress)pureRPG Saga|Free TacticsUnitId: int32int32Rounds the escaping unit has spent out of reach so far (INDEX_NONE when it is not escaping).
Get Escaped Count (GetEscapedCount)pureRPG Saga|Free Tacticsint32Units of the player's team that got away.
Get Joined Unit Id (GetJoinedUnitId)pureRPG Saga|Free TacticsTicket: int32int32Unit id of a queued unit once it joined (INDEX_NONE while it waits, or for an unknown ticket).
Get Objects (GetObjectsBP)pureRPG Saga|Free Tactics|FieldTArray<FRSEFreeObject>Get Objects
Get Overwatches (GetOverwatchesBP)pureRPG Saga|Free TacticsTArray<FRSEFreeOverwatch>Blueprint: the units on watch now.
Get Queued Join Count (GetQueuedJoinCount)pureRPG Saga|Free Tacticsint32Units waiting to join.
Get Round (GetRound)pureRPG Saga|Free Tacticsint32Rounds started (1 = the first). Team-based order: every team had its phase. Individual order: a round lasts as many turns as there were units standing when it began (D-097), so joining, fleeing and surprise work the same in both orders.
Get Route Hazards (GetActiveUnitRouteHazards)pureRPG Saga|Free Tactics|FieldGoal: FVectorFRSEFreeRouteHazardReportBlueprint: what the active unit's walk to Goal goes through (empty when unreachable).
Get Surfaces (GetSurfacesBP)pureRPG Saga|Free Tactics|FieldTArray<FRSEFreeSurface>Blueprint: every surface on the field.
Has Escaped (HasEscaped)pureRPG Saga|Free TacticsUnitId: int32boolThe unit ran away and is out of the battle (not defeated: it keeps its HP and is written back to the party).
Insert Turn (InsertTurn)functionRPG Saga|Free TacticsUnitId: int32D-117: UnitId acts next: an extra turn inserted before the next regular one (a scripted battle event's "acts now"). Its CT and round bookkeeping are not touched; several insertions keep their order. Ignored for a unit that is not standing.
Is Door Open (IsDoorOpen)pureRPG Saga|Free TacticsDoorIndex: int32boolIs Door Open
Is Escaping (IsEscaping)pureRPG Saga|Free TacticsUnitId: int32boolThe unit fled and waits out Escape Rounds before it leaves.
Is Overwatch Ability (IsOverwatchAbility)pureRPG Saga|Free TacticsAbility: URSEAbilityData*boolWhether Ability is an Overwatch stance here (its Free Tactics Rules -> Overwatch).
Is Surprised (IsSurprised)pureRPG Saga|Free TacticsUnitId: int32boolThe unit will lose its next turn to a surprise.
Preview From Destination (PreviewFromDestinationBP)pureRPG Saga|Free Tactics|FieldUnitId: int32
Destination: FVector
TArray<FRSEFreeDestinationPreview>Blueprint: PreviewFromDestination.
Queue Join (QueueJoin)functionRPG Saga|Free TacticsSpawn: FRSEBattleUnitSpawn (ref)int32A unit that noticed the battle joins it (an enemy walking over, a party member arriving): at the start of the next round (Free Tactics -> Join At Next Round), else before the next turn. Place it with Spawn.Location (bHasLocation). Returns a ticket to move it while it waits (UpdateQueuedJoin) and to find its unit id afterwards (GetJoinedUnitId).
Remove Surface (RemoveSurface)functionRPG Saga|Free Tactics|FieldSurfaceId: int32Remove Surface
Set Can Flee (SetCanFlee)functionRPG Saga|Free TacticsbInCanFlee: boolWhether this battle may be fled at all (the encounter's Can Flee). Free Tactics -> Fleeing must be on as well.
Set Cover Provider (SetCoverProvider)functionRPG Saga|Free TacticsProvider: URSECoverProvider*Replaces the cover provider for this battle (asset combat roles, tests). Null = back to the settings' provider.
Set Team Controller (SetTeamController)functionRPG Saga|Free TacticsTeam: FGameplayTag
Controller: URSEFreeTacticsController*
The controller of every unit of Team without its own (null clears it).
Set Unit Controller (SetUnitController)functionRPG Saga|Free TacticsUnitId: int32
Controller: URSEFreeTacticsController*
The controller of one unit (a guest, a charmed unit; null clears it).
Spawn Object (SpawnObject)functionRPG Saga|Free Tactics|FieldCreatorId: int32
Data: URSEFieldObjectData*
Point: FVector
int32Places an object of Data at Point (Spawn Object in Free Tactics): a blocker with HP. Returns its id or INDEX_NONE.
Toggle Door (ToggleDoor)functionRPG Saga|Free TacticsDoorIndex: int32boolOpens or closes a door with the active unit (a Door command). Returns false when refused (nothing changes).
Update Queued Join (UpdateQueuedJoin)functionRPG Saga|Free TacticsTicket: int32
Location: FVector
Yaw: float
boolWhere a queued unit stands now (battle space, meters): it enters the battle there. Returns false for an unknown or joined ticket.

URSEFreeTacticsController

Module RSECore, display name Free Tactics Controller. Who decides for a unit in Free Tactics (D-091): the local player, the AI, later a remote player.

NodeKindCategoryParametersReturnsDescription
On Command Rejected (OnCommandRejected)overrideRPG Saga|Free TacticsBattle: URSEFreeTacticsBattle*
Command: FRSEFreeTacticsCommand (ref)
Result: ERSEFreeCommandResult
The battle refused a command this controller provided (it will be asked again, or the turn is ended for it).
Provide Command (ProvideCommand)overrideRPG Saga|Free TacticsBattle: URSEFreeTacticsBattle*
UnitId: int32
OutCommand: FRSEFreeTacticsCommand (out)
boolThe next command for UnitId (the active unit), or false to wait (a player who has not decided yet). Must not change the battle: the battle validates and applies the command.
Uses AIRoutes (UsesAIRoutes)overrideRPG Saga|Free TacticsboolD-121: the units it decides for route like the AI (links whose kind keeps them from the AI are closed to them).

URSEFreeTacticsHUDViewModel

Module RSE. The data and the actions of the Free Tactics battle HUD (D-097, D-052): turn order, the active unit, the command menu (the command menu layout of D-065), the target preview with hit chances and position factors, the path cost, messages and hints.

NodeKindCategoryParametersReturnsDescription
Activate Entry (ActivateEntry)functionRPG Saga|Free Tactics|HUDIndex: int32Activates a command menu entry (a click).
Answer Hazard (AnswerHazard)functionRPG Saga|Free Tactics|HUDbContinue: boolD-156: answers the danger warning (a click on its buttons).
End Turn (EndTurn)functionRPG Saga|Free Tactics|HUDEnd Turn
Get Battle Menu (GetBattleMenu)pureRPG Saga|Free Tactics|HUDURSEBattleMenuViewModel*D-122: this player's battle menu (every menu style shows it; Widget Blueprints may too).
Get Director (GetDirector)pureRPG Saga|Free Tactics|HUDARSEFreeTacticsDirector*Get Director
Highlight Entry (HighlightEntry)functionRPG Saga|Free Tactics|HUDIndex: int32Highlights a command menu entry (mouse over).
Highlight Hazard Answer (HighlightHazardAnswer)functionRPG Saga|Free Tactics|HUDIndex: int32D-156: highlights one of the warning's answers (mouse over: 0 = continue, 1 = pick another path).

URSEFreeTacticsQueuedController

Module RSECore, display name Free Tactics Queued Controller. A controller fed from outside (D-097): the local player's input (the Free Tactics director queues what the player chose), later a remote player's messages.

NodeKindCategoryParametersReturnsDescription
Clear Queue (ClearQueue)functionRPG Saga|Free TacticsForgets the commands not taken yet.
Clear Rejection (ClearRejection)functionRPG Saga|Free TacticsClear Rejection
Get Last Rejection (GetLastRejection)pureRPG Saga|Free TacticsERSEFreeCommandResultWhy the last refused command was refused (Ok when none was refused since the last ClearRejection).
Get Queued Count (GetQueuedCount)pureRPG Saga|Free Tacticsint32Commands waiting to be taken.
Queue Command (QueueCommand)functionRPG Saga|Free TacticsCommand: FRSEFreeTacticsCommand (ref)Adds a command; the battle takes it the next time it asks this controller (RunControllers).

URSEFreeTacticsSimDriver

Module RSE. The server side of a Free Tactics battle (D-141, docs/design/networking.md §3.6): owns the headless battle (URSEFreeTacticsBattle) and runs it on the authority only (single player, the host): the controllers (one queued controller per player, the AI for the enemies and for the units no player plays)...

NodeKindCategoryParametersReturnsDescription
Get Battle (GetBattle)pureRPG Saga|Free TacticsURSEFreeTacticsBattle*Get Battle

URSEFreeTacticsSubsystem

Module RSE. Free Tactics on the live map (D-097): starts battles where the party stands (a visible group that noticed the party or was attacked, an encounter, a dev command), gathers who takes part (the group, the enemies called for help, the party members nearby), owns the world's battle director and relays th...

NodeKindCategoryParametersReturnsDescription
Get Active Director (GetActiveDirector)pureRPG Saga|Free TacticsARSEFreeTacticsDirector*The director of the running battle, or null.
Is Battle Active (IsBattleActive)pureRPG Saga|Free TacticsboolIs Battle Active
Start Encounter Battle (StartEncounterBattle)functionRPG Saga|Free TacticsEncounter: URSEEncounterData*
Opening: ERSEFreeOpening
EnemyActors: TArray<AActor*> (ref)
Source: AActor* = None
boolStarts a Free Tactics battle with Encounter's enemies (story battles, triggers, dev commands). EnemyActors stand for its enemies in order; missing ones appear near the first (or in front of the party). Source gets the exploration's callback.
Start Group Battle (StartGroupBattle)functionRPG Saga|Free TacticsSpawner: ARSEEncounterSpawner*
GroupIndex: int32
Opening: ERSEFreeOpening
boolStarts the battle of a visible group of Spawner (it noticed the party, or the party touched it). Enemies of other groups within Free Tactics -> Call For Help Radius join from the start; party members within Party Join Radius of the leader fight from where they stand. Returns false when a battle cannot start now.

URSEFreeTargetingLibrary

Module RSECore. D-146: the targeting rules for Blueprints (custom HUDs, tutorials).

NodeKindCategoryParametersReturnsDescription
Gather Targets (GatherTargets)function, staticRPG Saga|Free Tactics|TargetingBattle: URSEFreeTacticsBattle*
UnitId: int32
Origin: FVector
Ability: URSEAbilityData*
bItem: bool
ViewYaw: float
TArray<FRSEFreeTargetCandidate>Every unit the ability's side holds, with whether UnitId at Origin can aim it there and why not (sorted by distance).
Get Target Side (GetTargetSide)pure, staticRPG Saga|Free Tactics|TargetingAbility: URSEAbilityData*ERSEFreeTargetSideWhom an ability is for.
Make Target Cycle (MakeTargetCycle)pure, staticRPG Saga|Free Tactics|TargetingCandidates: TArray<FRSEFreeTargetCandidate> (ref)
Order: ERSEFreeTargetCycleOrder
TArray<int32>The valid targets in the order Next / Previous target walks.
Pick Default Target (PickDefaultTarget)pure, staticRPG Saga|Free Tactics|TargetingCandidates: TArray<FRSEFreeTargetCandidate> (ref)
Side: ERSEFreeTargetSide
HostilePick: ERSEFreeHostileAutoPick
SupportPick: ERSEFreeSupportAutoPick
int32The target highlighted first.

URSEGASBridgeComponent

Module RSEGAS, display name RSE GAS Bridge. Puts a Gameplay Ability System character into RPG Saga Engine battles (D-169).

NodeKindCategoryParametersReturnsDescription
Activate Bridge (ActivateBridge)functionRPG Saga|GASStarts answering for the character (called at Begin Play; call it yourself for an actor that never begins play).
Bind to Battle Unit (BindToBattleUnit)functionRPG Saga|GASBattle: URSEBattle*
UnitId: int32
boolMirrors a battle unit (done by itself when the battle builds the unit through the stat source).
Deactivate Bridge (DeactivateBridge)functionRPG Saga|GASStops answering and unbinds from any battle (called at End Play).
Get Ability System (GetAbilitySystem)pureRPG Saga|GASUAbilitySystemComponent*The ASC used: the one set with Set Ability System, else the owner's.
Get Battle (GetBattle)pureRPG Saga|GASURSEBattle*Get Battle
Get Mapped Value (GetMappedValue)pureRPG Saga|GASRSETag: FGameplayTag
bFound: bool (out)
floatThe current value of the GAS attribute mapped to an RSE stat or resource, in RSE units (UI).
Get Unit Id (GetUnitId)pureRPG Saga|GASint32Get Unit Id
Is Bound (IsBound)pureRPG Saga|GASboolIs Bound
On Battle Event Forwarded (OnBattleEventForwarded)eventRPG Saga|GASEvent: FRSEBattleEvent (ref)
EventTag: FGameplayTag
An RSE battle event of the bound unit was sent to the ASC (EventTag empty when only the ability map sent one).
On Bound (OnBound)eventRPG Saga|GASBattle: URSEBattle*
UnitId: int32
--- Events (GAS -> RSE side) ---
On Gameplay Cue Triggered (OnGameplayCueTriggered)eventRPG Saga|GASCueTag: FGameplayTag
CueEvent: ERSEGASCueEvent
A Gameplay Cue was triggered on this actor by an RSE presentation cue (Gameplay Cue cue, G2).
On GASAttribute Changed (OnGASAttributeChanged)eventRPG Saga|GASRSETag: FGameplayTag
OldValue: float
NewValue: float
A mapped GAS attribute changed by something other than the bridge (values in RSE units).
On GASTag Changed (OnGASTagChanged)eventRPG Saga|GASTag: FGameplayTag
bPresent: bool
A status tag of the status map was added or removed by something other than the bridge.
On Unbound (OnUnbound)eventRPG Saga|GAS
Read Stats (ReadStats)pureRPG Saga|GASOutStats: FRSEExternalUnitStats (out)
Battle: URSEBattle* = None
boolWhat the ASC supplies for a battle unit now (In rows; resources vs stats per the battle's attribute registry, or the global one). Returns false without an ASC or an attribute map.
Set Ability System (SetAbilitySystem)functionRPG Saga|GASAbilitySystem: UAbilitySystemComponent*Uses this ASC instead of the owner's (e.g. one kept on the Player State).
Unbind (Unbind)functionRPG Saga|GASStops mirroring the battle unit (done by itself when the battle ends).

URSEGameOverViewModel

Module RSE. Game over (D-031): Retry battle / Load last save / Return to main menu, with the cursor.

NodeKindCategoryParametersReturnsDescription
Choose (Choose)functionRPG Saga|UI|GameOverIndex: int32Chooses an option (disabled ones do nothing).
Move Selection (MoveSelection)functionRPG Saga|UI|GameOverDirection: int32Moves the cursor to the next enabled option (+1 down, -1 up).
Select (Select)functionRPG Saga|UI|GameOverIndex: int32Puts the cursor on an option (mouse hover).

URSEGroupTravelPolicy

Module RSE. Who leads the group out of a zone in co-op (D-124 §6.6, D-138).

NodeKindCategoryParametersReturnsDescription
Decide (Decide)overrideRPG Saga|Travel|Co-opRequest: FRSETravelRequest (ref)
Instigator: FRSEPlayerId
bMultiplayer: bool
ERSEGroupTravelDecisionWhat Request (made by Instigator; None = the game itself) does now. bMultiplayer: several players share the world.

URSEGroupTravelPresenter

Module RSE. The co-op screens of group travel (D-138 rule, D-142 screens): the host's countdown shows on every player's screen (the destination and the seconds, with how to stay on the host's), its cancel closes them with a notice; a guest who walks into an exit asks the host, who answers a question box ("Playe...

NodeKindCategoryParametersReturnsDescription
Get Seconds Left (GetSecondsLeft)pureRPG Saga|Travel|Co-opfloatSeconds left on this machine's countdown screen.
Is Countdown Shown (IsCountdownShown)pureRPG Saga|Travel|Co-opboolThe countdown shows on this machine now.
On Group Travel Shown (OnGroupTravelShown)eventRPG Saga|Travel|Co-opTravel: FRSEPresentation_GroupTravel (ref)Every countdown screen this machine shows or closes (a project's own widget).

URSEGrowthAllocationPolicy

Module RSECore. Spends a character's points when nobody builds it by hand (D-144): AI-controlled members, autoplay, the battle simulator, Balance My Campaign and the Progression Designer, so balance stays valid under every progression system.

NodeKindCategoryParametersReturnsDescription
Choose Option (ChooseOption)overrideRPG Saga|ProgressionCharacter: URSECharacterData*
Level: int32
Options: TArray<FRSEGrowthOption> (ref)
int32Which option to take next (index into Options), or -1 to stop spending. Default: the best Score per point of cost, the earliest listed on ties.
Should Stop (ShouldStop)overrideRPG Saga|ProgressionCharacter: URSECharacterData*
Level: int32
StepsTaken: int32
boolWhether the policy keeps points for later (e.g. saving for an expensive node). Default: never.

URSEGrowthViewModel

Module RSE. The Growth page (D-144): the selected member's points and the points page (Classic + Points) or the board (Classic + Growth Board), plus mastery and ranks.

NodeKindCategoryParametersReturnsDescription
Cancel Pending (CancelPending)functionRPG Saga|UI|GrowthNo.
Choose Node Menu Option (ChooseNodeMenuOption)functionRPG Saga|UI|GrowthIndex: int32boolRuns an entry of the node menu (Unlock sends the command at once: the free undo takes it back).
Close Node Menu (CloseNodeMenu)functionRPG Saga|UI|GrowthClose Node Menu
Confirm Pending (ConfirmPending)functionRPG Saga|UI|GrowthboolYes: sends the waiting action's command.
End Session (EndSession)functionRPG Saga|UI|GrowthThe page closed (D-149): the undo steps of the members changed here become final (a Clear Growth Undo command each) and the node menu closes. The page calls it when it leaves the screen.
Get Content Count (GetContentCount)pureRPG Saga|UI|Growthint32Number of rows of the points page (attributes + catalog).
Get Currency Name (GetCurrencyName)pureRPG Saga|UI|GrowthCurrency: FGameplayTagFTextGet Currency Name
Get Member Column Count (GetMemberColumnCount)pureRPG Saga|UI|Growthint32Number of rows of the member column (members + Auto + Undo + Respec).
Get Selected Character (GetSelectedCharacter)pureRPG Saga|UI|GrowthURSECharacterData*Get Selected Character
Open Node Menu (OpenNodeMenu)functionRPG Saga|UI|GrowthNodeIndex: int32boolOpens the node menu next to a board node (D-149): Unlock (with its cost), Details, Cancel.
Refresh (Refresh)functionRPG Saga|UI|GrowthReads the party state again (keeps the selection).
Request Auto (RequestAuto)functionRPG Saga|UI|GrowthboolRequest Auto
Request Buy (RequestBuy)functionRPG Saga|UI|GrowthAbility: URSEAbilityData*boolRequest Buy
Request Raise (RequestRaise)functionRPG Saga|UI|GrowthStat: FGameplayTagboolRequest Raise
Request Respec (RequestRespec)functionRPG Saga|UI|GrowthboolRequest Respec
Request Selected Action (RequestSelectedAction)functionRPG Saga|UI|GrowthboolAsks to raise / buy / unlock the selected row or node (a Yes / No follows).
Request Undo (RequestUndo)functionRPG Saga|UI|GrowthboolTakes the selected member's newest step back for free (D-149).
Request Unlock (RequestUnlock)functionRPG Saga|UI|GrowthNodeId: FNameboolRequest Unlock
Select Content (SelectContent)functionRPG Saga|UI|GrowthIndex: int32Puts the cursor on a content row (points page) or a node (board, by index).
Select Member (SelectMember)functionRPG Saga|UI|GrowthIndex: int32Select Member
Select Node by Id (SelectNodeById)functionRPG Saga|UI|GrowthNodeId: FNameboolSelect Node by Id
Set Details Open (SetDetailsOpen)functionRPG Saga|UI|GrowthbOpen: boolShows or hides the board's details panel.
Set Legend Open (SetLegendOpen)functionRPG Saga|UI|GrowthbOpen: boolShows or hides the legend of node kinds over the board (D-154: the strip's Help button).

URSEHUDLayoutSubsystem

Module RSE. P32d: the screen areas the HUD elements of one local player take (the quest tracker, a minimap a game adds...), so that transient UI (the reward feed's toasts) places itself around them instead of on top of them.

NodeKindCategoryParametersReturnsDescription
Clear Occupied (ClearOccupied)functionRPG Saga|HUDId: FNameClear Occupied
Set Occupied HUD Area (SetOccupiedArea)functionRPG Saga|HUDId: FName
AbsoluteTopLeft: FVector2D
AbsoluteBottomRight: FVector2D
Blueprint form: a widget's area this frame (absolute Slate coordinates, e.g. from its cached geometry). Call while it shows.

URSEIdleBehavior

Module RSECore. One idle behaviour (D-129): how likely (Weight), how often (Cooldown) and what it does.

NodeKindCategoryParametersReturnsDescription
Can Run (CanRun)overrideRPG Saga|Party FieldContext: FRSEIdleContext (ref)boolWhether it can run in this context (an animation the look has, a free spot, another member nearby).
Make Intent (MakeIntent)overrideRPG Saga|Party FieldContext: FRSEIdleContext (ref)
Seed: int32
OutIntent: FRSEIdleIntent (out)
Fills the intent (kind, animations, target, duration). Seed: the deterministic random choice of this pick.

URSEInputDeviceSubsystem

Module RSE. Tracks the device in use (keyboard / mouse or gamepad) through a Slate input pre-processor, so key prompts show the labels of that device only (RSEKeyPrompts, D-038 / D-040).

NodeKindCategoryParametersReturnsDescription
Get Input Device (GetLastDevice)pure, staticRPG Saga|InputERSEInputDeviceThe device the prompts show: the forced one, else the one used last.
Is Menu Focused (IsMenuFocused)pure, staticRPG Saga|InputboolWhether any registered menu has focus (the left stick navigates it).
Is Steam Deck (IsSteamDeck)pure, staticRPG Saga|InputboolRunning on a Steam Deck (SteamDeck=1 environment variable, -SteamDeck, or URSEInputSettings::bSimulateSteamDeck).
Is Using Gamepad (IsUsingGamepad)pure, staticRPG Saga|InputboolThe prompts show gamepad buttons now.
Is Using Touch (IsUsingTouch)pure, staticRPG Saga|InputboolD-180: the player uses a touch screen now (touch hints, on-screen controls).
Notify Prompts Changed (NotifyPromptsChanged)function, staticRPG Saga|InputRe-reads the forced device and label set and broadcasts OnDeviceChanged (options, CVars).
On Input Device Changed (BP_OnDeviceChanged)eventRPG Saga|InputDevice: ERSEInputDeviceThe prompt device changed (keyboard / mouse or gamepad; Blueprint).

URSEInteractableComponent

Module RSE, display name RSE Interactable. Makes any actor interactable (D-165, docs/product/components.md): add it to your own actor (no parent class needed) and the player's prompt focuses it ("[E] Examine") and the Interact key runs it, exactly as an RSE interactable actor: - a Library Kind (D-150: a chest, a campfire, a lantern, a shrine...

NodeKindCategoryParametersReturnsDescription
Apply Settings (ApplySettings)functionRPG Saga|InteractionRe-applies the range and reach to the volume (live tuning).
Can Interact (Custom) (CanInteractCustom)overrideRPG Saga|InteractionInteractingPawn: APawn*boolExtra availability rule of a Blueprint subclass (the prompt shows only while it is true). Default: true.
Can Interact Now (CanInteractNow)pureRPG Saga|InteractionInteractingPawn: APawn*boolWhether a pawn may interact now.
Get Kind (GetKind)pureRPG Saga|InteractionURSEInteractableData*The library kind (null = none).
Get Kind State (GetKindState)pureRPG Saga|InteractionFRSEInteractableSaveStateThe kind's saved state now.
Get Prompt Text (GetPromptText)pureRPG Saga|InteractionFTextThe action shown in the prompt ("Open", "Talk"); the kind's prompt when it has one.
Get Visual (GetVisual)pureRPG Saga|InteractionERSEInteractableVisualThe kind's look now (Default, Active, Depleted).
Interact (Interact)functionRPG Saga|InteractionInteractingPawn: APawn*boolRuns it now, on this machine (what the Interact command applies on the authority). Returns false when it could not.
Is Interaction Enabled (IsInteractionEnabled)pureRPG Saga|InteractionboolIs Interaction Enabled
On Focus Changed (OnFocusChanged)eventRPG Saga|InteractionInteractable: URSEInteractableComponent*
Pawn: APawn*
bFocused: bool
A player's prompt moved onto (bFocused) or off this object: highlight it, play a sound.
On Interact (ReceiveInteract)overrideRPG Saga|InteractionInteractingPawn: APawn*
bSucceeded: bool
A custom action of a Blueprint subclass of the component: runs after the data.
On Interacted (OnInteracted)eventRPG Saga|InteractionInteractable: URSEInteractableComponent*
InteractingPawn: APawn*
bSucceeded: bool
Raised after every interaction (on an RSE interactable actor's own component: after the actor's, bSucceeded = it ran).
On Interaction Dialog Ended (OnInteractionDialogEnded)eventRPG Saga|InteractionInteractable: URSEInteractableComponent*The blocking dialog this interaction started has ended.
On Interaction Started (OnInteractionStarted)eventRPG Saga|InteractionInteractable: URSEInteractableComponent*
InteractingPawn: APawn*
Before the interaction runs (turn toward the player, stop walking).
On Kind Used (OnKindUsed)eventRPG Saga|InteractionInteractable: URSEInteractableComponent*
InteractingPawn: APawn*
Outcome: FRSEInteractableOutcome (ref)
The library kind was used on the authority (its outcome: lines, items, the look).
On No Response (OnNoResponse)eventRPG Saga|InteractionInteractable: URSEInteractableComponent*
InteractingPawn: APawn*
The interaction ran and nothing answered the player (no dialog, the conditions failed): say a line here.
On Visual Changed (OnVisualChanged)eventRPG Saga|InteractionInteractable: URSEInteractableComponent*
Visual: ERSEInteractableVisual
The kind's look changed (a lantern lit, a chest emptied): show it on your own meshes.
Request Interact (RequestInteract)functionRPG Saga|InteractionInteractingPawn: APawn*boolInteracts as the player of InteractingPawn through the command bus (D-138). Returns true when applied (or sent).
Set Interaction Enabled (SetInteractionEnabled)functionRPG Saga|InteractionbInEnabled: boolTurns the interaction on or off (off: no prompt, Interact does nothing).
Set Kind (SetKind)functionRPG Saga|InteractionInKind: URSEInteractableData*Sets the library kind (tools, Blueprint) and starts its state over.

URSEInteractionPromptViewModel

Module RSE. The interaction prompt (D-060): key cap + action ("[E] Talk") above the focused interactable (its prompt point) or at a screen point.

NodeKindCategoryParametersReturnsDescription
Compute Screen Position (ComputeScreenPosition)pureRPG Saga|UI|InteractionPromptSize: FVector2D
OutPosition: FVector2D (out)
boolWhere the prompt's bottom-center goes now, in viewport units, for a prompt of PromptSize. Returns true when it follows the object; false = the settings' screen anchor (OutPosition is that point).

URSEInteractionSubsystem

Module RSE. Routes the explorer's Interact to the interactable in focus and shows the prompt ("[E] Talk").

NodeKindCategoryParametersReturnsDescription
Get Focused (GetFocused)pureRPG Saga|InteractionARSEInteractableActor*The RSE interactable actor the prompt of this machine's primary player shows now, or none (see GetFocusedComponent).
Get Focused Actor For (GetFocusedActorFor)pureRPG Saga|InteractionPawn: APawn*AActor*The actor Pawn's prompt shows now (whatever its class), or none.
Get Focused Component (GetFocusedComponent)pureRPG Saga|InteractionURSEInteractableComponent*The interactable (any actor's RSE Interactable component) the primary player's prompt shows now, or none.
Get Focused Component For (GetFocusedComponentFor)pureRPG Saga|InteractionPawn: APawn*URSEInteractableComponent*The interactable (any actor's RSE Interactable component) Pawn's prompt shows now, or none.
Get Focused For (GetFocusedFor)pureRPG Saga|InteractionPawn: APawn*ARSEInteractableActor*The RSE interactable actor Pawn's prompt shows now, or none (see GetFocusedComponentFor).
Interact with Focused (InteractWithFocused)functionRPG Saga|InteractionboolInteracts with the primary player's focused interactable (the explorer's Interact calls the pawn's own). Returns true when it did.
Interact with Focused For (InteractWithFocusedFor)functionRPG Saga|InteractionPawn: APawn*boolInteracts with the object Pawn's prompt shows (its focus), without re-picking at the press: what the player read is what runs. Only when that object is gone or cannot be used any more is the focus re-evaluated first. Returns true when it was applied (or sent).
Is Interaction Allowed (IsInteractionAllowed)pureRPG Saga|InteractionboolInteraction is possible now for the primary player (exploration active, no dialog or scene, no modal screen open or just closed).

URSEInteriorCameraSubsystem

Module RSE. The exploration camera inside interiors (D-110): when the local player's explorer enters an Interior Volume, its spring arm, look limits, field of view and (with a fixed angle) the view direction blend to the volume's profile; leaving every volume blends back to what the camera was outside.

NodeKindCategoryParametersReturnsDescription
Get Active Volume (GetActiveVolume)pureRPG Saga|InteriorsARSEInteriorVolume*The interior whose profile the explorer camera uses now (null outside).
Is Blending (IsBlending)pureRPG Saga|InteriorsboolThe camera is still blending between two profiles.

URSEInteriorKitData

Module RSECore. A modular interior kit (D-164): pieces of one pack that fit together on a module grid.

NodeKindCategoryParametersReturnsDescription
Get Coverage (GetCoverage)pureRPG Saga|InteriorsFGameplayTagContainerWhich piece kinds the kit has (exact kinds).
Get Kind for Slot (GetKindForSlot)pureRPG Saga|InteriorsSlot: FGameplayTagFGameplayTagThe first piece kind of a plan slot this kit has (its Slot Kinds, else the built-in table); invalid when none.
Get Kit Id (GetKitId)pureRPG Saga|InteriorsFNameKitId, else the asset's name.
Has Kind (HasKind)pureRPG Saga|InteriorsKind: FGameplayTagboolWhether the kit has a piece of exactly Kind.
Pick Kit Piece (PickPieceBP)pureRPG Saga|InteriorsKind: FGameplayTag
Span: float
Seed: int32
OutPiece: FRSEKitPiece (out)
boolPickPiece for Blueprint: Returns false when nothing fits.

URSEInteriorTravelSubsystem

Module RSE. Separate interiors (D-150): the trip from a building entrance of mode Separate Interior into its interior and back.

NodeKindCategoryParametersReturnsDescription
Are Battles Blocked (AreBattlesBlocked)pureRPG Saga|BuildingsboolD-153: battles are refused now: the party is in a separate interior whose rules forbid them.
Is Busy (IsBusy)pureRPG Saga|BuildingsboolA blackout is running (the trip is half way).
Is Inside (IsInside)pureRPG Saga|BuildingsboolIs Inside

URSEInventoryPermissionPolicy

Module RSECore. Who may change what (co-op, D-094 / D-124): the host can let guests manage the shared stash and their own characters, or more.

NodeKindCategoryParametersReturnsDescription
Can Change Equipment (CanChangeEquipment)overrideRPG Saga|Items|PermissionsIssuer: FRSEInventoryIssuer (ref)
Character: URSECharacterData*
boolWhether Issuer may change Character's equipment. Default: yes (guests' fixed equipment stays locked by its data, D-011).
Can Issue (CanIssue)overrideRPG Saga|Items|PermissionsIssuer: FRSEInventoryIssuer (ref)
Command: FRSEInventoryCommand (ref)
boolWhether Issuer may send Command at all. Default: yes.
Can Issue Party Command (CanIssuePartyCommand)overrideRPG Saga|Items|PermissionsIssuer: FRSEInventoryIssuer (ref)
Command: FInstancedStruct (ref)
boolWhether Issuer may send a party command (D-137): Command is the payload (Equip Item, Bind Pact, Buy Item, Set Formation...; inventory commands also pass Can Issue). The bus' own permission (host-only story commands) is checked first. Default: yes.
Can Use Container (CanUseContainer)overrideRPG Saga|Items|PermissionsIssuer: FRSEInventoryIssuer (ref)
Container: FRSEContainerRef (ref)
bTakeOut: bool
boolD-143: whether Issuer may take items out of (bTakeOut) or put items into Container (a member's bag, the stash, the pending loot): moves, transfers, Give to..., use and discard. Co-op: a host may keep guests out of the members other players lead. Default: yes.

URSEInventorySubsystem

Module RSECore. Inventory commands (D-123) on the command bus (D-137): every move, equip, unequip, use, sort or discard from an inventory screen is a FRSEInventoryCommand, a party command.

NodeKindCategoryParametersReturnsDescription
Can Change Equipment (CanChangeEquipment)pureRPG Saga|Items|CommandsIssuer: FRSEInventoryIssuer (ref)
Character: URSECharacterData*
boolWhether Issuer may change Character's equipment (permission policy and the character's own lock).
Is Allowed (IsAllowed)pureRPG Saga|Items|CommandsCommand: FRSEInventoryCommand (ref)
Issuer: FRSEInventoryIssuer (ref)
boolWhether Issuer may send Command (permission policy only; the command may still fail its own rules).
On Command Applied (OnCommandApplied)eventRPG Saga|Items|CommandsCommand: FRSEInventoryCommand (ref)
Outcome: FRSEInventoryCommandOutcome (ref)
A command was applied successfully (on the host or in single player), or refused when sent from this subsystem.
Set Policy (SetPolicy)functionRPG Saga|Items|CommandsInPolicy: URSEInventoryPermissionPolicy*Replaces the policy at run time (D-137): the host's session rules (co-op: what guests may change), tests. Null = back to Items -> Permission Policy Class. Only the authority's policy decides (commands are validated there).
Submit Command (SubmitCommand)functionRPG Saga|Items|CommandsCommand: FRSEInventoryCommand (ref)
Issuer: FRSEInventoryIssuer (ref)
FRSEInventoryCommandOutcomeSends Command through the command bus (D-137) and returns its outcome. Issuer: this machine's player, or (with authority: the host, tools, tests) another player whose command it is; the bus decides who the sender really is. On a guest the outcome is Pending and OnCommandApplied follows on the host.

URSEInventoryViewModel

Module RSE. The grid inventory presenter (D-123): data and commands of an inventory screen, for any screen style (our grid page, a Widget Blueprint, later a chest or a shop).

NodeKindCategoryParametersReturnsDescription
Activate Item (ActivateItem)functionRPG Saga|UI|InventoryItem: URSEItemData*boolDouble-click / right-click: equip equipment, use consumables, read documents, use key items on the object in front.
Auto Distribute (AutoDistribute)functionRPG Saga|UI|InventoryboolDeals every bag again by the Smart rule (and the open stash's upgrades): one command.
Can Equip in Slot (CanEquipInSlot)pureRPG Saga|UI|InventoryItem: URSEItemData*
SlotId: FName
boolWhether the selected character can wear Item in SlotId now (drop highlights).
Can Give To (CanGiveTo)pureRPG Saga|UI|InventoryItem: URSEItemData*
MemberIndex: int32
boolWhether member Index's bag can take Item now (drop highlights on the party strip).
Can Place At (CanPlaceAt)pureRPG Saga|UI|InventoryItem: URSEItemData*
Cell: FIntPoint
boolWhether Item (of the current tab) fits at Cell, ignoring its own place (drop highlights). Items not on the grid count as new.
Combine Items (CombineItems)functionRPG Saga|UI|InventoryFirst: URSEItemData*
Second: URSEItemData*
boolCombines two key items (through the party menu, D-039).
Discard Item (DiscardItem)functionRPG Saga|UI|InventoryItem: URSEItemData*boolThrows one Item away (Items -> Allow Discard).
Equip Item (EquipItem)functionRPG Saga|UI|InventoryItem: URSEItemData*
SlotId: FName
ReturnCell: FIntPoint
boolThe selected character equips Item in SlotId (None = automatic); what comes off lands at ReturnCell when free.
Get Actions (GetActions)pureRPG Saga|UI|InventoryItem: URSEItemData*
FromSlot: FName
TArray<FRSEMenuEntryView>Actions for a piece of the grid (FromSlot None) or a worn item (FromSlot set): Equip, Use, Read, Use on..., Combine, Move, Unequip, Discard, Cancel.
Get Current Container (GetCurrentContainer)pureRPG Saga|UI|InventoryFRSEContainerRefThe container of the current tab.
Get Issuer (GetIssuer)pureRPG Saga|UI|InventoryFRSEInventoryIssuerWho this screen acts for (its local player; host in single player).
Get Selected Character (GetSelectedCharacter)pureRPG Saga|UI|InventoryURSECharacterData*Get Selected Character
Get Selected Equipment (GetSelectedEquipment)pureRPG Saga|UI|InventoryFRSECharacterEquipmentWhat the selected character wears now (the paperdoll's live preview shows it, D-126).
Get Stat Preview (GetStatPreview)pureRPG Saga|UI|InventoryItem: URSEItemData*
SlotId: FName
TArray<FRSEStatChangeView>The selected character's stats with Item in SlotId (None = its automatic slot); Item null = SlotId emptied.
Get Tooltip (GetTooltip)pureRPG Saga|UI|InventoryItem: URSEItemData*FRSEItemTooltipViewTooltip of Item, compared with the selected character's equipment.
Give Item To (GiveItemTo)functionRPG Saga|UI|InventoryItem: URSEItemData*
MemberIndex: int32
boolGives Item (the whole stack) from the current container to member Index's bag (Give to..., a drop on a portrait).
Move Item (MoveItem)functionRPG Saga|UI|InventoryItem: URSEItemData*
Cell: FIntPoint
boolMoves Item to Cell of the current tab (swaps with a single piece in the way).
Refresh (Refresh)functionRPG Saga|UI|InventoryRebuilds every list from the game.
Select Member (SelectMember)functionRPG Saga|UI|InventoryIndex: int32Select Member
Select Tab (SelectTab)functionRPG Saga|UI|InventoryIndex: int32Select Tab
Send to Stash (SendToStash)functionRPG Saga|UI|InventoryItem: URSEItemData*boolMoves Item (the whole stack) from the current bag into the stash (only where the stash opens).
Set Message (SetMessage)functionRPG Saga|UI|InventoryInMessage: FText (ref)Sets Message (and the host menu's message).
Sort Tab (SortTab)functionRPG Saga|UI|InventoryboolRe-packs the current tab.
Submit (Submit)functionRPG Saga|UI|InventoryCommand: FRSEInventoryCommand (ref)FRSEInventoryCommandOutcomeThe single dispatch point: sends Command for this view-model's player and refreshes.
Take Item (TakeItem)functionRPG Saga|UI|InventoryItem: URSEItemData*boolTakes Item (the whole stack) from the stash or the pending loot into the selected member's bag.
Unequip Slot (UnequipSlot)functionRPG Saga|UI|InventorySlotId: FName
Cell: FIntPoint
boolThe selected character's SlotId goes back to the inventory, at Cell when free ((-1, -1) = anywhere).
Use Item (UseItem)functionRPG Saga|UI|InventoryItem: URSEItemData*boolUses a consumable on the selected character (or the whole party when the item allows only that). Save items open the save screen.
Use Key Item on Target (UseKeyItemOnTarget)functionRPG Saga|UI|InventoryItem: URSEItemData*boolUses a key item on the object the player stands at (through the party menu, D-039).

URSEKeyPromptProvider

Module RSE. RSE Key Prompt Provider

NodeKindCategoryParametersReturnsDescription
Get Key Prompt Icon (GetKeyPromptIcon)overrideRPG Saga|Input|PromptsKeys: TArray<FKey> (ref)
Device: ERSEInputDevice
OutIcon: FRSEKeyPromptIcon (out)
boolAn icon for Keys (one key, or a set shown as one prompt: the D-pad's up / down) on Device. Returns false to show the text key cap. Default: no icon.
Get Key Prompt Label (GetKeyPromptLabel)overrideRPG Saga|Input|PromptsKey: FKey (ref)
LabelStyle: ERSEGamepadLabelStyle
FTextShort label of Key in the gamepad label set LabelStyle (Xbox, PlayStation, Steam Deck). Default: UI Theme -> Key Prompts.

URSELeashPolicy

Module RSE. The co-op leash rules (D-094, D-142): who is leashed, to what, how far, and when it applies.

NodeKindCategoryParametersReturnsDescription
Applies Now (AppliesNow)overrideRPG Saga|Co-op|LeashWorldContext: UObject*boolWhether the leash applies now in WorldContext's world. Default: not during scenes, dialogs, battles, travels.
Get Anchor (GetAnchor)overrideRPG Saga|Co-op|LeashAnchor: ERSELeashAnchor
HostLocation: FVector
bHasHost: bool
PlayerLocations: TArray<FVector> (ref)
FVectorThe anchor point. HostLocation: the host's explorer (when it has one); PlayerLocations: every player's explorer.
Is Leashed (IsLeashed)overrideRPG Saga|Co-op|LeashPlayer: FRSEPlayerId
Anchor: ERSELeashAnchor
boolWhether Player is tied to the anchor. Default: the guests (Host anchor), everyone (Group Center).

URSELeashSubsystem

Module RSE. Keeps the co-op group together (D-094 leash, D-142): on the authority, every Leash Check Interval it measures each leashed player's explorer against the anchor; past the radius the player gets a warning notice (on their machine), and after the grace seconds is brought back beside the anchor.

NodeKindCategoryParametersReturnsDescription
Get Effective Radius (GetEffectiveRadius)pureRPG Saga|Co-op|LeashfloatThe radius on this map (its Co-op Map Settings, else Co-op Flow), or 0 when the leash is off here.

URSELobbyViewModel

Module RSEOnline. The lobby screen's data and actions (D-135): host / find / join / leave / invite, the found sessions, the players and the local character choice.

NodeKindCategoryParametersReturnsDescription
Cycle Character (CycleCharacter)functionRPG Saga|Online|LobbyDirection: int32Picks the previous (-1) or next (+1) selectable character.
Find (Find)functionRPG Saga|Online|LobbySearches for sessions.
Host (Host)functionRPG Saga|Online|LobbyHosts a session with the project's online settings.
Invite (Invite)functionRPG Saga|Online|LobbyOpens the online service's invite overlay.
Join (Join)functionRPG Saga|Online|LobbyResultIndex: int32Joins the session of a row (its Result Index).
Leave (Leave)functionRPG Saga|Online|LobbyLeaves or ends the session.
Select Session (SelectSession)functionRPG Saga|Online|LobbyRowIndex: int32Highlights a session row (mouse hover).

URSELocalPlayerUISubsystem

Module RSE. One local player's UI context (D-134, docs/design/networking.md §3.8): its modal screen stack, whether its world actions are blocked, its HUD groups and the focus of its screens.

NodeKindCategoryParametersReturnsDescription
Close Party Menu (ClosePartyMenu)functionRPG Saga|UI|HostCloses the party menu when it is open.
Close Screen (CloseScreen)functionRPG Saga|UI|ScreensScreen: UObject*Close Screen
Focus Top Screen (FocusTopScreen)pureRPG Saga|UI|ScreensboolGives the focus back to this player's top screen. Returns false when there is none.
Get Fallback UIHost (GetFallbackUIHost)pureRPG Saga|UI|HostUObject*The host set with Set Fallback UI Host, or null.
Get Local Player UI (GetFor)pure, staticRPG Saga|UI|ScreensPlayer: UObject*URSELocalPlayerUISubsystem*The UI context of the local player behind Player (a controller, pawn, widget or local player), or null.
Get Party Menu (GetPartyMenu)functionRPG Saga|UI|HostbCreate: bool = trueURSEPartyMenuViewModel*This player's party menu (made by a standalone host when the player has no UI host and bCreate).
Get Player Controller (GetPlayerController)pureRPG Saga|UI|ScreensAPlayerController*This player's controller in the current world.
Get Screen Presenter (GetScreenPresenter)pureRPG Saga|UI|HostUObject*Get Screen Presenter
Get Top Focusable Screen (GetTopFocusableScreen)pureRPG Saga|UI|ScreensUUserWidget*This player's top focusable screen, or null.
Get UIHost (GetUIHost)functionRPG Saga|UI|HostbCreate: bool = trueUObject*This player's UI host: the one set with Set UI Host, else the player's HUD when it implements IRSEUIHost, else (bCreate) a standalone host made now. Null without a player controller (or without one and !bCreate).
Is Any Screen Open (IsAnyScreenOpen)pureRPG Saga|UI|ScreensboolThis player has a screen open (its own or a shared one).
Is Game Input Blocked (IsGameInputBlocked)pureRPG Saga|UI|ScreensboolThis player's world actions must be ignored now (a screen is open or has just closed).
Is HUDGroup Hidden (IsHUDGroupHidden)pureRPG Saga|UI|ScreensGroup: ERSEHUDGroupboolOne of this player's screens hides Group.
On Screens Changed (OnScreensChanged)eventRPG Saga|UI|ScreensbAnyScreenOpen: boolOne of this player's screens opened or closed (bAnyScreenOpen: for this player).
Open Growth (OpenGrowth)function, staticRPG Saga|UI|HostPlayer: APlayerController*boolOpens Player's progression (the party menu's Growth page), with any HUD class.
Open Inventory (OpenInventory)function, staticRPG Saga|UI|HostPlayer: APlayerController*boolOpens Player's inventory (the party menu's Items page), with any HUD class.
Open Party Menu (Player) (OpenPartyMenu)function, staticRPG Saga|UI|HostPlayer: APlayerController*
Page: ERSEPartyMenuPage
boolOpens Player's party menu on Page, with any HUD class.
Open Party Menu Page (OpenPartyMenuPage)functionRPG Saga|UI|HostPage: ERSEPartyMenuPageboolOpens the party menu on Page (or moves it there). Returns false when it cannot open or the page is not offered.
Open Screen (OpenScreen)functionRPG Saga|UI|ScreensScreen: UObject*
Options: FRSEModalScreenOptions (ref)
Opens Screen on this player's stack (see URSEModalScreenSubsystem::OpenScreenFor).
Set Fallback UIHost (SetFallbackUIHost)functionRPG Saga|UI|HostHost: UObject*D-176: the host used when the player has no explicit host and its HUD is not one (before the standalone host), e.g. the Common UI host (RSECommonUI module). An object implementing IRSEUIHost; null = none.
Set Screen Presenter (SetScreenPresenter)functionRPG Saga|UI|HostPresenter: UObject*D-176: what puts this player's screens on screen (an object implementing IRSEScreenPresenter, e.g. the Common UI host's layer stacks in the RSECommonUI module). Null = the viewport (the screens add themselves).
Set UIHost (SetUIHost)functionRPG Saga|UI|HostHost: UObject*Uses Host (an object implementing IRSEUIHost: a HUD, a controller, a manager) for this player's screens. Null = automatic.

URSELockpickViewModel

Module RSE. The lockpick screen's data and actions (D-109, D-052): a Widget Blueprint may replace the built-in screen.

NodeKindCategoryParametersReturnsDescription
Get Marker (GetMarker)pureRPG Saga|Exploration RPGfloatThe marker's place on the bar (0..1).
Give Up (GiveUp)functionRPG Saga|Exploration RPGGives up (Back): counts as a failure without breaking anything.
Press (Press)functionRPG Saga|Exploration RPGERSELockpickStepThe press (Confirm, a click): sets the pin or counts a miss.

URSELootDistributionRule

Module RSECore. Who receives an item the party gained in the Per Character mode (D-143): chests, battle rewards (boss loot included), quest rewards, shop purchases, pick-ups, the Auto-distribute button.

NodeKindCategoryParametersReturnsDescription
Rank Targets (RankTargets)overrideRPG Saga|Items|LootState: FRSEPartyState (ref)
Query: FRSELootQuery (ref)
OutTargets: TArray<FRSELootTarget> (out)
Ranks where Query's items should go, best first. Default: the members in party order.

URSEMainMenuViewModel

Module RSE. The title screen and main menu (D-026): the game title, an optional "press any key" state and the [Continue] / New Game / Load / Options / Quit entries (Continue and Load depend on the saves, D-010).

NodeKindCategoryParametersReturnsDescription
Back to Title (BackToTitle)functionRPG Saga|UI|MainMenuBack to the title state (when the settings show one).
Choose (Choose)functionRPG Saga|UI|MainMenuChooses the selected entry.
Choose Entry (ChooseEntry)functionRPG Saga|UI|MainMenuIndex: int32Selects an entry and chooses it (a click).
Move Selection (MoveSelection)functionRPG Saga|UI|MainMenuDirection: int32Move Selection
On Fade Changed (OnFadeChanged)eventRPG Saga|UI|MainMenuOpacity: floatThe fade overlay's opacity changed (every frame while a fade runs).
Press Any Key (PressAnyKey)functionRPG Saga|UI|MainMenuLeaves the title state.
Press Any Key From (PressAnyKeyFrom)functionRPG Saga|UI|MainMenuDevice: FInputDeviceIdD-170, "press start": leaves the title state and makes the user of Device the primary user (whose saves are used; Platform -> Select User On Press Start). An invalid device keeps the current user.
Refresh Entries (RefreshEntries)functionRPG Saga|UI|MainMenuRebuilds the entries from the saves (Continue, Load), keeping the cursor on the same action.
Select (Select)functionRPG Saga|UI|MainMenuIndex: int32Select
Set Message (SetMessage)functionRPG Saga|UI|MainMenuInMessage: FText (ref)Set Message

URSEMapBadge

Module RSE. One marker badge (shape, color, glyph) as the maps draw it (D-092): the legend's rows use it.

NodeKindCategoryParametersReturnsDescription
Set Badge (SetBadge)functionRPG Saga|MapInShape: ERSEMapMarkerShape
InColor: FLinearColor
InGlyph: FText (ref)
InOpacity: float = 1.000000
Sets what the badge shows.

URSEMapData

Module RSECore. The area map of one level (D-089): the top-down picture Generate Map made, where it lies in the world, and what the designers added by hand (name, regions, markers, hidden categories).

NodeKindCategoryParametersReturnsDescription
Get Map Id (GetMapId)pureRPG Saga|MapFNameThe id saves use for this map's fog and pins.

URSEMapMarkerComponent

Module RSE, display name RSE Map Marker. Puts its actor on the area map and the minimap (D-089).

NodeKindCategoryParametersReturnsDescription
Set Category (SetCategory)functionRPG Saga|MapInCategory: FGameplayTagSet Category
Set Show Marker (SetShowMarker)functionRPG Saga|MapbShow: boolSet Show Marker

URSEMapMarkerSource

Module RSE. RSEMap Marker Source

NodeKindCategoryParametersReturnsDescription
Should Show Map Marker (ShouldShowMapMarker)overrideRPG Saga|MapboolWhether this actor's marker shows now.

URSEMapStyle

Module RSECore. The look of a generated area map (D-089): what Generate Map does to the top-down picture of the level.

NodeKindCategoryParametersReturnsDescription
Apply Preset (ApplyPreset)functionPresetSets every look parameter below to the values of Preset (materials and pictures are kept).

URSEMapSubsystem

Module RSECore. The saved state of the area maps (D-089): explored areas (fog of war) and player pins, by map id.

NodeKindCategoryParametersReturnsDescription
Add Pin (AddPin)functionRPG Saga|MapMapId: FName
WorldLocation: FVector2D
MaxPins: int32 = 0
Type: FGameplayTag = ()
bReplaceOldest: bool = false
int32Adds a pin of Type at a world X / Y. MaxPins 0 = no limit. When the map has MaxPins pins already, bReplaceOldest removes the oldest one to make room, else the pin is refused. Returns the pin id (0 = refused, or sent to the host by a co-op guest: the pin then arrives with the Map section). The sender is the pin's owner.
Get Explored Fraction (GetExploredFraction)pureRPG Saga|MapMapId: FNamefloatShare of the map explored (0..1).
Get Pins (GetPins)pureRPG Saga|MapMapId: FNameTArray<FRSEMapPin>The pins of a map.
Is Revealed (IsRevealed)pureRPG Saga|MapMapId: FName
UV: FVector2D
boolThe point of the map was explored (false while the map has no fog mask yet).
Move Pin (MovePin)functionRPG Saga|MapPinId: int32
WorldLocation: FVector2D
boolMoves a pin to a world X / Y.
On Changed (OnChanged)eventRPG Saga|MapMapId: FNameFires after the fog or the pins of a map changed.
Remove Pin (RemovePin)functionRPG Saga|MapPinId: int32boolRemove Pin
Reset Fog (ResetFog)functionRPG Saga|MapMapId: FNameForgets what was explored on a map (a command: host only in co-op).
Reveal At (RevealAt)functionRPG Saga|MapMapId: FName
UV: FVector2D
RadiusUV: float
FogSize: int32
boolReveals the map around UV (map coordinates 0..1) within RadiusUV; the mask is made at FogSize cells per side on first use. Returns true when new cells were revealed (OnChanged fires).
Set Pin Type (SetPinType)functionRPG Saga|MapPinId: int32
Type: FGameplayTag
boolChanges a pin's type. Returns false when there is no such pin.

URSEMapView

Module RSE. Draws an area map (D-089): the map picture, fog of war, region names, markers and the player arrow, for any view (center, zoom, rotation), round or square.

NodeKindCategoryParametersReturnsDescription
Local to Map (LocalToMap)pureRPG Saga|MapLocal: FVector2DFVector2DMap coordinates under a point of this widget (local pixels).
Show View Model (ShowViewModel)functionRPG Saga|MapViewModel: URSEMapViewModel*Shows a minimap view-model (its zoom, shape and rotation) or an area map view-model (its view).

URSEMapViewModel

Module RSE. What the map screens show (D-089): the map picture and fog, the player, the markers and the tracked objective.

NodeKindCategoryParametersReturnsDescription
Has Map (HasMap)pureRPG Saga|MapboolA map is loaded for this level.

URSEMapWorldSubsystem

Module RSE. The area map and minimap of a game world (D-089).

NodeKindCategoryParametersReturnsDescription
Can Open Area Map (CanOpenAreaMap)pureRPG Saga|MapboolD-148: the level has a map and the area map may open now (no battle, no scene hiding the maps).
Can Show Quest on Map (CanShowQuestOnMap)pureRPG Saga|MapQuest: URSEQuestData*boolThe quest has an objective with a place this level can show (on it, or the exit toward it).
Close Area Map (CloseAreaMap)functionRPG Saga|MapCloses the area map (the screen, or the party menu shown on its Map tab).
Cycle Minimap Zoom (CycleMinimapZoom)functionRPG Saga|MapNext minimap zoom level.
Get Map Data (GetMapData)pureRPG Saga|MapURSEMapData*The level's map (null while loading or when the level has none).
Get Markers (GetMarkers)pureRPG Saga|MapTArray<FRSEMapMarkerView>Every marker of the world now (filters of the map data and fog applied, player filters not).
Get Objective Location (GetObjectiveLocation)pureRPG Saga|MapOutText: FText (out)
OutLocation: FVector (out)
boolThe tracked quest's current objective with a map target: its text and world location (or the exit toward its level).
Is Area Map Open (IsAreaMapOpen)pureRPG Saga|MapboolThe area map shows now (its screen, or the party menu on the Map tab).
Is Fog Enabled (IsFogEnabled)pureRPG Saga|MapboolFog of war is on for the current map.
Is Minimap Shown (IsMinimapShown)pureRPG Saga|MapboolThe minimap is on screen now (the level has a map, no battle, cutscene or option hides it).
Open Area Map (OpenAreaMap)functionRPG Saga|MapController: APlayerController*boolOpens the area map for Controller. D-148: on the party menu's Map tab (Map & Minimap -> Area Map In Party Menu); the area map screen alone when that is off or the player has no built-in party menu. Returns false when there is no map or it cannot open now.
Open Area Map at Quest (OpenAreaMapAtQuest)functionRPG Saga|MapController: APlayerController*
Quest: URSEQuestData*
boolOpens the area map centered on a quest's objective (journal "Show on map").
Open Journal At (OpenJournalAt)functionRPG Saga|MapController: APlayerController*
Quest: URSEQuestData*
boolCloses the area map and opens the party menu's journal on Quest.
Set Map (SetMap)functionRPG Saga|MapMap: URSEMapData*Uses Map for this world (normally found by level); the texture is loaded if needed. Tests pass a map without a picture.
Set Minimap Info (SetMinimapInfo)functionRPG Saga|MapSource: FName
Text: FText
Extension point of the minimap (D-104): a line shown under it, by source (the clock uses "Clock"; a quest timer, a region's danger level...). Lines show in source name order; an empty Text removes the source's line.
Set Minimap Suppressed (SetMinimapSuppressed)functionRPG Saga|MapReason: FName
bSuppressed: bool
Hides the minimap while any reason is set (cutscenes use "Scene"). Battles and modal screens are handled automatically.

URSEMenuExtension

Module RSE. One entry a module or a project adds to the framework's menus without touching them (D-142; RSEOnline adds Host Game, Join Game and Invite this way).

NodeKindCategoryParametersReturnsDescription
Execute (Execute)overrideRPG Saga|UI|Menu ExtensionPlayer: APlayerController*ERSEMenuFollowUpThe entry was chosen. Returns what the menu does next.
Is Enabled (IsEnabled)overrideRPG Saga|UI|Menu ExtensionPlayer: APlayerController*
OutReason: FText (out)
boolWhether the entry can be chosen now (OutReason: shown beside a disabled entry). Default: yes.
Is Visible (IsVisible)overrideRPG Saga|UI|Menu ExtensionPlayer: APlayerController*boolWhether the entry shows now for Player (null on a title screen without a player). Default: yes.

URSEMenuExtensionSubsystem

Module RSE. The menus' extension entries (D-142, an extension point of RSE's front end and in-game menu).

NodeKindCategoryParametersReturnsDescription
Register (Register)functionRPG Saga|UI|Menu ExtensionExtension: URSEMenuExtension*Adds Extension (replaces one with the same Id).
Unregister (Unregister)functionRPG Saga|UI|Menu ExtensionId: FNameUnregister

URSEMinimapViewModel

Module RSE. The HUD minimap (D-089): zoom levels, shape and rotation from Map & Minimap settings.

NodeKindCategoryParametersReturnsDescription
Cycle Zoom (CycleZoom)functionRPG Saga|MapNext zoom level (wraps).
Get View Rotation (GetViewRotation)pureRPG Saga|MapfloatMap angle drawn up: the player's heading, the camera's, or 0 = north (Rotation Mode).
Get View Span (GetViewSpan)pureRPG Saga|MapfloatVisible map width in map units (1 = the whole map).

URSEModalScreenSubsystem

Module RSE. Knows which modal screens (menus, dialogs, shops, card table, results...) are open, so the always-on HUD never shows through them (docs/design/ui-theme.md, "Ecrane modale").

NodeKindCategoryParametersReturnsDescription
Close Screen (CloseScreen)functionRPG Saga|UI|ScreensScreen: UObject*Close Screen
Is Any Screen Open (IsAnyScreenOpen)pureRPG Saga|UI|ScreensboolAny player has a screen open.
Is Any Screen Open For (IsAnyScreenOpenFor)pureRPG Saga|UI|ScreensPlayer: UObject*boolPlayer (a controller, local player, pawn or widget) has a screen open (its own or a shared one).
Is Game Input Blocked (IsGameInputBlocked)pureRPG Saga|UI|ScreensboolWorld actions (Interact, the menu key) must be ignored now: a screen is open or has just closed (any player).
Is Game Input Blocked For (IsGameInputBlockedFor)pureRPG Saga|UI|ScreensPlayer: UObject*boolPlayer's world actions must be ignored now: one of its screens (or a shared one) is open or has just closed.
Is HUDGroup Hidden (IsHUDGroupHidden)pureRPG Saga|UI|ScreensGroup: ERSEHUDGroupboolAn open screen hides Group (for any player).
Is HUDGroup Hidden For (IsHUDGroupHiddenFor)pureRPG Saga|UI|ScreensGroup: ERSEHUDGroup
Player: UObject*
boolAn open screen of Player hides Group.
Is Input Guarded (IsInputGuarded)pureRPG Saga|UI|ScreensboolA screen closed moments ago (URSEUISettings::ScreenCloseInputGuard), for any player.
Is Input Guarded For (IsInputGuardedFor)pureRPG Saga|UI|ScreensPlayer: UObject*boolIs Input Guarded For
Is Quest Tracker Hidden (IsQuestTrackerHidden)pureRPG Saga|UI|ScreensboolIs Quest Tracker Hidden
Is Quest Tracker Hidden For (IsQuestTrackerHiddenFor)pureRPG Saga|UI|ScreensPlayer: UObject*boolIs Quest Tracker Hidden For
Is Screen Open (IsScreenOpen)pureRPG Saga|UI|ScreensScreen: UObject*boolIs Screen Open
On Screens Changed (OnScreensChanged)eventRPG Saga|UI|ScreensbAnyScreenOpen: boolA screen opened or closed (closing is reported on the next tick, so a screen that opens another does not flicker the HUD).
Open Screen (OpenScreen)functionRPG Saga|UI|ScreensScreen: UObject*
Options: FRSEModalScreenOptions (ref)
Registers Screen as open (again: updates its options) on its owning player's stack.
Open Screen For (OpenScreenFor)functionRPG Saga|UI|ScreensScreen: UObject*
Options: FRSEModalScreenOptions (ref)
Player: UObject*
Registers Screen as open on Player's stack (a controller, local player, pawn or widget of that player); a Player that resolves to no local player puts it on the shared stack (it blocks every player).
Validate Screens (ValidateScreens)functionRPG Saga|UI|Screensint32D-152, the safety net: forgets the registered screens that are not on screen any more (GetLiveness), e.g. a screen widget embedded in a menu that was hidden, or removed from the viewport without closing. Runs by itself when a screen opens or closes and before the first query of each frame; a forgotten screen logs a warning and the HUD comes back. Returns how many screens were forgotten.

URSENPCActivityBehavior

Module RSECore, display name NPC Activity Behavior. A scripted activity (D-173, docs/product/living-npcs.md "Activity behaviours"): what a living NPC does while it stays at its place, beyond an animation.

NodeKindCategoryParametersReturnsDescription
Begin (Begin)overrideRPG Saga|NPCNPC: AActor*
Activity: FRSENPCActivity (ref)
The NPC starts the activity (it arrived at its place). NPC is its actor; get its Living NPC component for walking and animations.
Can Interrupt (CanInterrupt)overrideRPG Saga|NPCNPC: AActor*
Reason: ERSENPCInterruptReason
boolMay the NPC stop now? False = it finishes first (the schedule's change waits; the player's talk waits). Danger is never refused.
End (End)overrideRPG Saga|NPCNPC: AActor*
bInterrupted: bool
The activity ends (a new one starts, a conversation, danger, the NPC sleeps). bInterrupted: it was cut short. Clean up here.
Get Activity (GetActivity)pureRPG Saga|NPCFRSENPCActivityThe activity it runs for (valid between Begin and End).
Get NPC (GetNPC)pureRPG Saga|NPCAActor*The NPC doing it (valid between Begin and End).
Get Run Seconds (GetRunSeconds)pureRPG Saga|NPCfloatSeconds this activity has run (since Begin).
Tick (Tick)overrideRPG Saga|NPCNPC: AActor*
DeltaSeconds: float
Every Tick Interval while the NPC does the activity. DeltaSeconds: since the last call.

URSENPCBehaviorComponent

Module RSE, display name Living NPC. A living NPC (D-104, docs/product/living-npcs.md): put it on an RSE NPC (it has one already) or on any actor or pawn.

NodeKindCategoryParametersReturnsDescription
Begin Talk (BeginTalk)functionRPG Saga|NPCPawn: APawn*Starts a conversation: stops walking and its activity, faces Pawn.
Clear Danger (ClearDanger)functionRPG Saga|NPCThe danger is over: a reacting NPC returns to its schedule after its Return Delay.
End Chat (EndChat)functionRPG Saga|NPCEnds the talk with its partner (both go back to what they did).
End Talk (EndTalk)functionRPG Saga|NPCDelayOverride: float = -1.000000The conversation ended: it goes on after the settings' Resume Delay (DelayOverride >= 0: after that many seconds).
Face Location (FaceLocation)functionRPG Saga|NPCLocation: FVector
bInstant: bool = false
Turns toward a point of the world.
Face Yaw (FaceYaw)functionRPG Saga|NPCYaw: float
bInstant: bool = false
Turns toward a yaw (degrees); bInstant skips the turn.
Get Activity Behavior (GetActivityBehavior)pureRPG Saga|NPCURSENPCActivityBehavior*The scripted activity running now (null = none).
Get Activity Location (GetActivityLocation)pureRPG Saga|NPCOutLocation: FVector (out)
OutRotation: FRotator (out)
boolWhere its current activity happens.
Get Battle Response (GetBattleResponse)pureRPG Saga|NPCERSENPCBattleResponseThe response it chose for the running battle (Ignore when it does not react).
Get Behavior State (GetBehaviorState)pureRPG Saga|NPCERSENPCBehaviorStateGet Behavior State
Get Chat Partner (GetChatPartner)pureRPG Saga|NPCURSENPCBehaviorComponent*Get Chat Partner
Get Crime Phase (GetCrimePhase)pureRPG Saga|NPCERSENPCCrimePhaseThe phase of its crime response (None when it answers nothing).
Get Current Activity (GetCurrentActivity)pureRPG Saga|NPCFRSENPCActivityWhat it does now (its schedule's activity; it may still be walking there).
Get NPCId (GetNPCId)pureRPG Saga|NPCFNameThe id the story knows it by.
Get Place Location (GetPlaceLocation)pureRPG Saga|NPCPlaceId: FName
OutLocation: FVector (out)
OutRotation: FRotator (out)
boolWhere a place is (an NPC Place actor with this id, or any actor tagged with it). Returns false when the level has none.
Is Available (IsAvailable)pureRPG Saga|NPCboolIt is in the level and may be talked to (not away, its activity is interactable).
Is in Idle Action (IsInIdleAction)pureRPG Saga|NPCboolIt does an idle action of its idle life now (a gesture, a stroll, a seat on a bench).
Is Reacting (IsReacting)pureRPG Saga|NPCboolIt reacts to a battle now (fleeing, watching, cowering, helping) or waits to.
Is Walking (IsWalking)pureRPG Saga|NPCboolIt is walking now.
Notify Danger (NotifyDanger)functionRPG Saga|NPCLocation: FVector
Radius: float = 0.000000
A battle began at Location, Radius wide (the area it needs): the NPC decides by its reaction (distance, response) and reacts after its delay. The NPC world subsystem calls it for every NPC when an encounter starts on the live map (and when an NPC wakes during one); levels and Blueprints may call it for their own dangers. Authority only.
On Activity Changed (OnActivityChanged)eventRPG Saga|NPCComponent: URSENPCBehaviorComponent*
Activity: FGameplayTag
The activity changed (the hour, the weather, the story); it may still be walking there.
On Chat (OnChat)eventRPG Saga|NPCComponent: URSENPCBehaviorComponent*
Partner: URSENPCBehaviorComponent*
bStarted: bool
It started or ended a talk with another NPC.
On Crime Response (OnCrimeResponse)eventRPG Saga|NPCComponent: URSENPCBehaviorComponent*
Crime: FGameplayTag
Phase: ERSENPCCrimePhase
A guard's answer to a crime changed phase (warning, chasing, caught, over).
On Idle Custom (OnIdleCustom)eventRPG Saga|NPCComponent: URSENPCBehaviorComponent*
CustomTag: FGameplayTag
An idle behaviour of kind Custom was chosen: play it (Blueprint).
On Reaction (OnReaction)eventRPG Saga|NPCComponent: URSENPCBehaviorComponent*
Response: ERSENPCBattleResponse
bStarted: bool
It began reacting to a battle (Started), or went back to its day.
Play Activity Anim (PlayActivityAnim)functionRPG Saga|NPCAnimActivity: FGameplayTag (ref)Plays the animation of an activity tag (Project Settings -> Living NPCs -> Activity Animations / Idle Slots) while it stands.
Refresh Schedule (RefreshSchedule)functionRPG Saga|NPCbSnap: bool = falseLooks at the schedule again (the clock or the story changed). bSnap: appear at the new place at once (skips, loads).
Report Crime (ReportCrime)functionRPG Saga|NPCCrime: FRSENPCCrime (ref)boolA crime happened: a guard (its reaction has Crime rules) that sees or hears it answers: warns, chases, runs the rule's effects. Returns true when it noticed the crime and answers. Authority only.
Stop Activity Anim (StopActivityAnim)functionRPG Saga|NPCStop Activity Anim
Try Start Chat (TryStartChat)functionRPG Saga|NPCSearchRadius: float = 450.000000
Seconds: float = 12.000000
boolStarts a talk with the nearest free living NPC within SearchRadius: they face each other and trade lines (Bark.Kind.Chat) for Seconds. Returns true when a partner was found.
Wander Step (WanderStep)functionRPG Saga|NPCWalks to a new random point around its place (a wander step), whatever its Movement is.

URSENPCSubsystem

Module RSECore. The living NPCs' story state (D-104, docs/design/exploration.md "NPC-uri vii"): headless, saved (section "NPCs").

NodeKindCategoryParametersReturnsDescription
Clear NPCOverride (ClearNPCOverride)functionRPG Saga|NPCNPCId: FNameThe NPC follows its own schedule again.
Get NPCActivity (GetNPCActivity)pureRPG Saga|NPCNPCId: FNameFGameplayTagThe activity tag of an NPC now (from its schedule and override; empty when unknown).
Get NPCOverride (GetNPCOverride)pureRPG Saga|NPCNPCId: FName
OutOverride: FRSENPCOverride (out)
boolThe NPC's override (false = none).
Is NPCAt Activity (IsNPCAtActivity)pureRPG Saga|NPCNPCId: FName
Activities: FGameplayTagContainer
boolThe NPC does one of Activities now (empty = it is present at all, not away). By schedule, not by where the actor walks.
On NPCOverride Changed (OnNPCOverrideChanged)eventRPG Saga|NPCNPCId: FNameAn NPC's override changed (set, cleared, loaded: NPCId None = all).
Set NPCOverride (SetNPCOverride)functionRPG Saga|NPCNPCId: FName
Override: FRSENPCOverride (ref)
Changes an NPC's day (story): another schedule, or a forced activity. Saved.

URSENPCTalkComponent

Module RSE, display name RSE NPC Talk. Talking NPC behavior for any actor (D-165, docs/product/components.md): add it next to an RSE Interactable component (with a Dialog, an Interaction, or nothing at all) on your own character or actor.

NodeKindCategoryParametersReturnsDescription
Get Last Line (GetLastLine)pureRPG Saga|NPCFTextThe last line it said.
Has Lines (HasLines)pureRPG Saga|NPCboolIt has lines to say.
On Line Said (OnLineSaid)eventRPG Saga|NPCTalker: URSENPCTalkComponent*
Line: FText (ref)
A line was said (Blueprint and level scripting hook).
Request Automatic Line (RequestAutomaticLine)functionRPG Saga|NPCKind: FGameplayTagAsks the bark director (budget, cooldown, silence under dialogs and screens) to let it say an automatic line.
Say Line (SayLine)functionRPG Saga|NPCKind: FGameplayTagboolSays a line of Kind from its pools. Returns false when it has nothing to say now.
Try Bark (TryBark)functionRPG Saga|NPCboolStarts the proximity greeting now (bark dialog, else a line), within its cooldown. Returns true when one was asked for.

URSENPCWorldSubsystem

Module RSE. The living NPCs of a level (D-104): one place that listens to the clock, the weather and the story overrides and tells every NPC to look at its schedule again (hour, phase, weather: walk there; time skip, load: appear there), and one batch timer that puts NPCs far from the player (or long off screen...

NodeKindCategoryParametersReturnsDescription
Clear Raised Danger (ClearRaisedDanger)functionRPG Saga|NPCThe danger raised by RaiseDanger is over: the NPCs go back to their day.
Raise Danger (RaiseDanger)functionRPG Saga|NPCLocation: FVector
Radius: float = 0.000000
A danger at Location (a brawl, a monster in the street, a scripted scare): every NPC within its reaction's Trigger Distance reacts (flee, watch, cower, help). The running battle on the live map raises one by itself. Authority only.
Refresh All (RefreshAll)functionRPG Saga|NPCbSnap: boolEvery living NPC of the level looks at its schedule again.
Report Crime (ReportCrime)functionRPG Saga|NPCCrime: FRSENPCCrime (ref)int32A crime happened: the guards (NPCs whose reaction has Crime rules) that see or hear it answer. During a battle on the map the crime waits for its end (the guards come after the fight). The theft of a pickpocket, an attack on an NPC and the Report Crime effect arrive here by themselves; levels and Blueprints may report their own. Returns how many guards noticed it now.

URSENarrativeSubsystem

Module RSECore. Owns the global narrative state for the game session (survives level changes) and the narrative events the presentation listens to.

NodeKindCategoryParametersReturnsDescription
Can Run Interaction (CanRunInteraction)pureRPG Saga|NarrativeInteraction: URSEInteractionData*boolWhether an Interaction asset would run now (conditions, one-shot state).
Get Flag (GetFlag)pureRPG Saga|NarrativeFlag: FGameplayTagboolRead access for light level scripting (the Narrative library also writes: Set Flag, Set Variable...).
Get Narrative State (GetStateBP)pureRPG Saga|NarrativeFRSENarrativeStateThe whole story state (flags, variables, puzzles, areas, events, discovered places), read-only.
Get Variable (GetVariable)pureRPG Saga|NarrativeVariable: FGameplayTagint32A story variable (0 when never set).
Is Area Unlocked (IsAreaUnlocked)pureRPG Saga|NarrativeArea: FGameplayTagboolWhether a story area is unlocked.
Is Event Seen (IsEventSeen)pureRPG Saga|NarrativeEvent: FGameplayTagboolWhether a scene or event was seen.
Is Puzzle Solved (IsPuzzleSolved)pureRPG Saga|NarrativePuzzle: FGameplayTagboolWhether a puzzle is solved.
On Battle Requested (OnBattleRequested)eventRPG Saga|NarrativeEncounter: TSoftObjectPtr<URSEEncounterData> (ref)A Start Battle effect asked for a battle.
On Dialog Requested (OnDialogRequested)eventRPG Saga|NarrativeAsset: TSoftObjectPtr<UObject> (ref)A Start Dialog effect asked for a dialog.
On Narrative Changed (OnNarrativeChanged)eventRPG Saga|NarrativeKey: FGameplayTagA flag, variable, puzzle, area or event changed value (Key is its tag).
On Party Changed (OnPartyChanged)eventRPG Saga|NarrativeMembers, equipment, inventory, money or vitals were changed by an effect.
On Rest Requested (OnRestRequested)eventRPG Saga|NarrativeThe party rested at an inn (the state is already restored).
On Scene Requested (OnSceneRequested)eventRPG Saga|NarrativeScene: TSoftObjectPtr<UObject> (ref)
Event: FGameplayTag
A Play Scene effect asked for a scene.
On Screen Requested (OnScreenRequested)eventRPG Saga|NarrativeAsset: TSoftObjectPtr<UObject> (ref)An effect asked for the screen of a data asset (shop, code lock, card opponent, tutorial).
On World Requested (OnWorldRequested)eventRPG Saga|NarrativeRequest: FRSEWorldRequest (ref)A battle with context (opening, scene combatants) or an alarm (D-109: Start Battle with an opening, Alert Enemies).
Run Interaction (RunInteraction)functionRPG Saga|NarrativeInteraction: URSEInteractionData*ERSEInteractionResultRuns an interaction against this game instance's state. Null = ConditionsFailed.

URSENavSnapshotCapture

Module RSE. Reads a battle area of the world into a navigation snapshot for Free Tactics (D-091, docs/design/free-tactics.md).

NodeKindCategoryParametersReturnsDescription
Battle to World (BattleToWorld)pure, staticRPG Saga|Free TacticsSnapshot: FRSENavSnapshot (ref)
BattlePoint: FVector (ref)
FVectorWorld position (centimeters) of a battle space point of Snapshot.
Capture Area (CaptureArea)function, staticRPG Saga|Free TacticsWorldContextObject: UObject*
AreaTransform: FTransform (ref)
SizeMeters: FVector2D
IgnoredActors: TArray<AActor*> (ref)
FRSENavSnapshotCaptures the area whose corner is at AreaTransform's origin (its yaw orients it) and whose size is SizeMeters (X, Y), with cells of Free Tactics -> Snapshot Cell Size. Battle space = meters from that corner; the snapshot's WorldTransform maps back. IgnoredActors (the battle's units, for example) are not captured.
World to Battle (WorldToBattle)pure, staticRPG Saga|Free TacticsSnapshot: FRSENavSnapshot (ref)
WorldPoint: FVector (ref)
FVectorBattle space point (meters) of a world position of Snapshot's area.

URSENetPlayerComponent

Module RSENet. One player of a co-op session (D-124 §3.7, D-140), on the player's APlayerState: its session slot (FRSEPlayerId, 0 = the host), the party member it plays and its admission (play, or watch until the battle ends).

NodeKindCategoryParametersReturnsDescription
Get Admission (GetAdmission)pureRPG Saga|Co-opERSEJoinAdmissionGet Admission
Get Character (GetCharacter)pureRPG Saga|Co-opFPrimaryAssetIdThe party member the player plays (the lobby's choice, then what the host gave).
Get Player Id (GetPlayerId)pureRPG Saga|Co-opFRSEPlayerIdThe player's session slot (None until the host set it).

URSENetSubsystem

Module RSENet. The co-op layer of one game instance (D-140, docs/design/networking.md §3, docs/product/coop.md).

NodeKindCategoryParametersReturnsDescription
Get Net Role (GetNetRole)pureRPG Saga|Co-opERSEAuthorityModeStandalone, Authority (host) or Proxy (guest), as set on the RSECore authority subsystem.
Get Stats (GetStats)pureRPG Saga|Co-opFRSENetTrafficStatsWhat the co-op layer sent and received since the session started.
Has Initial State (HasInitialState)pureRPG Saga|Co-opboolGuest: the first complete state from the host has been applied. Host and single player: always true.
Is Coop Active (IsCoopActive)pureRPG Saga|Co-opboolA co-op session runs on this machine (host or guest).
On Peer Command Result (OnPeerCommandResult)eventRPG Saga|Co-opResult: FRSECommandResult (ref)Another player's command result (Broadcast Result Types), on every machine.

URSENightLightComponent

Module RSE, display name Night Light. Turns the lights of its actor on at dusk and off at dawn (D-101): lamps, torches, windows.

NodeKindCategoryParametersReturnsDescription
Clear Forced (ClearForced)functionRPG Saga|TimeClear Forced
Force State (ForceState)functionRPG Saga|TimebOn: boolForces the light on or off for the story (clears with ClearForced).
Get Level (GetLevel)pureRPG Saga|TimefloatOn now (after fade), as last computed.

URSEOptionsViewModel

Module RSE. The options screen (D-038): tabs Game / Audio / Display / Controls.

NodeKindCategoryParametersReturnsDescription
Activate (Activate)functionRPG Saga|UI|OptionsRuns the selected row: an action, or the next value of a choice; Keep / Revert during the video question.
Change Row Value (ChangeRowValue)functionRPG Saga|UI|OptionsIndex: int32
Direction: int32
Changes a row's value by Direction (arrows next to a row).
Change Value (ChangeValue)functionRPG Saga|UI|OptionsDirection: int32Changes the selected row's value by Direction (-1 / +1).
Confirm Video (ConfirmVideo)functionRPG Saga|UI|OptionsbKeep: boolAnswers the video question.
Leave (Leave)functionRPG Saga|UI|OptionsLeaves the screen (display choices not applied are dropped).
Move Selection (MoveSelection)functionRPG Saga|UI|OptionsDirection: int32Move Selection
Select (Select)functionRPG Saga|UI|OptionsIndex: int32Puts the cursor on a row (mouse hover); the video question's options when it is open.
Set Choice (SetChoice)functionRPG Saga|UI|OptionsIndex: int32
Choice: int32
Sets a choice row directly.
Set Page (SetPage)functionRPG Saga|UI|OptionsNewPage: ERSEOptionsPageSet Page
Set Slider Value (SetSliderValue)functionRPG Saga|UI|OptionsIndex: int32
Value: float
bFinal: bool = true
Sets a slider row's value (snapped to its step). bFinal: the drag ended (sound, full refresh).
Switch Page (SwitchPage)functionRPG Saga|UI|OptionsDirection: int32Switch Page

URSEPairedAnimationLibrary

Module RSE. The pairs a project can pick from (D-172): finishers, counters, parries, grabs and phase moments, chosen by their conditions and weights.

NodeKindCategoryParametersReturnsDescription
Select Pair (SelectPair)pureRPG Saga|Paired AnimationsContext: FRSEPairedContext (ref)
Roll: float
URSEPairedAnimationData*A pair that fits Context, weighted; Roll in [0, 1) picks it (deterministic for a given roll). Null when none fits.

URSEPairedAnimationLibraryFunctions

Module RSE. Paired animation nodes (D-172).

NodeKindCategoryParametersReturnsDescription
Compute Pair Alignment (ComputePairAlignment)pure, staticRPG Saga|Paired AnimationsAttacker: FTransform (ref)
Victim: FTransform (ref)
Relative: FRSEPairedRelativeTransform (ref)
Mode: ERSEPairedAlignMode
FRSEPairedAlignmentAlignment of a pair for two transforms (where both stand when the montages start).
Find Pair (FindPair)function, staticRPG Saga|Paired AnimationsContext: FRSEPairedContext (ref)
Roll: float = 0.000000
URSEPairedAnimationData*Finds a pair for Context in the project's libraries (Project Settings -> Paired Animations), weighted by Roll (0..1). Null when none fits.
Get Finisher Frequency (GetFinisherFrequency)pure, staticRPG Saga|Paired AnimationsERSEFinisherFrequencyThe player's finisher setting (Options -> Finishers): Off, Sometimes or Always.
Play Paired Animation (PlayPairedAnimation)function, staticRPG Saga|Paired AnimationsWorldContext: UObject*
Pair: URSEPairedAnimationData*
Attacker: AActor*
Victim: AActor*
bLocalCamera: bool
bVictimFalls: bool
OnFinished: FRSEOnPairedFinished
boolPlays a pair on two actors now (action battles, cutscene moments, boss phase hooks). Call it on the machine that should see it: the killer's, in co-op. bLocalCamera: the cinematic camera and slow motion for this machine's player. On Finished fires when both montages end (at once when nothing could play).
Set Finisher Frequency (SetFinisherFrequency)function, staticRPG Saga|Paired AnimationsFrequency: ERSEFinisherFrequencySets the player's finisher setting (saved in GameUserSettings).
Try Play Finisher (TryPlayFinisher)function, staticRPG Saga|Paired AnimationsWorldContext: UObject*
Attacker: AActor*
Victim: AActor*
Context: FRSEPairedContext (ref)
Roll: float
OnFinished: FRSEOnPairedFinished
boolA finisher for an action battle kill (or stagger): checks Options -> Finishers and the chance, finds a pair and plays it locally. Call it only for the kills of this machine's player. Returns true when a finisher plays.

URSEPaperdollPreview

Module RSE. The picture in the middle of the inventory paperdoll (D-126): the selected party member, live, wearing its equipment.

NodeKindCategoryParametersReturnsDescription
Begin (Begin)overrideRPG Saga|UI|InventoryPlayer: APlayerController*The screen opened for Player (the world the preview may live in).
End (End)overrideRPG Saga|UI|InventoryThe screen closed: release everything.
Get Picture (GetPicture)overrideRPG Saga|UI|InventoryUTexture*The picture to draw now, or null while there is none (loading, no look): the board falls back to the portrait.
Get Yaw (GetYaw)pureRPG Saga|UI|InventoryfloatGet Yaw
Get Zoom (GetZoom)pureRPG Saga|UI|InventoryfloatGet Zoom
Notify Shown (NotifyShown)overrideRPG Saga|UI|InventoryPixelSize: FVector2DThe picture is on screen this frame, drawn at PixelSize (providers capture only while shown).
Project Body Part (ProjectBodyPart)overrideRPG Saga|UI|InventoryBodyPart: FGameplayTag
OutUV: FVector2D (out)
boolWhere a body part (Inventory UI -> Body Anchors, its bones) is in the picture now, 0..1; false = unknown (the anchor's fixed point is used).
Set Yaw (SetYaw)overrideRPG Saga|UI|InventoryInYaw: floatTurns the character (degrees around its vertical axis, 0 = the framing's view).
Set Zoom (SetZoom)overrideRPG Saga|UI|InventoryInZoom: floatZoom (1 = the whole figure; clamped to Inventory UI -> Preview Zoom Range).
Show Character (ShowCharacter)overrideRPG Saga|UI|InventoryCharacter: URSECharacterData*
Equipment: FRSECharacterEquipment (ref)
Shows Character wearing Equipment (called after every change; same values = nothing to do). Null = none.

URSEPartyCommandMenuViewModel

Module RSE. The radial menu's data and actions (D-097, D-052): Widget Blueprints may replace the built-in radial widget.

NodeKindCategoryParametersReturnsDescription
Choose (Choose)functionRPG Saga|Party FieldIndex: int32Carries out an entry (a click, Confirm).

URSEPartyControlSubsystem

Module RSECore. Owner of who controls each party member in the field (D-097, D-124 §3.7, D-133): the host, a guest, or the companion AI.

NodeKindCategoryParametersReturnsDescription
Get Control State (GetControlState)pureRPG Saga|Party|ControlFRSEPartyControlStateWho controls each member.
Get Controlling Player (GetControllingPlayer)pureRPG Saga|Party|ControlMember: FPrimaryAssetIdFRSEPlayerIdThe player who controls Member; None for the companion AI.
Get Leader (GetLeader)pureRPG Saga|Party|ControlPlayer: FRSEPlayerIdFPrimaryAssetIdThe member Player leads; invalid when none.
On Party Control Changed (BP_OnControlChanged)eventRPG Saga|Party|ControlThe control changed (a command applied, a sync, a load).

URSEPartyFieldSubsystem

Module RSE. The visible party in exploration (D-097, docs/design/coop-pvp.md section 2): spawns the party members behind the leader (Project Settings -> Party Field), keeps who controls whom (FRSEPartyControlState: the local player leads, the others have a companion AI), switches the leader, and performs delega...

NodeKindCategoryParametersReturnsDescription
Cycle Leader (CycleLeader)functionRPG Saga|Party FieldStep: int32 = 1boolMakes the next (Step 1) or previous (-1) member the leader: the local player takes its pawn.
Force Idle Now (ForceIdleNow)functionRPG Saga|Party FieldD-129 (dev, tests): every follower starts its idle life at its next think.
Get Leader Pawn (GetLeaderPawn)pureRPG Saga|Party FieldARSEExplorationCharacter*The pawn the local player controls.
Is Command Menu Open (IsCommandMenuOpen)pureRPG Saga|Party FieldboolIs Command Menu Open
On Follower Idle (OnFollowerIdle)eventRPG Saga|Party FieldMember: ARSEExplorationCharacter*
Intent: FRSEIdleIntent (ref)
A resting member started an idle action (Custom behaviours: the game carries them out).
Refresh Followers (RefreshFollowers)functionRPG Saga|Party FieldSpawns or removes the followers to match the party (Party Field settings, the formation). Call after the party changed.
Set Leader (SetLeader)functionRPG Saga|Party FieldMember: URSECharacterData*boolMakes Member's pawn the leader.
Toggle Command Menu (ToggleCommandMenu)functionRPG Saga|Party FieldOpens or closes the radial menu.

URSEPartyMenuViewModel

Module RSE. The party menu (D-024 / D-025, D-039, D-013, D-027 / D-029, D-047, D-038): data of every page and every action that changes the game (use items and abilities, equip, formation, Pacts, quests, key items, help, options, world map).

NodeKindCategoryParametersReturnsDescription
Abandon Quest (AbandonQuest)functionRPG Saga|UI|PartyMenuQuest: URSEQuestData*
bConfirmed: bool
boolAbandons a side quest (bConfirmed false = only asks, when the settings want a confirmation). Returns true when abandoned.
Can Cast Ability (CanCastAbility)functionRPG Saga|UI|PartyMenuCaster: URSECharacterData*
Ability: URSEAbilityData*
boolCan Cast Ability
Can Change Equipment (CanChangeEquipment)pureRPG Saga|UI|PartyMenuMember: URSECharacterData*boolMember's equipment can be changed (guests' cannot).
Can Fight Classic Battles Here (CanFightClassicBattlesHere)pureRPG Saga|UI|PartyMenuboolClassic (ATB / turn-based) battles can start in this level (it has an ATB battle director).
Can Open (CanOpen)pureRPG Saga|UI|PartyMenuboolThe menu may open now (not blocked by a battle).
Can Show Quest on Map (CanShowQuestOnMap)pureRPG Saga|UI|PartyMenuQuest: URSEQuestData*boolQuest has an objective the area map of this level can show.
Can Target Whole Party (CanTargetWholeParty)pure, staticRPG Saga|UI|PartyMenuAbility: URSEAbilityData*boolAbility (for items: the item's use ability) can also target the whole party at once (Target null in UseItem / CastAbility).
Can Use Item (CanUseItem)functionRPG Saga|UI|PartyMenuItem: URSEConsumableData*boolWhether Item can be used from the menu now (message when not). Save items open the save screen.
Cast Ability (CastAbility)functionRPG Saga|UI|PartyMenuCaster: URSECharacterData*
Ability: URSEAbilityData*
Target: URSECharacterData*
boolCasts Ability from Caster on Target (null = the whole party when allowed). Returns true when cast.
Cast Ability on World (CastAbilityOnWorld)functionRPG Saga|UI|PartyMenuCaster: URSECharacterData*
Ability: URSEAbilityData*
boolD-157: casts Ability from Caster on the surroundings (the Cast On World command). Returns true when it was sent.
Close Menu (CloseMenu)functionRPG Saga|UI|PartyMenuCloses the menu (the options screen too).
Combine Items (CombineItems)functionRPG Saga|UI|PartyMenuFirst: URSEItemData*
Second: URSEItemData*
URSEItemData*Tries a combination of two key items (D-039). Returns the new item, or null.
Equip (Equip)functionRPG Saga|UI|PartyMenuMember: URSECharacterData*
SlotId: FName
Item: URSEEquipmentData*
boolEquip
Get Abilities (GetAbilities)pureRPG Saga|UI|PartyMenuMember: URSECharacterData*TArray<FRSEPartyAbilityView>Get Abilities
Get Battle Access (GetBattleAccess)pureRPG Saga|UI|PartyMenuERSEPartyMenuBattleAccessWhat this player's menu may do now (D-128): outside battles Allowed; in a battle UI -> Party Menu In Battle. Per menu (each local player owns one), so co-op screens decide for themselves.
Get Equip Candidates (GetEquipCandidates)pureRPG Saga|UI|PartyMenuMember: URSECharacterData*
SlotId: FName
TArray<FRSEItemView>Inventory items that fit SlotId for Member.
Get Equip Preview (GetEquipPreview)pureRPG Saga|UI|PartyMenuMember: URSECharacterData*
SlotId: FName
Item: URSEEquipmentData*
TArray<FRSEStatChangeView>Member's menu stats now and with Item in SlotId (Item null = the slot emptied; OutCanEquip false when it does not fit).
Get Equipment (GetEquipment)pureRPG Saga|UI|PartyMenuMember: URSECharacterData*TArray<FRSEEquipSlotView>Get Equipment
Get Formation Page Kind (GetFormationPageKind)pureRPG Saga|UI|PartyMenuERSEFormationPageKindWhat the Formation tab is now (UI -> Formation Page; Auto: classic battles where the player is).
Get Items Of Kind (GetItemsOfKind)pureRPG Saga|UI|PartyMenuKind: ERSEItemKindTArray<FRSEItemView>Items of one kind (Items page tabs).
Get Map Page (GetMapPage)pureRPG Saga|UI|PartyMenuURSEAreaMapViewModel*The area map shown by the Map tab (made by the level's map subsystem; null without a map).
Get Member Status (GetMemberStatus)pureRPG Saga|UI|PartyMenuMember: URSECharacterData*FRSEMemberStatusViewOne member as the Status page shows it.
Get Page Label (GetPageLabel)pure, staticRPG Saga|UI|PartyMenuPage: ERSEPartyMenuPageFTextD-148: the page's tab label.
Get Party Order (GetPartyOrder)pureRPG Saga|UI|PartyMenuTArray<FRSEPartyOrderView>The Party page's rows: leader, followers in order with their places, those out of the formation.
Get Quest Map Preview (GetQuestMapPreview)pureRPG Saga|UI|PartyMenuQuest: URSEQuestData*
OutMap: UTexture2D* (out)
OutObjectiveUV: FVector2D (out)
OutPlayerUV: FVector2D (out)
bOutHasPlayer: bool (out)
boolThe mini-map of a quest's current objective: this level's map picture, the objective's map coordinates and the player's. Returns false when the level's map cannot show the quest.
Get Row Effects (GetRowEffects)pure, staticRPG Saga|UI|PartyMenuFRSERowEffectsViewWhat the front and back rows do to melee damage (the battle rules of the game's profile).
Get Selected Member (GetSelectedMember)pureRPG Saga|UI|PartyMenuURSECharacterData*The selected member (the first when none was chosen).
Get Selected Member Index (GetSelectedMemberIndex)pureRPG Saga|UI|PartyMenuint32The selected member's row in Members (the first when none was chosen; INDEX_NONE without members).
Get Start Page (GetStartPage)pureRPG Saga|UI|PartyMenuERSEPartyMenuPageD-148: the page Tab / Esc open on (UI -> Party Menu Start Page, else the first tab shown).
Get Stats (GetStats)pureRPG Saga|UI|PartyMenuMember: URSECharacterData*TArray<FRSEStatChangeView>Member's menu stats now (Current = After).
Get Tab Label (GetTabLabel)pureRPG Saga|UI|PartyMenuPage: ERSEPartyMenuPageFTextD-155: a tab's label as shown now (the Formation tab is "Party" in live-only games).
Get Tab Order (GetTabOrder)pureRPG Saga|UI|PartyMenuTArray<ERSEPartyMenuPage>D-148: the tabs shown now, in order.
Get Targets (GetTargets)pureRPG Saga|UI|PartyMenuCaster: URSECharacterData*
Ability: URSEAbilityData*
TArray<FRSEMemberView>Members an item or ability can be used on now (Caster null for items).
Handle Page Key (HandlePageKey)functionRPG Saga|UI|PartyMenuPage: ERSEPartyMenuPageERSEPartyMenuKeyResultD-148: a page key was pressed (I, J, M, K..., UI -> Party Menu Page Actions): opens the menu on Page, moves to it, or closes the menu when it is already there (Game Flow -> Screen Keys Toggle).
Is in Battle (IsInBattle)pureRPG Saga|UI|PartyMenuboolThis player's party is in a battle now (Free Tactics, Tactics or ATB; D-128).
Is Page Available (IsPageAvailable)pureRPG Saga|UI|PartyMenuPage: ERSEPartyMenuPageboolD-148: the page can be shown now: in the tab order (UI -> Party Menu Tab Order), Growth with a progression system beyond Classic, Map when the level has a map, Equipment unless the grid inventory holds it.
Is Read Only (IsReadOnly)pureRPG Saga|UI|PartyMenuboolLook only: every change is refused (UI -> Party Menu In Battle = View Only during a battle).
Is Sub Screen Open (IsSubScreenOpen)pureRPG Saga|UI|PartyMenuboolThe options screen or a tutorial is open over the menu (the menu waits).
Learn Pact Ability (LearnPactAbility)functionRPG Saga|UI|PartyMenuPact: URSEPactData*
Ability: URSEAbilityData*
boolLearn Pact Ability
Make Leader (MakeLeader)functionRPG Saga|UI|PartyMenuMember: URSECharacterData*boolMakes Member the leader (the explorer the player controls; co-op: asks the host).
Move in Formation (MoveInFormation)functionRPG Saga|UI|PartyMenuMember: URSECharacterData*
Offset: int32
boolMoves Member Offset places in the formation's order (negative = earlier): battle party and follower order.
Open (Open)functionRPG Saga|UI|PartyMenuOpens the menu (remembers the object the player stands at, for "Use on ..."). During a battle only when UI -> Party Menu In Battle allows it (D-128; blocked: Message says why and the menu stays closed).
Open Growth For (OpenGrowthFor)functionRPG Saga|UI|PartyMenuMember: URSECharacterData*boolMoves to the Growth page with Member selected (the Status page's growth button).
Open Journal (OpenJournal)functionRPG Saga|UI|PartyMenuQuest: URSEQuestData*Opens the menu on the journal with Quest selected (the area map's objectives, D-092).
Open on Page (OpenOnPage)functionRPG Saga|UI|PartyMenuPage: ERSEPartyMenuPageboolD-148: opens the menu on Page, or moves the open menu to it. Returns false when the menu cannot open or the page is not offered.
Open Options (OpenOptions)functionRPG Saga|UI|PartyMenuboolOpens the options screen over the menu.
Open World Map (OpenWorldMap)functionRPG Saga|UI|PartyMenuboolOpens the world map (needs the map item when the settings set one).
Read Tutorial (ReadTutorial)functionRPG Saga|UI|PartyMenuTutorial: URSETutorialData*boolReads a seen tutorial again (over the menu).
Refresh (Refresh)functionRPG Saga|UI|PartyMenuRebuilds every list from the game.
Run Menu Extension (RunMenuExtension)functionRPG Saga|UI|PartyMenuId: FNameboolRuns the menu extension row Id of the Options page (D-142: Host Game, Invite, a project's own entries). Returns false when there is no such enabled entry.
Select Member (SelectMember)functionRPG Saga|UI|PartyMenuMember: URSECharacterData*Selects Member on every page with a member list (null = the first member).
Set Message (SetMessage)functionRPG Saga|UI|PartyMenuInMessage: FText (ref)Set Message
Set Page (SetPage)functionRPG Saga|UI|PartyMenuNewPage: ERSEPartyMenuPageSet Page
Should Cast on World (ShouldCastOnWorld)pureRPG Saga|UI|PartyMenuCaster: URSECharacterData*
Ability: URSEAbilityData*
boolD-157: choosing Ability casts it on the surroundings instead of a member: it is usable on the world and either has no party use or something around the leader reacts to it (a torch to light, fog to clear).
Show Blocked Notice (ShowBlockedNotice)functionRPG Saga|UI|PartyMenuTells this player the menu cannot open now (D-128: a toast on their reward feed, and Message).
Show Quest on Map (ShowQuestOnMap)functionRPG Saga|UI|PartyMenuQuest: URSEQuestData*boolCloses the menu and opens the area map on Quest's objective (journal "Show on map", D-092).
Toggle Battle Party (ToggleBattleParty)functionRPG Saga|UI|PartyMenuMember: URSECharacterData*boolMoves Member into / out of the ATB party.
Toggle Pact Binding (TogglePactBinding)functionRPG Saga|UI|PartyMenuPact: URSEPactData*
Member: URSECharacterData*
boolBinds Pact to Member, or unbinds it when Member holds it already.
Toggle Row (ToggleRow)functionRPG Saga|UI|PartyMenuMember: URSECharacterData*boolFront row <-> back row.
Track Quest (TrackQuest)functionRPG Saga|UI|PartyMenuQuest: URSEQuestData*boolTracks Quest (null = stop tracking).
Unequip (Unequip)functionRPG Saga|UI|PartyMenuMember: URSECharacterData*
SlotId: FName
boolUnequip
Use Item (UseItem)functionRPG Saga|UI|PartyMenuItem: URSEConsumableData*
Target: URSECharacterData*
FromBag: URSECharacterData* = None
boolUses a consumable on Target (null = the whole party when the item allows it). Returns true when used.
Use Key Item on Target (UseKeyItemOnTarget)functionRPG Saga|UI|PartyMenuItem: URSEItemData*boolUses a key item on the object the player stands at (the menu closes; the object answers).
Use Save Item (UseSaveItem)functionRPG Saga|UI|PartyMenuItem: URSEConsumableData*boolUses a save-anywhere item (D-010): opens the save screen. Returns true when the screen opened.
Use Status Action (UseStatusAction)functionRPG Saga|UI|PartyMenuAction: FRSEStatusActionView (ref)
Target: URSECharacterData*
boolUses a Status page action on Target (an ability through its caster, an item from the party). Returns true when sent.
Zoom Map (ZoomMap)functionRPG Saga|UI|PartyMenuSteps: floatboolZooms the Map tab's map by Steps (the camera zoom input: wheel, triggers). Returns true when the Map tab is shown.

URSEPartySubsystem

Module RSECore. Owns the player's party state for the whole game session (survives level changes).

NodeKindCategoryParametersReturnsDescription
Get Attribute Registry (GetAttributeRegistry)pureRPG Saga|Party|AttributesURSEAttributeRegistry*Attribute and resource definitions of the game's rules profile.
Get Member Attribute (GetMemberAttribute)pureRPG Saga|Party|AttributesCharacter: URSECharacterData*
Attribute: FGameplayTag
floatFinal attribute of Character at its current level with its current equipment (derived attributes included).
Get Member Resource (GetMemberResource)pureRPG Saga|Party|AttributesCharacter: URSECharacterData*
Resource: FGameplayTag
floatCurrent value of a persistent resource (HP, MP, custom ones marked Persists After Battle).
Get Member Resource Max (GetMemberResourceMax)pureRPG Saga|Party|AttributesCharacter: URSECharacterData*
Resource: FGameplayTag
floatMaximum of a member's resource at its level with its equipment.
Modify Member Resource (ModifyMemberResource)functionRPG Saga|Party|AttributesCharacter: URSECharacterData*
Resource: FGameplayTag
Delta: float
Adds Delta to a resource (see SetMemberResource).
On Ability Learned (OnAbilityLearned)eventRPG Saga|PartyCharacter: URSECharacterData*
Ability: URSEAbilityData*
bLearned: bool
A character of this party learned or forgot an ability for good (Learn Ability / Forget Ability, scrolls; D-082).
On Member Resource Changed (OnMemberResourceChanged)eventRPG Saga|Party|AttributesCharacter: URSECharacterData*
Resource: FGameplayTag
OldValue: float
NewValue: float
A member's resource changed through SetMemberResource / ModifyMemberResource (battles report theirs on URSEBattle::OnResourceChanged).
Set Member Resource (SetMemberResource)functionRPG Saga|Party|AttributesCharacter: URSECharacterData*
Resource: FGameplayTag
Value: float
Sets a resource (clamped to [0, max]); HP 0 marks the member KO, HP above 0 clears KO. Fires OnMemberResourceChanged. Sends the Set Member Resource command (D-137; host only).

URSEPassiveModifier

Module RSECore, display name Passive Modifier. A conditional passive bonus (D-055): while every condition holds (the AI condition classes, e.g.

NodeKindCategoryParametersReturnsDescription
Is Active For (IsActiveFor)overrideRPG Saga|Abilities|PassivesBattle: URSEBattle*
UnitId: int32
boolCustom rule on top of the conditions (Blueprint subclasses). Default: true.

URSEPlatformUserSubsystem

Module RSECore. The platform user layer (D-170, docs/product/platforms.md).

NodeKindCategoryParametersReturnsDescription
Get Connected Input Devices (GetConnectedInputDevices)pureRPG Saga|PlatformUser: FPlatformUserId
OutDevices: TArray<FInputDeviceId> (out)
Input devices of User that are connected now (the platform's mapping).
Get Primary User (GetPrimaryUser)pureRPG Saga|PlatformFPlatformUserIdThe user that plays (and owns the saves).
Get Primary User Index (GetPrimaryUserIndex)pureRPG Saga|Platformint32The primary user's local user index (index-based platform APIs).
Has Selected Primary User (HasSelectedPrimaryUser)pureRPG Saga|PlatformboolThe primary user was picked by a "press start" (false until then, and again after Reset Primary User Selection).
Is App Suspended (IsAppSuspended)pureRPG Saga|PlatformboolThe app is suspended (between Report App Suspended and Report App Resumed).
Is Primary User Signed In (IsPrimaryUserSignedIn)pureRPG Saga|PlatformboolIs Primary User Signed In
Is User Signed In (IsUserSignedIn)pureRPG Saga|PlatformUser: FPlatformUserIdboolUser is signed in (users are signed in unless the platform reported a sign-out).
On App Resumed (BP_OnAppResumed)eventRPG Saga|Platform
On App Suspended (BP_OnAppSuspended)eventRPG Saga|Platform
On Controller Connection Changed (BP_OnControllerConnectionChanged)eventRPG Saga|PlatformUser: FPlatformUserId
Device: FInputDeviceId
bConnected: bool
bPrimaryUser: bool
On Primary User Changed (BP_OnPrimaryUserChanged)eventRPG Saga|PlatformNewUser: FPlatformUserId
On User Login Changed (BP_OnUserLoginChanged)eventRPG Saga|PlatformUser: FPlatformUserId
bSignedIn: bool
bPrimaryUser: bool
Report App Resumed (ReportAppResumed)functionRPG Saga|PlatformThe app is back in the foreground.
Report App Suspended (ReportAppSuspended)functionRPG Saga|PlatformThe app goes to the background (suspend): save writes in flight are flushed (Save -> Suspend Flush Timeout).
Report Controller Connection Changed (ReportControllerConnectionChanged)functionRPG Saga|PlatformUser: FPlatformUserId
Device: FInputDeviceId
bConnected: bool
An input device of User connected or disconnected (IPlatformInputDeviceMapper).
Report User Login Changed (ReportUserLoginChanged)functionRPG Saga|PlatformUser: FPlatformUserId
bSignedIn: bool
A user signed in or out (FCoreDelegates::OnUserLoginChangedEvent, or the buyer's online login flow).
Reset Primary User Selection (ResetPrimaryUserSelection)functionRPG Saga|PlatformBack to the title screen: the next "press start" picks the user again (the current one stays until then).
Select Primary User (SelectPrimaryUser)functionRPG Saga|PlatformUser: FPlatformUserIdboolMakes User the primary user (selected). Returns false for an invalid user.
Select Primary User from Input Device (SelectPrimaryUserFromInputDevice)functionRPG Saga|PlatformDevice: FInputDeviceIdbool"Press start": the user of Device (the platform's device-to-user mapping) becomes the primary user. An invalid device keeps the current user but still counts as the selection. Returns true when the primary user is now set.

URSEPlayerProvider

Module RSE. Lists the players of a world for URSEPlayers (D-134).

NodeKindCategoryParametersReturnsDescription
Get Host Controller (GetHostController)overrideRPG Saga|PlayersWorld: UWorld*APlayerController*The host's controller (slot 0): the player who owns the party leader, counts the random-encounter steps and leads zone travel (D-124 §6). Null on a network client (the host's controller lives on the server).
Get Player Controllers (GetPlayerControllers)overrideRPG Saga|PlayersWorld: UWorld*
OutControllers: TArray<APlayerController*> (out)
Every player controller of World this machine knows, host first.
Get Player Slot (GetPlayerSlot)overrideRPG Saga|PlayersWorld: UWorld*
Controller: APlayerController*
int32The player's slot (0 = host), or -1 when the controller is not a known player.

URSEPlayers

Module RSE. The players registry (D-134, docs/design/networking.md §3.8): the one place RSE asks "who are the players".

NodeKindCategoryParametersReturnsDescription
Get Controller For (GetControllerFor)pure, staticRPG Saga|PlayersWorldContext: UObject*
PlayerId: FRSEPlayerId
APlayerController*The controller of a player id (the instigator of a command), or null.
Get Controller for Slot (GetControllerForSlot)pure, staticRPG Saga|PlayersWorldContext: UObject*
Slot: int32
APlayerController*The controller of a player slot, or null.
Get Host Controller (GetHostController)pure, staticRPG Saga|PlayersWorldContext: UObject*APlayerController*The host's controller (slot 0, owns the party leader). Null on a network client.
Get Host Pawn (GetHostPawn)pure, staticRPG Saga|PlayersWorldContext: UObject*APawn*The host's pawn (the party leader in exploration), or null.
Get Local Player Controllers (GetLocalPlayerControllers)function, staticRPG Saga|PlayersWorldContext: UObject*
OutControllers: TArray<APlayerController*> (out)
The players of this machine (local controllers), in local player order.
Get Nearest Player Pawn (GetNearestPlayerPawn)function, staticRPG Saga|PlayersWorldContext: UObject*
Location: FVector
OutDistance: float (out)
APawn*The player pawn closest to Location (null without players); OutDistance in cm (-1 without players).
Get Pawn For (GetPawnFor)pure, staticRPG Saga|PlayersWorldContext: UObject*
PlayerId: FRSEPlayerId
APawn*The pawn of a player id, or null.
Get Player Controllers (GetPlayerControllers)function, staticRPG Saga|PlayersWorldContext: UObject*
OutControllers: TArray<APlayerController*> (out)
Every player controller this machine knows (server: all players; client: its own), host first.
Get Player Id (GetPlayerId)pure, staticRPG Saga|PlayersController: APlayerController*FRSEPlayerIdThe player id (D-133) of a controller: its slot; None for a controller that is not a player.
Get Player Pawns (GetPlayerPawns)function, staticRPG Saga|PlayersWorldContext: UObject*
OutPawns: TArray<APawn*> (out)
The pawns of every player (players without a pawn are skipped).
Get Player Slot (GetPlayerSlot)pure, staticRPG Saga|PlayersController: APlayerController*int32The player's slot (0 = host), -1 for a controller that is not a player.
Get Primary Local Controller (GetPrimaryLocalController)pure, staticRPG Saga|PlayersWorldContext: UObject*APlayerController*This machine's first local player: for presentation that has no better owner (screens, camera, sounds).
Has Authority (HasAuthority)pure, staticRPG Saga|PlayersWorldContext: UObject*boolThis machine runs the game logic (single-player: always). Logic timers and world-state changes check it.
Is Any Player Within (IsAnyPlayerWithin)pure, staticRPG Saga|PlayersWorldContext: UObject*
Location: FVector
Radius: float
boolSome player's pawn stands within Radius cm of Location.
Is Multiplayer Session (IsMultiplayerSession)pure, staticRPG Saga|PlayersWorldContext: UObject*boolSeveral players share the world: the co-op rules apply (no world pause, no world time dilation, no tutorials).
Is Player Pawn (IsPlayerPawn)pure, staticRPG Saga|PlayersPawn: APawn*boolPawn is controlled by a player (any player, local or remote).
Resolve Player Controller (ResolvePlayerController)pure, staticRPG Saga|PlayersWorldContext: UObject*
Instigator: UObject*
bFallbackToLocal: bool = true
APlayerController*The player behind Instigator: a controller itself, a pawn's controller, a widget's owning player, a local player's controller, an actor's instigator or owner, a component's owner. Falls back to the primary local controller when bFallbackToLocal is set and nothing resolves (presentation that must show somewhere).

URSEPuzzleSubsystem

Module RSECore. The puzzle actions on the authority (D-039, D-138): code attempts and item combinations arrive as commands from any player and are applied here, headless.

NodeKindCategoryParametersReturnsDescription
On Code Lock Outcome (BP_OnCodeLockOutcome)eventRPG Saga|PuzzlesOutcome: FRSECodeLockOutcome (ref)
On Combine Outcome (BP_OnCombineOutcome)eventRPG Saga|PuzzlesOutcome: FRSECombineOutcome (ref)

URSEQuestPresentationSubsystem

Module RSE. Presents the quest system in game worlds (docs/design/quests.md): creates the quest HUD (tracker + toasts) for the first local player and feeds it from FRSEQuestEvents.

NodeKindCategoryParametersReturnsDescription
Is Battle Active (IsBattleActive)pureRSE|QuestsboolA Tactics or ATB battle is running (deployment included).
Set Tracker Suppressed (SetTrackerSuppressed)functionRSE|QuestsReason: FName
bSuppressed: bool
Hides the tracker while any reason is set (e.g. "Dialog", "Cutscene"). Battles are handled automatically.

URSEQuestSubsystem

Module RSECore. Runs quests (D-027, docs/design/quests.md) on top of the narrative state and the shared conditions/effects.

NodeKindCategoryParametersReturnsDescription
Abandon Quest (AbandonQuest)functionRPG Saga|QuestsQuest: URSEQuestData*boolAbandons an active quest that allows it (CanAbandonQuest).
Can Abandon Quest (CanAbandonQuest)pureRPG Saga|QuestsQuest: URSEQuestData*boolActive, bCanAbandon and a side quest (D-029: only side quests can be abandoned).
Can Local Player Abandon Quest (CanLocalPlayerAbandonQuest)pureRPG Saga|QuestsQuest: URSEQuestData*boolCanAbandonQuest, and this machine's player may send Abandon Quest (co-op: host only by default, D-139). For the UI.
Complete Objective (CompleteObjective)functionRPG Saga|QuestsQuest: URSEQuestData*
Objective: FName
boolCompletes an objective of the current stage of an active quest.
Complete Quest (CompleteQuest)functionRPG Saga|QuestsQuest: URSEQuestData*
Outcome: FName = None
boolFinishes an active quest with an outcome (None = default success). A failure outcome fails it.
Confirm Point Of No Return (ConfirmPointOfNoReturn)functionRPG Saga|QuestsboolSets the point-of-no-return flag: at-risk quests fail and the ending locks (if the set says so).
Evaluate Ending (EvaluateEnding)pureRPG Saga|QuestsFGameplayTagThe ending the story leads to now (the locked one after the point of no return, when the set locks it).
Fail Quest (FailQuest)functionRPG Saga|QuestsQuest: URSEQuestData*
Outcome: FName = None
boolFails an active quest (Outcome None = default failure; must be a failure outcome otherwise).
Get Available Quests (GetAvailableQuests)pureRPG Saga|QuestsOutQuests: TArray<URSEQuestData*> (out)Known quests that could be started now.
Get Current Stage (GetCurrentStage)pureRPG Saga|QuestsQuest: URSEQuestData*FNameThe stage an active quest is at (its last stage once finished).
Get Ending Score (GetEndingScore)pureRPG Saga|Questsint32Hidden score variable plus key choices made.
Get Journal (GetJournal)pureRPG Saga|QuestsQuest: URSEQuestData*
OutEntries: TArray<FRSEQuestJournalEntry> (out)
boolJournal entries of the stages entered, then the outcome's.
Get Known Quests (GetKnownQuestsBP)pureRPG Saga|QuestsTArray<URSEQuestData*>Every quest the system knows (registered or started), in evaluation order.
Get Objective Views (GetObjectiveViews)pureRPG Saga|QuestsQuest: URSEQuestData*
OutObjectives: TArray<FRSEQuestObjectiveView> (out)
boolObjectives of the current (or last) stage the player may see: active ones and completed ones; hidden ones once completed.
Get Outcome (GetOutcome)pureRPG Saga|QuestsQuest: URSEQuestData*FNameThe outcome a finished quest ended with (None while it runs).
Get Quest Status (GetQuestStatus)pureRPG Saga|QuestsQuest: URSEQuestData*ERSEQuestStatusStatus of a quest: not started, active, completed, failed, missed or abandoned.
Get Quests (GetQuests)pureRPG Saga|QuestsStatus: ERSEQuestStatus
OutQuests: TArray<URSEQuestData*> (out)
Quests with Status, in start order (finish order for Completed / Failed / Missed). NotStarted = known quests never started.
Get Quests Failing At Point Of No Return (GetQuestsFailingAtPointOfNoReturnBP)pureRPG Saga|QuestsOutQuests: TArray<URSEQuestData*> (out)Active quests that fail at the point of no return (for a custom warning screen).
Get Tracked Quest (GetTrackedQuest)pureRPG Saga|QuestsURSEQuestData*The quest on the HUD tracker, or none.
Is Objective Complete (IsObjectiveComplete)pureRPG Saga|QuestsQuest: URSEQuestData*
Objective: FName
boolWhether an objective of a quest is complete.
Is Point Of No Return Passed (IsPointOfNoReturnPassed)pureRPG Saga|QuestsboolThe story passed its point of no return (the ending may be locked).
Is Quest Available (IsQuestAvailable)pureRPG Saga|QuestsQuest: URSEQuestData*boolNot active or finished and AvailableWhen passes (e.g. show a marker over the giver).
On Ending Changed (OnEndingChanged)eventRPG Saga|QuestsOldEnding: FGameplayTag
NewEnding: FGameplayTag
The ending the story leads to changed (hidden from the player; story tools).
On Objective Updated (OnObjectiveUpdated)eventRPG Saga|QuestsQuest: URSEQuestData*
Objective: FName
An objective completed, or its counter changed.
On Point Of No Return Passed (OnPointOfNoReturnPassed)eventRPG Saga|QuestsThe point of no return was confirmed: at-risk quests failed, the ending locked.
On Point Of No Return Requested (OnPointOfNoReturnRequested)eventRPG Saga|QuestsWarning: FText (ref)
QuestsThatWillFail: TArray<URSEQuestData*> (ref)
Show Warning (and the quests that will fail); call Confirm Point Of No Return on "yes".
On Quest Finished (OnQuestFinished)eventRPG Saga|QuestsQuest: URSEQuestData*
Status: ERSEQuestStatus
Outcome: FName
Completed, Failed, Missed or Abandoned (Outcome None when abandoned or without an outcome).
On Quest Started (OnQuestStarted)eventRPG Saga|QuestsQuest: URSEQuestData*A quest started.
On Stage Changed (OnStageChanged)eventRPG Saga|QuestsQuest: URSEQuestData*
OldStage: FName
NewStage: FName
An active quest moved to another stage.
On Tracked Quest Changed (OnTrackedQuestChanged)eventRPG Saga|QuestsQuest: URSEQuestData*The HUD tracker's quest changed (Quest may be none).
Refresh Quests (RefreshQuests)functionRPG Saga|QuestsRe-evaluates every quest now (objectives, transitions, failures, auto-start, ending).
Request Point Of No Return (RequestPointOfNoReturn)functionRPG Saga|QuestsboolAsks the presentation to confirm the point of no return (OnPointOfNoReturnRequested). False if already passed or not configured.
Set Stage (SetStage)functionRPG Saga|QuestsQuest: URSEQuestData*
Stage: FName
boolMoves an active quest to a stage (scripted advance).
Set Tracked Quest (SetTrackedQuest)functionRPG Saga|QuestsQuest: URSEQuestData*boolQuest on the HUD tracker (null = none). Only active quests can be tracked.
Start Quest (StartQuest)functionRPG Saga|QuestsQuest: URSEQuestData*
bIgnoreAvailability: bool = false
boolStarts a NotStarted or Abandoned quest. Checks AvailableWhen unless bIgnoreAvailability.

URSERPGCameraArm

Module RSE. The spring arm of the RPG cameras (D-113): the tactical exploration camera and the Free Tactics camera.

NodeKindCategoryParametersReturnsDescription
Get Terrain Lift (GetTerrainLift)pureRPG Saga|CamerafloatHow far the camera is lifted over the terrain now (cm; debugging, tests).
Reset Smoothing (ResetSmoothing)functionRPG Saga|CameraForgets the follow lag and the terrain lift (after a cut or a hand-off: no glide from a stale place).

URSEReconnectViewModel

Module RSE. The reconnect screen (D-170): shown while the primary user's controller is disconnected.

NodeKindCategoryParametersReturnsDescription
Continue (Continue)functionRPG Saga|PlatformboolDismisses the screen when allowed (the lifecycle subsystem resumes the game). Returns true when it closed.

URSEResultsViewModel

Module RSE. Victory results (D-030): rewards, member cards and battle statistics.

NodeKindCategoryParametersReturnsDescription
Continue (Continue)functionRPG Saga|UI|ResultsEnds the screen (the battle continues to the world).

URSERewardFeedSubsystem

Module RSE. Presents rewards without a blocking screen (D-128, docs/design/battle-rewards.md).

NodeKindCategoryParametersReturnsDescription
Is Playing (IsPlaying)pureRPG Saga|RewardsboolA feed still shows something.
Present Battle Rewards (PresentBattleRewards)functionRPG Saga|RewardsRewards: FRSEBattleRewards (ref)Shows a battle's rewards as the feed (floating texts and toasts) on every local player's screen.
Push Floater (PushFloater)functionRPG Saga|RewardsFloater: FRSERewardFloater (ref)
Over: AActor*
Delay: float = 0.000000
Floating texts (experience, level up) over Over, for every local player.
Push Toast (PushToast)functionRPG Saga|RewardsToast: FRSERewardToast (ref)
Player: APlayerController* = None
Adds a toast to Player's feed (null = every local player).
Skip (Skip)functionRPG Saga|RewardsHurries every feed off the screen.

URSERewardToastProvider

Module RSE. Makes toasts from a battle's rewards (D-128).

NodeKindCategoryParametersReturnsDescription
Gather Toasts (GatherToasts)overrideRPG Saga|RewardsContext: FRSERewardFeedContext (ref)
OutToasts: TArray<FRSERewardToast> (out)
Adds this provider's toasts for Context.

URSERulesProfile

Module RSECore. A set of gameplay-rule overrides (D-035, docs/design/rules-profiles.md): e.g.

NodeKindCategoryParametersReturnsDescription
Add Section (AddSection)functionRPG Saga|RulesClass: TSubclassOf<URSEDeveloperSettings>URSEDeveloperSettings*Adds an override section of Class, initialised from the global settings (or returns the existing one). Null if Class is not a profile section class. Marks the asset dirty; the caller saves it.
Get Own Section (GetOwnSection)pureRPG Saga|RulesClass: TSubclassOf<URSEDeveloperSettings>URSEDeveloperSettings*This profile's own section of Class, for editing (null if none).
Remove Section (RemoveSection)functionRPG Saga|RulesClass: TSubclassOf<URSEDeveloperSettings>boolRemoves the section of Class. Returns false if there was none. Marks the asset dirty.

URSERulesSubsystem

Module RSECore. The game-level rules resolver (D-035): holds the game's active profile (runtime-switchable, saved by id in the "Rules" section) and resolves the profile of a battle (encounter override -> active profile -> global).

NodeKindCategoryParametersReturnsDescription
Get Active Profile (GetActiveProfile)pureRPG Saga|RulesURSERulesProfile*The game's rules profile: the one set by the story, else the default from the settings. None = the global rules.
Get Active Profile Id (GetActiveProfileId)pureRPG Saga|RulesFPrimaryAssetIdId of the profile set by the story (invalid = the default is used).
On Rules Profile Changed (BP_OnProfileChanged)eventRPG Saga|RulesNewProfile: URSERulesProfile*The game's rules profile changed (story, load, new game).
Resolve for Encounter (ResolveForEncounter)pureRPG Saga|RulesEncounter: URSEEncounterData*URSERulesProfile*The profile a battle of Encounter uses (encounter override -> active profile -> global). Encounter may be none.
Set Active Profile (SetActiveProfile)functionRPG Saga|RulesProfile: URSERulesProfile*Switches the game's rules profile (none = back to the default profile). Running battles keep theirs. Saved. A player's choice (D-139): sends Set Rules Profile, host only in co-op. Game logic (the Set Rules Profile effect, a new game) uses ApplyActiveProfile.

URSESaveFlowSubsystem

Module RSE. The save/load user flow in the world (D-010), on top of RSECore's URSESaveSubsystem: - fills GatherLocation (map, save point id or pawn transform, area name); - load: LoadGame applies the save, then opens its map; the exploration game mode calls ApplyPendingLocation when the player spawns there, whi...

NodeKindCategoryParametersReturnsDescription
Can Save Now (CanSaveNowBP)pureRPG Saga|SaveSource: ERSESaveRequestSource
OutReasons: TArray<FName> (out)
boolWhether a save from Source is allowed now (save blocks, plus no battle running); OutReasons lists why not.
Close Save Screen (CloseSaveScreen)functionRPG Saga|SaveCloses the save screen.
Decode Thumbnail (DecodeThumbnail)function, staticRPG Saga|SaveBytes: TArray<uint8> (ref)UTexture2D*A texture from a save's thumbnail bytes, or null.
Find Continue Slot (FindContinueSlot)pureRPG Saga|SaveOutSlotName: FString (out)boolMost recent loadable slot (Continue). Returns false when there is none.
Get Result Text (GetResultText)pure, staticRPG Saga|SaveResult: ERSESaveResult
bLoading: bool
FTextPlayer-facing text for a save / load result (empty for Ok).
Has Any Save (HasAnySave)pureRPG Saga|SaveboolAt least one loadable save exists (main menu Load / Continue).
Is Save Item (IsSaveItem)pure, staticRPG Saga|SaveItem: URSEItemData*boolItem is the save item (the party menu routes it to UseSaveItem instead of a use ability).
Is Save Screen Open (IsSaveScreenOpen)pureRPG Saga|SaveboolThe save screen is open.
Load Game (LoadGame)functionRPG Saga|SaveSlotName: FString
bDeferTravel: bool = false
ERSESaveResultLoads SlotName (state applied at once, in the game instance) and opens its map. With bDeferTravel the map opens only on TravelToLoadedGame (the main menu fades out first). Loads started elsewhere (URSESaveSubsystem::LoadFromSlot) travel immediately.
Open Save Screen (OpenSaveScreen)functionRPG Saga|SaveRequest: FRSESaveRequest (ref)boolOpens the save screen for Request over the current world.
Save to Slot (SaveToSlot)functionRPG Saga|SaveSlotName: FString
Request: FRSESaveRequest (ref)
ERSESaveResultSaves the current game with the flow's location info. Used by the save screen and dev commands.
Travel to Loaded Game (TravelToLoadedGame)functionRPG Saga|SaveboolOpens the map of the last loaded save. Returns false if nothing is pending.
Use Save Item (UseSaveItem)functionRPG Saga|SaveItem: URSEItemData*ERSESaveResultThe save item was chosen (party menu hook, dev command). Blocked in battles, dialogs, cutscenes and no-save zones; otherwise opens the save screen. The item is removed only after a successful save.
Use Save Point (UseSavePoint)functionRPG Saga|SaveSavePointId: FNameERSESaveResultA save point was used: restores the party (setting), autosaves (setting) and requests a save, which opens the save screen.

URSESaveInteropLibrary

Module RSECore. Save interop (D-165): the state of any RPG Saga Engine save section (narrative flags, dialog, quests, inventory, party, map, time...) as bytes or JSON, so a project that has its own SaveGame can keep our state inside it, and put it back when its game loads.

NodeKindCategoryParametersReturnsDescription
Export Section To Bytes (ExportSectionToBytes)function, staticRPG Saga|Save|InteropWorldContextObject: UObject*
SectionId: FName
OutBytes: TArray<uint8> (out)
OutVersion: int32 (out)
boolOne section's current state in its own save format, with its format version. Returns false when no system owns that section.
Export Section To JSON (ExportSectionToJson)function, staticRPG Saga|Save|InteropWorldContextObject: UObject*
SectionId: FName
OutJson: FString (out)
boolOne section as JSON (the same text format, one entry).
Export Sections To Bytes (ExportSectionsToBytes)function, staticRPG Saga|Save|InteropWorldContextObject: UObject*
SectionIds: TArray<FName> (ref)
OutBytes: TArray<uint8> (out)
int32Several sections in one byte array. SectionIds empty = every section. Returns how many sections were written.
Export Sections To JSON (ExportSectionsToJson)function, staticRPG Saga|Save|InteropWorldContextObject: UObject*
SectionIds: TArray<FName> (ref)
OutJson: FString (out)
int32Several sections as a JSON text (data in Base64), for a text based SaveGame, a cloud save or a log. SectionIds empty = every section.
Get Save Section Ids (GetSectionIds)function, staticRPG Saga|Save|InteropWorldContextObject: UObject*
OutSectionIds: TArray<FName> (out)
Ids of the save sections the running game has, in load order (Party, Narrative, Quests...). Session-only sections are left out.
Import Section From Bytes (ImportSectionFromBytes)function, staticRPG Saga|Save|InteropWorldContextObject: UObject*
SectionId: FName
Bytes: TArray<uint8> (ref)
Version: int32
boolReplaces one section's state with bytes written by Export Section To Bytes. Returns false when the section is unknown or the data cannot be read.
Import Section From JSON (ImportSectionFromJson)function, staticRPG Saga|Save|InteropWorldContextObject: UObject*
Json: FString
boolApplies a JSON text that holds a single section. Returns false unless exactly that text applied.
Import Sections From Bytes (ImportSectionsFromBytes)function, staticRPG Saga|Save|InteropWorldContextObject: UObject*
Bytes: TArray<uint8> (ref)
OutImported: TArray<FName> (out)
int32Applies a byte array written by Export Sections To Bytes. Returns how many sections were applied; OutImported lists them.
Import Sections From JSON (ImportSectionsFromJson)function, staticRPG Saga|Save|InteropWorldContextObject: UObject*
Json: FString
OutImported: TArray<FName> (out)
int32Applies a text written by Export Sections To JSON. Returns how many sections were applied; OutImported lists them.

URSESaveSessionPolicy

Module RSECore. Who may save and load during a co-op session (D-124 §4, D-139), and what a refused player reads.

NodeKindCategoryParametersReturnsDescription
Can Load (CanLoad)overrideRPG Saga|SaveQuery: FRSESaveSessionQuery (ref)
OutReason: FText (out)
boolWhether this load may happen; false with a reason. Default: not on a guest; the host only with bAllowLoadInSession.
Can Save (CanSave)overrideRPG Saga|SaveQuery: FRSESaveSessionQuery (ref)
OutReason: FText (out)
boolWhether this save may happen; false with a reason the player reads. Default: not on a guest.
On Loaded in Session (OnLoadedInSession)overrideRPG Saga|SaveSlotName: FStringA save was loaded on the host while a session runs (after every system applied it). Default: nothing; RSENet also listens to URSESaveSubsystem::OnLoadedInSession to re-send the state and move everyone to the loaded map.

URSESaveSlotsViewModel

Module RSE. The save / load slot screen (D-010, D-045): one row per slot, autosave first, with thumbnail, area, party, play time, money and date.

NodeKindCategoryParametersReturnsDescription
Answer Overwrite (AnswerOverwrite)functionRPG Saga|UI|SavebYes: boolAnswers the overwrite question.
Choose (Choose)functionRPG Saga|UI|SaveChooses the selected slot (asks first when saving over a save; answers the question when it is open).
Choose Slot (ChooseSlot)functionRPG Saga|UI|SaveIndex: int32Selects a slot and chooses it (a click).
Leave (Leave)functionRPG Saga|UI|SaveLeaves the screen (or the overwrite question).
Move Selection (MoveSelection)functionRPG Saga|UI|SaveDirection: int32Move Selection
Refresh Slots (RefreshSlots)functionRPG Saga|UI|SaveRe-reads the slots, keeping the selected one.
Select (Select)functionRPG Saga|UI|SaveIndex: int32Select

URSESaveSubsystem

Module RSECore. Saves and loads the whole game (D-010).

NodeKindCategoryParametersReturnsDescription
Autosave (Autosave)functionRPG Saga|SaveSavePointId: FNameERSESaveResultWrites to the next autosave slot (called by save points before the slot menu; SavePointId may be None).
Can Save Now (CanSaveNowBP)pureRPG Saga|SaveSource: ERSESaveRequestSource
OutReasons: TArray<FName> (out)
boolWhether a save from Source is allowed now; OutReasons lists the blocks that apply (battle, dialog, no-save zone...).
Delete Slot (DeleteSlot)functionRPG Saga|SaveSlotName: FStringboolDeletes a save slot (its file and backup).
Does Slot Exist (DoesSlotExist)pureRPG Saga|SaveSlotName: FStringboolA save exists in the slot.
Flush Pending Writes (FlushPendingWrites)functionRPG Saga|Save|PlatformTimeoutSeconds: floatboolWaits at most TimeoutSeconds for writes in flight (app suspend). Returns true when nothing is left.
Get Autosave Slot Name (GetAutosaveSlotName)pureRPG Saga|SaveFStringName of the (first) autosave slot.
Get Autosave Slot Names (GetAutosaveSlotNames)pureRPG Saga|SaveOutSlots: TArray<FString> (out)Every autosave slot in rotation order (empty without autosave).
Get Backend Type (GetBackendType)pureRPG Saga|Save|PlatformERSESaveBackendTypeWhich backend the project uses.
Get Last Save Result (GetLastSaveResult)pureRPG Saga|SaveERSESaveResultResult of the last save that finished (async saves: once they complete).
Get Play Time Seconds (GetPlayTimeSeconds)pureRPG Saga|SavedoublePlay time of this game in seconds.
Get Save User (GetSaveUser)pureRPG Saga|Save|PlatformFRSESaveUserWhose saves are read and written: the primary platform user (URSEPlatformUserSubsystem keeps it current).
Get Seconds Since Last Autosave (GetSecondsSinceLastAutosave)pureRPG Saga|SavedoubleSeconds since the last successful autosave in this session (a large value when none).
Get Slot Info (GetSlotInfo)pureRPG Saga|SaveSlotName: FString
OutInfo: FRSESaveSlotInfo (out)
boolMetadata of one slot. Returns false if the slot is empty or unreadable (a damaged slot without a readable backup reports bExists and bCorrupt; one read from its backup reports bFromBackup).
Get Slot Infos (GetSlotInfos)pureRPG Saga|SaveOutInfos: TArray<FRSESaveSlotInfo> (out)Metadata of every manual slot (and the autosave slot first, when enabled), empty slots included.
Get Slot Name (GetSlotName)pureRPG Saga|SaveSlotIndex: int32FStringName of manual save slot N (0-based).
Get State Section Revision (GetSectionRevision)pureRPG Saga|SaveSectionId: FNameint32How many times SectionId changed this session (0 = never).
Get Stored Slot Names (GetStoredSlotNames)pureRPG Saga|Save|PlatformOutSlots: TArray<FString> (out)Every slot the backend stores for the current user (also slots outside the configured slot names).
Is Autosave Slot (IsAutosaveSlot)pureRPG Saga|SaveSlotName: FStringboolSlotName is one of the autosave slots (protected from manual saves).
Is Busy (IsBusy)pureRPG Saga|SaveboolAn asynchronous save or load is running.
Is Play Time Running (IsPlayTimeRunning)pureRPG Saga|SaveboolThe play time clock runs (paused in menus).
Load from Slot (LoadFromSlot)functionRPG Saga|SaveSlotName: FStringERSESaveResultReads and applies a save to every system. In the game prefer Load Game (Save library), which also opens the saved map.
Load from Slot Async (LoadFromSlotAsync)functionRPG Saga|SaveSlotName: FStringERSESaveResultSame as LoadFromSlot with the file read on a worker thread; OnLoaded or OnLoadFailed report the outcome.
Mark State Section Changed (MarkSectionChanged)functionRPG Saga|SaveSectionId: FNameSectionId's state changed: its revision grows now; OnSectionChanged follows once per frame (coalesced).
On Load Failed (BP_OnLoadFailed)eventRPG Saga|SaveSlotName: FString
Result: ERSESaveResult
A load failed (the slot and why).
On Loaded (BP_OnLoaded)eventRPG Saga|SaveSlotName: FStringA save was applied to every system (the saved map opens next).
On Save Failed (BP_OnSaveFailed)eventRPG Saga|SaveSlotName: FString
Result: ERSESaveResult
A save failed: the slot and why (No Space, User Signed Out, Failed). Async saves report when they complete.
On Save Requested (BP_OnSaveRequested)eventRPG Saga|SaveRequest: FRSESaveRequest (ref)A save was requested and is allowed now (the save screen opens).
On Saved (BP_OnSaved)eventRPG Saga|SaveSlotName: FString
bSuccess: bool
A save finished (async saves report later).
On State Section Changed (BP_OnSectionChanged)eventRPG Saga|SaveSectionId: FName
Revision: int32
A state section changed (once per frame per section).
Pick Autosave Slot (PickAutosaveSlot)pureRPG Saga|SaveFStringWhere the next autosave goes: the first empty autosave slot, else the oldest one.
Pop Save Block (PopSaveBlock)functionRPG Saga|SaveReason: FNameLifts one save block pushed with the same reason.
Push Save Block (PushSaveBlock)functionRPG Saga|SaveReason: FName
Scope: ERSESaveBlockScope = All
Blocks saving until the matching Pop. Reasons are counted, so overlapping zones stack.
Request Save (RequestSave)functionRPG Saga|SaveRequest: FRSESaveRequest (ref)ERSESaveResultValidates a request (blocks) and broadcasts OnSaveRequested so the RSE module can show the slot menu.
Reset All for New Game (ResetAllForNewGame)functionRPG Saga|SaveNew game for everything that is saved: every participant resets (IRSESaveParticipant::ResetForNewGame, in registration order) and play time restarts. The single entry point of New Game (D-045).
Save to Slot (SaveToSlot)functionRPG Saga|SaveSlotName: FString
Request: FRSESaveRequest (ref)
ERSESaveResultBuilds and writes a save now, without the save screen. In the game world prefer Save Game (Save library), which also records the location.
Save to Slot Async (SaveToSlotAsync)functionRPG Saga|SaveSlotName: FString
Request: FRSESaveRequest (ref)
ERSESaveResultSame as SaveToSlot, but the file is written on a worker thread. The state is captured immediately.
Set Play Time Running (SetPlayTimeRunning)functionRPG Saga|SavebRunning: boolPauses the clock (main menu, pause menu).
Set Save User (SetSaveUser)functionRPG Saga|Save|PlatformUser: FRSESaveUser (ref)Switches whose saves are used (the platform user layer calls it on user changes and sign-in / sign-out).

URSESceneOverlayViewModel

Module RSE. The overlay of a story scene (D-043): letterbox bars, the skip key hint and the skip confirmation.

NodeKindCategoryParametersReturnsDescription
Answer Skip (AnswerSkip)functionRPG Saga|UI|ScenebSkip: boolAnswers the question.
Request Skip (RequestSkip)functionRPG Saga|UI|SceneAsks to skip (the skip key outside the question).
Select Answer (SelectAnswer)functionRPG Saga|UI|SceneIndex: int32Moves the cursor of the question.

URSEScenePlayerSubsystem

Module RSE. Plays story scenes (D-043, docs/design/scenes.md): URSESceneData assets requested by the Play Scene effect (FRSENarrativeEvents::OnSceneRequested) or directly (PlayScene, the scene trigger, the theater later).

NodeKindCategoryParametersReturnsDescription
Can Local Player Skip (CanLocalPlayerSkip)pureRPG Saga|ScenesboolWhether this machine's player may ask to skip the scene on screen (the host, a voter, anyone, by the rule).
Get Current Scene (GetCurrentScene)pureRPG Saga|ScenesURSESceneData*The scene on screen, or none.
Get Num Pending (GetNumPending)pureRPG Saga|Scenesint32Scenes waiting behind the current one.
Is Scene Playing (IsScenePlaying)pureRPG Saga|ScenesboolA scene is on screen (from its start to the end of the camera return).
On Scene Playing Changed (BP_OnScenePlayingChanged)eventRPG Saga|ScenesbPlaying: boolA scene started (true) or ended, camera back (false). Blueprint.
Play Scene (PlayScene)functionRPG Saga|ScenesScene: URSESceneData*
bReplay: bool = false
boolQueues Scene (plays at once when nothing else runs). Replays run no end effects. Returns false if refused (duplicate, no sequence).
Request Skip (RequestSkip)functionRPG Saga|ScenesboolSkip key: opens the confirmation (or skips at once, see URSESceneSettings::bConfirmSkip). Returns true if handled.
Skip Now (SkipNow)functionRPG Saga|ScenesSkips now: drops the dialogs, jumps to the end, returns the camera.
Submit Skip (SubmitSkip)functionRPG Saga|ScenesboolAsks to skip the scene on screen through the command bus (Skip Scene): the authority's skip policy decides (the host, a vote, anyone) and the skip reaches every machine. Single player: skips at once. Returns whether it was sent or applied.

URSESceneSkipPolicy

Module RSE. Who may skip a story scene in co-op (D-094: the host, or a vote).

NodeKindCategoryParametersReturnsDescription
Decide (Decide)overrideRPG Saga|Scenes|Co-opPlayer: FRSEPlayerId
Scene: URSESceneData*
bMultiplayer: bool
ERSESceneSkipDecisionWhat Player's request to skip Scene does. bMultiplayer: several players share the world.
Get Votes Needed (GetVotesNeeded)overrideRPG Saga|Scenes|Co-opPlayers: int32int32Votes needed to skip with Players players in the session. Default: Co-op Flow -> Scene Skip Vote Share of them (at least 1).

URSEScreenLayout

Module RSE. Base of the screen layouts (D-162 P61, docs/product/ui-styles.md "Layouts"): one class per arrangement of a screen.

NodeKindCategoryParametersReturnsDescription
Arrange (Arrange)overrideRPG Saga|UI LayoutContext: URSEScreenLayoutContext*Places the screen's parts (Context: the parts and the helpers).
Get Layout Name (GetLayoutName)pureRPG Saga|UI LayoutFTextThe name in menus (Display Name, else the class name).

URSEScreenLayoutContext

Module RSE. What a screen hands its layout (D-162 P61): the canvas, the screen's parts by name (built by the screen with the active UI style) and a few helpers to place or group them.

NodeKindCategoryParametersReturnsDescription
Get Canvas (GetCanvas)pureRPG Saga|UI LayoutUCanvasPanel*Get Canvas
Get Canvas Size (GetCanvasSize)pureRPG Saga|UI LayoutFVector2DThe canvas size in layout units (the last drawn size; 1920 x 1080 before the first frame).
Get Margin (GetMargin)pureRPG Saga|UI LayoutfloatThe screen margin (UI -> Screen Margin), in layout units (1080p reference).
Get Part (GetPart)pureRPG Saga|UI LayoutPart: FNameUWidget*The part with this name (null when the screen has none, e.g. a part only some variants use).
Get Part Names (GetPartNames)pureRPG Saga|UI LayoutTArray<FName>Every part name, in stacking order.
Get Safe Insets (GetSafeInsets)pureRPG Saga|UI LayoutFMarginD-180: the safe-area insets every Place helper keeps parts inside (notch, rounded corners, home indicator; zero on PC), in layout units. Full-screen parts ignore them.
Get Screen (GetScreen)pureRPG Saga|UI LayoutURSEHUDWidgetBase*The screen widget being arranged.
Group Parts (GroupParts)functionRPG Saga|UI LayoutGroupName: FName
Parts: TArray<FName> (ref)
bHorizontal: bool
Spacing: float
HAlign: TEnumAsByte<EHorizontalAlignment>
VAlign: TEnumAsByte<EVerticalAlignment>
bFramed: bool = false
FrameKind: ERSEPanelKind = Hud
FillPart: FName = None
UWidget*Puts parts side by side (or one under the other) in a new part GroupName, Spacing apart, optionally in the style's frame of FrameKind. Missing parts are skipped. FillPart (optional) takes the room left in the group (a bar stretched across the screen: the parts after it end at the far edge). Returns the group (place it like any part).
Has Flag (HasFlag)pureRPG Saga|UI LayoutFlag: FNameboolHas Flag
Has Part (HasPart)pureRPG Saga|UI LayoutPart: FNameboolHas Part
Hide Part (HidePart)functionRPG Saga|UI LayoutPart: FNameKeeps a part off screen (the screen still updates it).
Place Part (PlacePart)functionRPG Saga|UI LayoutPart: FName
Anchor: FVector2D
Alignment: FVector2D
Offset: FVector2D
UCanvasPanelSlot*Places a part at a normalized point of the screen (Anchor 0..1), its own point Alignment there, moved by Offset; it keeps its own size. Placing a part again moves it (it keeps its stacking order).
Place Part Fitted (PlacePartFitted)functionRPG Saga|UI LayoutPart: FNameUCanvasPanelSlot*Centers a part at its own size; on a screen too small for it, it shrinks as a whole (menus of a fixed size).
Place Part Full Screen (PlacePartFullScreen)functionRPG Saga|UI LayoutPart: FNameUCanvasPanelSlot*A full-screen part (backdrops, dims).
Place Part Stretched (PlacePartStretched)functionRPG Saga|UI LayoutPart: FName
Anchors: FAnchors
Offsets: FMargin
Alignment: FVector2D
bAutoSize: bool = false
UCanvasPanelSlot*Places a part with anchors that may stretch (Anchors min != max: Offsets are margins from the anchors).

URSEScreenLibrary

Module RSE. Theme, palette, key prompts and UI sounds for Widget Blueprints (D-052).

NodeKindCategoryParametersReturnsDescription
Apply Text Role (ApplyTextRole)function, staticRPG Saga|UI|ThemeText: UTextBlock*
Role: ERSETextRole
Applies a text role (font, shadow, the role's color) to Text.
Apply Text Role Color (ApplyTextRoleColor)function, staticRPG Saga|UI|ThemeText: UTextBlock*
Role: ERSETextRole
Color: FLinearColor
Applies a text role with a palette color.
Fill Member Cards (FillMemberCards)function, staticRPG Saga|UI|ListsPanel: UPanelWidget*
CardClass: TSubclassOf<URSEMemberCardWidget>
Members: TArray<FRSEMemberView> (ref)
Fills Panel with one CardClass card per member (cards already there are reused, extra ones removed). The card Widget Blueprint derives from RSEMemberCardWidget and names its widgets NameText, HPBar... (see there).
Get Action Key Label (GetActionKeyLabel)pure, staticRPG Saga|UI|PromptsPlayer: APlayerController*
Action: UInputAction*
FTextLabel of the key mapped to an Enhanced Input action for the device in use. Player may be null.
Get Generic Action Text (GetGenericActionText)pure, staticRPG Saga|UI|PromptsMenuKey: ERSEMenuKeyFTextGeneric action names of the theme (Confirm, Back, Select, Page, Close).
Get Key Label (GetKeyLabel)pure, staticRPG Saga|UI|PromptsKey: FKeyFTextLabel of a key ("Enter", "A", "✕" in the PlayStation label set).
Get Key Prompt Icon (GetKeyPromptIcon)function, staticRPG Saga|UI|PromptsKey: FKey
Icon: FRSEKeyPromptIcon (out)
boolD-176: the key prompt provider's icon for Key on the device in use (Common UI controller data with the companion plugin). Returns false: show the text label (Get Key Label).
Get Keys Label (GetKeysLabel)pure, staticRPG Saga|UI|PromptsKeys: TArray<FKey> (ref)FTextLabel of the primary key of Keys for the device in use (empty when it has none).
Get Menu Key Label (GetMenuKeyLabel)pure, staticRPG Saga|UI|PromptsMenuKey: ERSEMenuKeyFTextLabel of a generic menu key for the device in use.
Get Panel Brush (GetPanelBrush)pure, staticRPG Saga|UI|ThemeKind: ERSEPanelKindFSlateBrushThe brush of a panel kind (rounded gradient box with the theme's outline).
Get Panel Style (GetPanelStyle)pure, staticRPG Saga|UI|ThemeKind: ERSEPanelKindFRSEUIPanelStyleThe style of a panel kind (colors, padding, corner radius).
Get Row Style (GetRowStyle)pure, staticRPG Saga|UI|ThemeFRSEUIRowStyleThe list row style (selected / active / hover fills, cursor).
Get Spacing (GetSpacing)pure, staticRPG Saga|UI|ThemeStep: ERSEUISpacingfloatA spacing step of the theme.
Get Tag Label (GetTagLabel)pure, staticRPG Saga|UI|ThemeTag: FGameplayTagFTextName of a stat or resource tag for menus (UI -> TagLabels, else the attribute registry's display name).
Get Theme Font (GetThemeFont)pure, staticRPG Saga|UI|ThemeRole: ERSETextRole
SizeOverride: int32 = 0
FSlateFontInfoFont of a text role (UI Theme -> Fonts). SizeOverride > 0 replaces the role's size.
Get Theme Text Color (GetThemeTextColor)pure, staticRPG Saga|UI|ThemeRole: ERSETextRoleFLinearColorDefault color of a text role.
Get UIColor (GetUIColor)pure, staticRPG Saga|UI|ThemeColor: ERSEUIColorFLinearColorA palette color.
Is Using Gamepad (IsUsingGamepad)pure, staticRPG Saga|UI|PromptsboolThe player uses a gamepad now (prompts show gamepad buttons).
Join Menu Entries (JoinMenuEntries)pure, staticRPG Saga|UI|ListsEntries: TArray<FRSEMenuEntryView> (ref)FTextMenu entries as one text, one per line, the selected one marked with the theme's cursor glyph.
Join Text Lines (JoinTextLines)pure, staticRPG Saga|UI|ListsLines: TArray<FRSETextLineView> (ref)FTextLines as one text, one per line ("Text Detail").
Join Texts (JoinTexts)pure, staticRPG Saga|UI|ListsTexts: TArray<FText> (ref)
Separator: FText (ref)
FTextTexts joined with Separator (a line break when empty).
Make Menu Prompt (MakeMenuPrompt)pure, staticRPG Saga|UI|PromptsMenuKey: ERSEMenuKey
Action: FText
FRSEKeyPromptViewA prompt for a menu key (skip it when Key is empty).
Play UISound (PlayUISound)function, staticRPG Saga|UI|SoundWorldContextObject: UObject*
Sound: ERSEUISound
Plays a UI sound (Audio.UI.* in the sound catalog).

URSEScreenPresenter

Module RSE. RSE Screen Presenter

NodeKindCategoryParametersReturnsDescription
Dismiss Screen (DismissScreen)overrideRPG Saga|UI|HostScreen: URSEScreenWidget*Screen presented by this presenter is closing (it leaves its parent right after).
Present Screen (PresentScreen)overrideRPG Saga|UI|HostScreen: URSEScreenWidget*
Player: APlayerController*
ZOrder: int32
boolShows Screen for Player (ZOrder: the screen's viewport order, a hint). Returns false to let the screen add itself to the viewport.

URSEScreenViewModel

Module RSE. The data and the actions of one screen, for the screen's widget (D-052, docs/design/umg-screens.md).

NodeKindCategoryParametersReturnsDescription
Back (Back)overrideRPG Saga|UI|ViewModelboolBack / cancel (Esc, gamepad B). Returns true when the view-model used it.
Close (Close)functionRPG Saga|UI|ViewModelCloses the screen: OnClosed fires once, the host removes the widget.
Confirm (Confirm)overrideRPG Saga|UI|ViewModelboolConfirm / accept (Enter, gamepad A). Returns true when the view-model used it.
Get Owning Player (GetOwningPlayer)pureRPG Saga|UI|ViewModelAPlayerController*Get Owning Player
Get Revision (GetRevision)pureRPG Saga|UI|ViewModelint32Change counter: grows on every NotifyChanged (widgets can skip rebuilds when it did not move).
Is Closed (IsClosed)pureRPG Saga|UI|ViewModelboolThe screen was closed (Close ran). Actions do nothing after it.
Navigate (Navigate)overrideRPG Saga|UI|ViewModelDirection: FIntPointboolCursor movement: X = right, Y = down (one step per press). Returns true when used.
On Changed (OnChanged)eventRPG Saga|UI|ViewModelThe data changed: widgets rebuild what they show.
On Closed (OnClosed)eventRPG Saga|UI|ViewModelThe screen is done (the host removes the widget). Fired once.
Page (Page)overrideRPG Saga|UI|ViewModelDirection: int32boolPrevious (-1) / next (+1) page, tab or category. Returns true when used.
Play UISound (PlayUISound)functionRPG Saga|UI|ViewModelSound: ERSEUISoundPlays a UI sound in the owner's world. Actions play their own feedback (Confirm, Error...), so every screen of the view-model sounds the same; bSilent view-models (tests, previews) play nothing.

URSESeedSource

Module RSECore. The game's source of seeds (D-124 §3.6, D-133): every random roll with an effect on the game draws its seed here instead of FMath::Rand, so a game is reproducible from its world seed (tests, replays) and the host is the only one deciding (co-op).

NodeKindCategoryParametersReturnsDescription
Get Draw Count (GetDrawCount)pureRPG Saga|SeedsStream: FNameint32How many seeds Stream has drawn.
Get World Seed (GetWorldSeed)pureRPG Saga|Seedsint32The game's root seed.
Next Seed (NextSeed)functionRPG Saga|SeedsStream: FNameint32The next seed of Stream (never 0). Use one per random event: a battle, an encounter roll, a match.
Set World Seed (SetWorldSeed)functionRPG Saga|SeedsSeed: int32Starts every stream again from Seed (replays, tests). 0 = a new random world seed.

URSESessionAsyncAction

Module RSEOnline. Latent Blueprint nodes for the session flow (D-135): Host Session, Find Sessions and Join Session with success and failure pins.

NodeKindCategoryParametersReturnsDescription
Find Sessions (Async) (FindSessionsAsync)function, staticRPG Saga|OnlineWorldContextObject: UObject*URSESessionAsyncAction*Searches for sessions. Succeeds with the results (possibly none).
Host Session (Async) (HostSessionAsync)function, staticRPG Saga|OnlineWorldContextObject: UObject*
Params: FRSEHostSessionParams
URSESessionAsyncAction*Hosts a session (Project Settings -> RPG Saga Engine -> Online; Params override some). Succeeds when hosting.
Join Session (Async) (JoinSessionAsync)function, staticRPG Saga|OnlineWorldContextObject: UObject*
ResultIndex: int32
URSESessionAsyncAction*Joins a search result and travels to the host. Succeeds when connected (after the map loaded).
On Failure (OnFailure)eventRPG Saga|OnlineResults: TArray<FRSESessionSearchResult> (ref)
Error: FRSESessionErrorInfo (ref)
The operation failed or was refused; Error says why (its Message is for the player).
On Success (OnSuccess)eventRPG Saga|OnlineResults: TArray<FRSESessionSearchResult> (ref)
Error: FRSESessionErrorInfo (ref)
Hosting, connected, or the search finished. Results: the sessions found (Find only).

URSESessionLibrary

Module RSEOnline. Helpers for session screens.

NodeKindCategoryParametersReturnsDescription
Get Session Error Message (GetSessionErrorMessage)pure, staticRPG Saga|OnlineError: ERSESessionErrorFTextThe player-facing (localized) message of a session error.
Get Session State Text (GetSessionStateText)pure, staticRPG Saga|OnlineState: ERSESessionStateFTextA session state in words ("Hosting", "Searching for sessions...").
Is Session Joinable (IsSessionJoinable)pure, staticRPG Saga|OnlineResult: FRSESessionSearchResult (ref)boolThe result can be joined now (same game version, a free place).

URSESessionProvider

Module RSEOnline. The one interface between the session flow and an online service (D-135).

NodeKindCategoryParametersReturnsDescription
Cancel Find Sessions (CancelFindSessions)overrideRPG Saga|Online|ProviderStop a running search (no answer needed; a late ReportFindComplete is ignored).
Find Sessions (FindSessions)overrideRPG Saga|Online|ProviderRequest: FRSEProviderFindRequest (ref)Search for sessions. Answer: ReportFindComplete.
Get Display Name (GetDisplayName)overrideRPG Saga|Online|ProviderFTextShort name for logs and the lobby screen ("LAN", "Steam").
Get Local Player Name (GetLocalPlayerName)overrideRPG Saga|Online|ProviderFStringThe local player's name on the service (empty = unknown).
Get Local Player Net Id (GetLocalPlayerNetId)overrideRPG Saga|Online|ProviderFStringThe local player's id on the service (string form; empty when unknown).
Host Session (HostSession)overrideRPG Saga|Online|ProviderRequest: FRSEProviderHostRequest (ref)Create and advertise a session. Answer: ReportHostComplete.
Invite Friend (InviteFriend)overrideRPG Saga|Online|ProviderFriendNetId: FStringboolInvite one friend to the current session. Returns false when the invitation could not be sent.
Is Available (IsAvailable)overrideRPG Saga|Online|ProviderOutReason: FString (out)boolThe service can host and find sessions now. OutReason explains why not (logs).
Join Session (JoinSession)overrideRPG Saga|Online|ProviderResultIndex: int32Join the search result ResultIndex (or the accepted invitation's index). Answer: ReportJoinComplete.
Leave Session (LeaveSession)overrideRPG Saga|Online|ProviderLeave (client) or end (host) the session. Answer: ReportLeaveComplete.
Query Friends (QueryFriends)overrideRPG Saga|Online|ProviderRead the friends list. Answer: ReportFriends.
Register Player (RegisterPlayer)overrideRPG Saga|Online|ProviderPlayerNetId: FString
bJoined: bool
Host: a player joined (bJoined) or left the game; services that track members register them. No answer.
Report Connection Lost (ReportConnectionLost)functionRPG Saga|Online|ProviderError: ERSESessionError
Detail: FString
The service lost the session (not the game connection; the engine reports that one).
Report Find Complete (ReportFindComplete)functionRPG Saga|Online|ProviderbSuccess: bool
Results: TArray<FRSESessionSearchResult> (ref)
Error: ERSESessionError
Detail: FString
Report Find Complete
Report Friends (ReportFriends)functionRPG Saga|Online|ProviderFriends: TArray<FRSEFriendInfo> (ref)Report Friends
Report Host Complete (ReportHostComplete)functionRPG Saga|Online|ProviderbSuccess: bool
Error: ERSESessionError
Detail: FString
--- Answers to the manager ---
Report Invite Accepted (ReportInviteAccepted)functionRPG Saga|Online|ProviderResult: FRSESessionSearchResult (ref)The player accepted an invitation (overlay or launch command line); Result is joinable with JoinSession(Result.ResultIndex).
Report Join Complete (ReportJoinComplete)functionRPG Saga|Online|ProviderbSuccess: bool
ConnectAddress: FString
Error: ERSESessionError
Detail: FString
ConnectAddress: what the client travels to (an IP:port, or the service's own address form).
Report Leave Complete (ReportLeaveComplete)functionRPG Saga|Online|ProviderReport Leave Complete
Show Invite UI (ShowInviteUI)overrideRPG Saga|Online|ProviderboolOpen the service's own invite overlay. Returns false when it has none.
Supports Invites (SupportsInvites)overrideRPG Saga|Online|ProviderboolThe service has friends and invitations.
Update Lobby (UpdateLobby)overrideRPG Saga|Online|ProviderLobby: FRSELobbyData (ref)Host: advertise the changed lobby (slots, characters, battle flag). No answer.

URSESessionRulesSubsystem

Module RSECore. Owner of the session's rules of play (D-139).

NodeKindCategoryParametersReturnsDescription
Can Change Rules (CanChangeRules)pureRPG Saga|RulesboolWhether this machine's player may change the session rules now (single player and the host: yes).
Get Rule Value (GetRuleValue)pureRPG Saga|RulesOptionId: FName
OutValue: int32 (out)
boolThe session's value of a rule; false when none was published yet (then the machine's own setting holds).
Is Session Rule (IsSessionRule)pure, staticRPG Saga|RulesOptionId: FNameboolOptionId is a session rule (Rules Profiles -> Co-op -> Session Rule Options).
On Session Rule Changed (BP_OnRuleChanged)eventRPG Saga|RulesOptionId: FName
Value: int32

URSESessionSubsystem

Module RSEOnline. Online sessions for Blueprints and the game (D-135, docs/product/online-sessions.md): Host / Find / Join / Leave, invitations, the lobby (slots, characters, join-in-progress admission) and reconnecting, with the provider chosen in Project Settings -> RPG Saga Engine -> Online.

NodeKindCategoryParametersReturnsDescription
Can Invite (CanInvite)pureRPG Saga|OnlineboolInvitations are possible now (the service has them and a session is running).
Close Lobby Screen (CloseLobbyScreen)functionRPG Saga|OnlineCloses the lobby screen when it is open.
Find Sessions (FindSessions)functionRPG Saga|OnlineboolSearches for sessions. OnSessionsFound brings the results (also when there are none).
Get Last Error (GetLastError)pureRPG Saga|OnlineFRSESessionErrorInfoGet Last Error
Get Lobby (GetLobby)pureRPG Saga|OnlineFRSELobbyDataHost: the live lobby. Client: the lobby the host advertised when it was joined.
Get Local Admission (GetLocalAdmission)pureRPG Saga|OnlineERSEJoinAdmissionGet Local Admission
Get Preferred Character (GetPreferredCharacter)pureRPG Saga|OnlineFPrimaryAssetIdGet Preferred Character
Get Provider Name (GetProviderName)pureRPG Saga|OnlineFTextThe provider's name ("LAN", "Steam").
Get Search Results (GetSearchResults)pureRPG Saga|OnlineTArray<FRSESessionSearchResult>Get Search Results
Get Selectable Characters (GetSelectableCharacters)pureRPG Saga|OnlineTArray<FPrimaryAssetId>The characters players can choose (main party members).
Get Session Role (GetSessionRole)pureRPG Saga|OnlineERSESessionRoleGet Session Role
Get Session State (GetSessionState)pureRPG Saga|OnlineERSESessionState--- State ---
Host Session (HostSession)functionRPG Saga|OnlineParams: FRSEHostSessionParams (ref)boolHosts a session with the settings of Project Settings -> RPG Saga Engine -> Online (Params override some). On success the host listens on the current map (or opens Host Map) and OnStateChanged reports Hosting. Returns false when refused at once (busy, already in a session, service unavailable); OnSessionError tells why.
Invite Friend (InviteFriend)functionRPG Saga|OnlineFriendNetId: FStringboolInvites one friend (its Net Id from the friends list) to the current session.
Is Host (IsHost)pureRPG Saga|OnlineboolThis machine hosts the session.
Is in Session (IsInSession)pureRPG Saga|OnlineboolHosting, connected, or reconnecting to a session.
Is Multiplayer (IsMultiplayer)pureRPG Saga|OnlineboolThe session has more than one connected player (co-op rules apply: no tutorials, encounters in live battles).
Is Using Fallback Provider (IsUsingFallbackProvider)pureRPG Saga|OnlineboolThe chosen provider was unavailable and LAN is used instead (Online -> Fallback To LAN).
Join Session (JoinSession)functionRPG Saga|OnlineResultIndex: int32boolJoins a search result (its Result Index) and travels to the host. OnStateChanged reports Connected on arrival.
Leave Session (LeaveSession)functionRPG Saga|OnlineboolLeaves (client) or ends (host) the session; also cancels a search or a reconnect.
On Friends Received (OnFriendsReceived)eventRPG Saga|OnlineFriends: TArray<FRSEFriendInfo> (ref)
On Invite Accepted (OnInviteAccepted)eventRPG Saga|OnlineInvite: FRSESessionSearchResult (ref)The player accepted an invitation; the subsystem joins it (leaving the current session first).
On Lobby Changed (OnLobbyChanged)eventRPG Saga|OnlineLobby: FRSELobbyData (ref)
On Local Admission Changed (OnLocalAdmissionChanged)eventRPG Saga|OnlineAdmission: ERSEJoinAdmissionClient: the host's admission for this player changed (SetLocalAdmission).
On Player Admission Changed (OnPlayerAdmissionChanged)eventRPG Saga|OnlineSlot: FRSELobbySlot (ref)
Admission: ERSEJoinAdmission
Host: a spectating player may play now (the battle ended). The co-op rules give them their character here.
On Player Joined (OnPlayerJoined)eventRPG Saga|OnlineSlot: FRSELobbySlot (ref)
Admission: ERSEJoinAdmission
Host: a player entered, with their slot and what they may do (play, or spectate until the battle ends).
On Player Left (OnPlayerLeft)eventRPG Saga|OnlineSlot: FRSELobbySlot (ref)Host: a player left (their slot is kept for a reconnect when Online -> Keep Slots For Reconnect is on).
On Session Error (OnSessionError)eventRPG Saga|OnlineError: FRSESessionErrorInfo (ref)
On Sessions Found (OnSessionsFound)eventRPG Saga|OnlineResults: TArray<FRSESessionSearchResult> (ref)
On State Changed (OnStateChanged)eventRPG Saga|OnlineNewState: ERSESessionState
OldState: ERSESessionState
--- Events ---
Open Lobby Screen (OpenLobbyScreen)functionRPG Saga|OnlinePlayer: APlayerController*URSELobbyViewModel*Opens the lobby screen (Online -> Lobby Widget Class, else the built-in screen) for Player.
Query Friends (QueryFriends)functionRPG Saga|OnlineboolReads the friends list. OnFriendsReceived brings it.
Set Battle in Progress (SetBattleInProgress)functionRPG Saga|OnlinebInProgress: boolHost: a battle started or ended. Joiners during a battle follow Online -> Join In Progress Policy; when the battle ends, spectating players get OnPlayerAdmissionChanged (Play). Once called, the game owns the flag; until then it follows the party's battle flag at each join.
Set Host on Next Map (SetHostOnNextMap)functionRPG Saga|OnlinebHost: boolThe next game map this machine opens hosts a session on arrival (the main menu's Host Game, D-142).
Set Local Admission (SetLocalAdmission)functionRPG Saga|OnlineAdmission: ERSEJoinAdmissionClient: what the host allows this player now (the co-op transport sets it from the host's answer).
Set Preferred Character (SetPreferredCharacter)functionRPG Saga|OnlineCharacter: FPrimaryAssetIdboolThe party character the local player wants to play. The host's slot takes it at once (when free); a client sends it when joining and the host gives it when free (else another free character).
Set Slot Character (SetSlotCharacter)functionRPG Saga|OnlineSlotIndex: int32
Character: FPrimaryAssetId
boolHost: gives a lobby slot another character. Returns false when taken or not selectable.
Show Invite UI (ShowInviteUI)functionRPG Saga|OnlineboolOpens the online service's invite overlay (Steam, EOS).
Will Host on Next Map (WillHostOnNextMap)pureRPG Saga|OnlineboolWill Host on Next Map

URSEShopViewModel

Module RSE. The shop (D-042): buy / sell tabs, item categories, the list with prices and stock, the quantity step, the party's money and an equipment comparison per member.

NodeKindCategoryParametersReturnsDescription
Begin Quantity (BeginQuantity)functionRPG Saga|UI|ShopOpens the quantity step for the selected row (or says why it cannot be bought / sold).
Buy (Buy)functionRPG Saga|UI|ShopRowIndex: int32
Count: int32
boolBuys Count of a row of the Buy tab directly. Returns true when bought.
Cancel Quantity (CancelQuantity)functionRPG Saga|UI|ShopCancel Quantity
Confirm Quantity (ConfirmQuantity)functionRPG Saga|UI|ShopBuys / sells Quantity of the selected row.
Get Selected Row (GetSelectedRow)pureRPG Saga|UI|ShopOutRow: FRSEShopRowView (out)boolGet Selected Row
Leave (Leave)functionRPG Saga|UI|ShopLeaves the shop.
Move Selection (MoveSelection)functionRPG Saga|UI|ShopDirection: int32Move Selection
Refresh (Refresh)functionRPG Saga|UI|ShopRebuilds the data from the party and the shop (after outside changes).
Select (Select)functionRPG Saga|UI|ShopIndex: int32Puts the cursor on a row (closes the quantity step).
Sell (Sell)functionRPG Saga|UI|ShopRowIndex: int32
Count: int32
boolSells Count of a row of the Sell tab directly. Returns true when sold.
Set Category (SetCategory)functionRPG Saga|UI|ShopIndex: int32Set Category
Set Mode (SetMode)functionRPG Saga|UI|ShopInMode: ERSEShopMode--- Actions ---
Set Quantity (SetQuantity)functionRPG Saga|UI|ShopInQuantity: int32Set Quantity
Step Category (StepCategory)functionRPG Saga|UI|ShopDirection: int32Step Category
Step Quantity (StepQuantity)functionRPG Saga|UI|ShopDelta: int32Changes the quantity: single steps wrap (1 <-> max), big steps clamp.
Switch Mode (SwitchMode)functionRPG Saga|UI|ShopSwitch Mode

URSESpeakerComponent

Module RSE. Binds an actor to a dialog speaker (dialog-proposal.md 6.6): camera cues frame it, emotes play on it, barks float above it.

NodeKindCategoryParametersReturnsDescription
Get Speaker Tag (GetSpeakerTag)pureRPG Saga|DialogFGameplayTagSpeakerTag, or the Speaker asset's tag.

URSEStatSourceLibrary

Module RSECore. The registered stat sources (D-169).

NodeKindCategoryParametersReturnsDescription
Gather Stats (GatherStats)function, staticRPG Saga|Characters|Stat SourceSpawn: FRSEBattleUnitSpawn (ref)
Battle: URSEBattle*
UnitId: int32
OutStats: FRSEExternalUnitStats (out)
URSEUnitStatSource*The stats the registered sources supply for Spawn (the first source, by Priority, that applies). Used by the battle when it builds a unit; Blueprint may call it to preview. Returns the source used, or null when none applies.
Get Stat Sources (GetStatSources)pure, staticRPG Saga|Characters|Stat SourceTArray<URSEUnitStatSource*>The registered stat sources still alive, highest Priority first.
Has Stat Sources (HasStatSources)pure, staticRPG Saga|Characters|Stat SourceboolWhether any stat source is registered (battles skip the lookup otherwise).
Register Stat Source (RegisterStatSource)function, staticRPG Saga|Characters|Stat SourceSource: URSEUnitStatSource*Adds a stat source for every battle built from now on (until unregistered or destroyed). Registering twice does nothing.
Unregister Stat Source (UnregisterStatSource)function, staticRPG Saga|Characters|Stat SourceSource: URSEUnitStatSource*boolRemoves a stat source. Returns true when it was registered.

URSEStatusBehavior

Module RSECore. What a status does to how its bearer acts (D-167): control effects such as Confuse, Charm and Berserk.

NodeKindCategoryParametersReturnsDescription
Allows Ability (AllowsAbility)overrideRPG Saga|Status BehaviorAbility: URSEAbilityData*boolWhether the unit may still use Ability (abilities and consumables alike; a consumable passes its Use Ability). Default: yes.
Can Target Self (CanTargetSelf)overrideRPG Saga|Status BehaviorboolWhether Redirect Target may send the action back at its own user.
Get Control Team (GetControlTeam)overrideRPG Saga|Status BehaviorBattle: URSEBattle*
UnitId: int32
SourceId: int32
FGameplayTagThe team the unit fights for while the status lasts (Team.*). Empty = its own. SourceId = the unit that applied the status (INDEX_NONE if none).
On Turn Started (OnTurnStarted)overrideRPG Saga|Status BehaviorBattle: URSEBattle*
UnitId: int32
The bearer's turn starts (after its status ticks): custom behaviors may act on the battle here.
Redirect Target (RedirectTarget)overrideRPG Saga|Status BehaviorBattle: URSEBattle*
UnitId: int32
Ability: URSEAbilityData*
TargetId: int32
Candidates: TArray<int32> (ref)
int32Where a single-target action of the unit really goes. Candidates = the units the action could reach in this battle mode (any side, the user excluded unless Self Allowed). Return TargetId to keep it. Use the battle's Roll Int / Roll Percent.
Redirects Targets (RedirectsTargets)overrideRPG Saga|Status BehaviorboolWhether this behavior ever redirects targets (the battle skips building candidates otherwise).

URSEStealthAmbushSubsystem

Module RSE. Stealth ambushes on the live map (D-151): the detection shapes on the ground (ARSEStealthOverlay, local), the takedown and ambush prompts, the Strike and Place keys, the takedowns, placing the members before an ambush, the alarm during the ambush battle and the return to stealth after a silent one.

NodeKindCategoryParametersReturnsDescription
Is Placed (IsPlaced)pureRPG Saga|StealthPawn: APawn*boolWhether Pawn holds a spot for an ambush.
Request Place (RequestPlace)functionRPG Saga|StealthPawn: APawn*boolThe player's Place (input, scripts): sneaking = hold this spot and take the next member; else regroup.
Request Strike (RequestStrike)functionRPG Saga|StealthPawn: APawn*boolThe player's Strike (input, scripts): sends the Stealth Strike command for Pawn. Returns true when sent or applied.
Was Last Battle Silent (WasLastBattleSilent)pureRPG Saga|StealthboolThe last battle ended silently (the party went back to sneaking).

URSEStealthRules

Module RSECore. D-151: the stealth rules a game may change (Stealth -> Rules Class): takedowns, the noise of battle actions, who answers an alarm, the return to stealth.

NodeKindCategoryParametersReturnsDescription
Answers Alarm (AnswersAlarm)overrideRPG Saga|StealthSource: FVector (ref)
Radius: float
Listener: FRSEAlarmListener (ref)
boolWhether Listener answers an alarm from Source reaching Radius. Default: inside the radius and able to answer.
Evaluate Takedown (EvaluateTakedown)overrideRPG Saga|StealthInput: FRSETakedownInput (ref)FRSETakedownResultHow a takedown goes. Default: RSETakedown::Evaluate.
Get Action Noise Radius (GetActionNoiseRadius)overrideRPG Saga|StealthAbility: URSEAbilityData*
bUserIsSilent: bool
floatHow far an action is heard in an ambush battle (cm; 0 = silent). Default: RSEAmbush::GetActionNoiseRadius.
Should Return to Stealth (ShouldReturnToStealth)overrideRPG Saga|StealthTracker: FRSEAmbushTracker (ref)
Outcome: ERSEBattleOutcome
bAnyOutsideAware: bool
boolWhether the party goes back to sneaking after the battle. Default: RSEAmbush::ShouldReturnToStealth.

URSETacticsHUDViewModel

Module RSE. The Tactics battle HUD (D-021, D-052): turn order and objective, active unit panel, command menu, attack forecast (D-033), path cost label, deployment panel and start confirmation (D-018), log, banner, key prompts.

NodeKindCategoryParametersReturnsDescription
Answer Start Confirm (AnswerStartConfirm)functionRPG Saga|UI|Battle HUDbStart: boolAnswers the start confirmation (true = start now).
Choose Command (ChooseCommand)functionRPG Saga|UI|Battle HUDIndex: int32Runs command Index (like pressing Confirm on it).
Hover Command (HoverCommand)functionRPG Saga|UI|Battle HUDIndex: int32Moves the command cursor (mouse hover).
Hover Start Confirm (HoverStartConfirm)functionRPG Saga|UI|Battle HUDChoice: int32Hover Start Confirm
Run Deploy Action (RunDeployAction)functionRPG Saga|UI|Battle HUDAction: ERSEDeployActionRun Deploy Action
Select Roster Entry (SelectRosterEntry)functionRPG Saga|UI|Battle HUDIndex: int32Select Roster Entry

URSETacticsInputHost

Module RSE. RSE Tactics Input Host

NodeKindCategoryParametersReturnsDescription
Get Host ATBCommands (GetHostATBCommands)overrideRPG Saga|BattleURSEATBCommandComponent*The classic (ATB) battle commands of this controller (null = none).
Get Host Target Preview (GetHostTargetPreview)overrideRPG Saga|BattleARSETargetPreview*The target preview actor (rings and areas under the units), or null.
Get Tactics Director (GetTacticsDirector)overrideRPG Saga|BattleARSETacticsBattleDirector*The Tactics battle this controller plays now (null = none).
Is Host Party Menu Open (IsHostPartyMenuOpen)overrideRPG Saga|BattleboolThe party menu is open and reads this controller's (forwarded) input.
Reset Host for New Encounter (ResetHostForNewEncounter)overrideRPG Saga|BattleA retried battle starts over: drop the selection, the previews and the menus.
Set Tactics Director (SetTacticsDirector)overrideRPG Saga|BattleDirector: ARSETacticsBattleDirector*boolSwitches to Director's Tactics battle. Returns false while another battle of this controller still runs.

URSETeacherViewModel

Module RSE. The teacher screen (D-144): the lessons (price, requirements), who may learn the selected one, a respec row when the teacher offers it, a Yes / No before paying.

NodeKindCategoryParametersReturnsDescription
Cancel Pending (CancelPending)functionRPG Saga|UI|GrowthCancel Pending
Confirm Pending (ConfirmPending)functionRPG Saga|UI|GrowthboolConfirm Pending
Get Row Count (GetRowCount)pureRPG Saga|UI|Growthint32Get Row Count
Get Teacher (GetTeacher)pureRPG Saga|UI|GrowthURSETeacherData*Get Teacher
Is Respec Row (IsRespecRow)pureRPG Saga|UI|GrowthboolThe respec row is under the cursor.
Refresh (Refresh)functionRPG Saga|UI|GrowthRefresh
Request Learn (RequestLearn)functionRPG Saga|UI|GrowthboolAsks Yes / No for the selected lesson (or respec) for the selected learner.
Select Learner (SelectLearner)functionRPG Saga|UI|GrowthIndex: int32Select Learner
Select Row (SelectRow)functionRPG Saga|UI|GrowthRow: int32Select Row

URSETimeControlSubsystem

Module RSE. The only place that pauses the world or changes its time dilation (D-134).

NodeKindCategoryParametersReturnsDescription
Are Tutorials Allowed (AreTutorialsAllowed)pureRPG Saga|Players|TimeboolTutorial screens may show now (the policy).
Get Requested Time Dilation (GetRequestedTimeDilation)pureRPG Saga|Players|TimefloatThe dilation the requests ask for now (1 without requests).
Is Dilation Held By (IsDilationHeldBy)pureRPG Saga|Players|TimeRequester: UObject*boolIs Dilation Held By
Is Pause Held By (IsPauseHeldBy)pureRPG Saga|Players|TimeRequester: UObject*boolIs Pause Held By
Release Pause (ReleasePause)functionRPG Saga|Players|TimeRequester: UObject*Drops Requester's pause; the world unpauses when no holder is left.
Release Time Dilation (ReleaseTimeDilation)functionRPG Saga|Players|TimeRequester: UObject*Drops Requester's dilation request.
Request Pause (RequestPause)functionRPG Saga|Players|TimeRequester: UObject*
ForPlayer: APlayerController* = None
boolPauses the world for Requester (ForPlayer: whose screen asks, for the policy). Returns true when Requester now holds the pause; false when the policy refuses or the world was already paused by someone else (then nothing to release).
Request Time Dilation (RequestTimeDilation)functionRPG Saga|Players|TimeRequester: UObject*
Dilation: float
boolSets Requester's world time dilation (clamped to 0.0001..1; the smallest request wins). Returns false when the policy refuses (nothing changes: dilate your own actors with CustomTimeDilation instead, or skip the effect).

URSETimePolicy

Module RSE. Decides who may stop or slow the whole world (D-134, docs/design/networking.md §3.9).

NodeKindCategoryParametersReturnsDescription
Apply World Pause (ApplyWorldPause)overrideRPG Saga|Players|TimeWorld: UWorld*
bPaused: bool
boolPauses or unpauses the world once the request is allowed (default: the engine's game pause). Returns true on success.
Are Tutorials Allowed (AreTutorialsAllowed)overrideRPG Saga|Players|TimeWorld: UWorld*boolMay tutorial screens show at all?
Can Dilate World (CanDilateWorld)overrideRPG Saga|Players|TimeWorld: UWorld*
Requester: UObject*
boolMay Requester (hit-stop, block slow motion, the live battle's entry slow motion) change the world's time dilation?
Can Pause World (CanPauseWorld)overrideRPG Saga|Players|TimeWorld: UWorld*
Requester: UObject*
ForPlayer: APlayerController*
boolMay Requester (a tutorial screen, a pause menu) pause the whole world for ForPlayer?
Is World Paused (IsWorldPaused)overrideRPG Saga|Players|TimeWorld: UWorld*boolThe world is paused now (default: the engine's game pause).

URSETimeSubsystem

Module RSECore. The game clock and the weather (D-101, docs/design/time-weather.md).

NodeKindCategoryParametersReturnsDescription
Advance Time (AdvanceTime)functionRPG Saga|TimeHours: floatMoves the clock forward by Hours at once (a wait, a journey).
Get Behavior Modifiers (GetBehaviorModifiers)pureRPG Saga|TimeEnemyTags: FGameplayTagContainer (ref)FRSETimeBehaviorModifiersMultipliers for a roaming enemy now (Time & Weather Rules of the game's rules profile): every rule whose phases, weather and target tags match multiplies in. EnemyTags: the enemy's tags (character / behavior), for rules that target some enemies only. The roaming code multiplies its detection, chase and density by these.
Get Clock Pause Reasons (GetClockPauseReasons)pureRPG Saga|TimeTArray<FName>Why the clock is not moving (empty = it is): Stopped, Disabled, Battle, Dialog, Cutscene, PlayTime, Level, or pushed reasons.
Get Day (GetDay)pureRPG Saga|Timeint32--- Clock: queries ---
Get Day Text (GetDayText)pureRPG Saga|TimeFText"Day 3" in the settings' format.
Get Environment Tags (GetEnvironmentTags)pureRPG Saga|TimeFGameplayTagContainerPhase of day + weather, as tags (battles take these as their environment).
Get Game Hours Per Real Second (GetGameHoursPerRealSecond)pureRPG Saga|TimefloatGame hours per real second at the current speed.
Get Game Time (GetGameTime)pureRPG Saga|TimeFRSEGameTimeGet Game Time
Get Hour (GetHour)pureRPG Saga|TimefloatHour of the day with fractions (13.5 = 13:30).
Get Hour and Minute (GetHourAndMinute)pureRPG Saga|TimeHour: int32 (out)
Minute: int32 (out)
The whole hour (0..23) and the minute (0..59).
Get Phase (GetPhase)pureRPG Saga|TimeFGameplayTagThe phase of the day now (Time.Phase.Dawn / Day / Dusk / Night, or the project's own).
Get Phase Display Name (GetPhaseDisplayName)pureRPG Saga|TimeFTextThe phase's name from the settings.
Get Previous Weather (GetPreviousWeather)pureRPG Saga|WeatherFGameplayTagThe weather fading out during a transition (empty when settled).
Get Season (GetSeason)pureRPG Saga|TimeFGameplayTagThe season now (empty without seasons).
Get Time Scale (GetTimeScale)pureRPG Saga|TimefloatThe story's clock speed (1 = normal).
Get Time Text (GetTimeText)pureRPG Saga|TimeFText"14:05" (or "2:05 PM") in the settings' format.
Get Weather (GetWeather)pureRPG Saga|WeatherFGameplayTagThe weather now (during a transition, the incoming one).
Get Weather Blend (GetWeatherBlend)pureRPG Saga|WeatherfloatTransition progress: 0 = all the previous weather, 1 = settled.
Get Weather Display Name (GetWeatherDisplayName)pureRPG Saga|WeatherFTextThe weather's name (its type's Display Name).
Get Weather Table (GetWeatherTable)pureRPG Saga|WeatherURSEWeatherTableData*Get Weather Table
Get Weather Type (GetWeatherType)pureRPG Saga|WeatherWeather: FGameplayTagURSEWeatherTypeData*The type data of a weather tag (null = not listed in the Weather settings).
Is Clock Running (IsClockRunning)pureRPG Saga|TimeboolThe clock is moving now (enabled, not stopped by the story, not paused by a battle, dialog, scene, menu or level).
Is Phase (IsPhase)pureRPG Saga|TimePhase: FGameplayTagboolThe phase is Phase (or a child of it).
Is Weather (IsWeather)pureRPG Saga|WeatherWeather: FGameplayTagboolThe weather is Weather or a kind of it (Weather.Rain holds in a storm).
Is Weather Locked (IsWeatherLocked)pureRPG Saga|WeatherboolIs Weather Locked
Lock Weather (LockWeather)functionRPG Saga|WeatherWeather: FGameplayTag
TransitionSeconds: float = -1.000000
Forces the weather: no rolls until Unlock (saved). Weather empty = keep the current one.
On Day Changed (OnDayChanged)eventRPG Saga|TimeDay: int32
On Hour Changed (OnHourChanged)eventRPG Saga|TimeDay: int32
Hour: int32
--- Events ---
On Phase Changed (OnPhaseChanged)eventRPG Saga|TimeOldPhase: FGameplayTag
NewPhase: FGameplayTag
On Time Skipped (OnTimeSkipped)eventRPG Saga|TimeFrom: FRSEGameTime
To: FRSEGameTime
On Time State Changed (OnTimeStateChanged)eventRPG Saga|TimeLoaded, new game, pause / speed / lock changed.
On Weather Changed (OnWeatherChanged)eventRPG Saga|WeatherOldWeather: FGameplayTag
NewWeather: FGameplayTag
TransitionSeconds: float
Pop Clock Pause (PopClockPause)functionRPG Saga|TimeReason: FNamePop Clock Pause
Push Clock Pause (PushClockPause)functionRPG Saga|TimeReason: FNamePauses the clock for Reason until the matching Pop (reasons are counted; not saved).
Query Schedule (QuerySchedule)pureRPG Saga|TimeSchedule: FRSETimeSchedule (ref)
Activity: FGameplayTag (out)
Location: FName (out)
EntryIndex: int32 (out)
boolWhat an NPC does now: the first schedule entry that holds (hours or phase, weather, story conditions). Returns false when none does (use the schedule's defaults, filled in Activity / Location).
Resolve Encounter Pool (ResolveEncounterPool)pureRPG Saga|TimePool: URSEEncounterPoolData*URSEEncounterPoolData*The encounter pool to use instead of Pool now (night creatures...): Pool when no swap applies.
Roll Weather (RollWeather)functionRPG Saga|WeatherbInstant: bool = falseRolls the next weather from the table now (unless locked).
Set Clock Stopped (SetClockStopped)functionRPG Saga|TimebStopped: boolStops or starts the clock for the story (saved: stays stopped until started).
Set Day (SetDay)functionRPG Saga|TimeDay: int32Sets the day number (the hour stays).
Set Time (SetTime)functionRPG Saga|TimeHour: float
Mode: ERSESetTimeMode = NextOccurrence
Moves the clock to Hour (NextOccurrence: forward to the next time it shows Hour; SameDay: that hour today).
Set Time Scale (SetTimeScale)functionRPG Saga|TimeScale: floatThe story's clock speed (0.5 = half speed, 2 = double). Saved.
Set Weather (SetWeather)functionRPG Saga|WeatherWeather: FGameplayTag
TransitionSeconds: float = -1.000000
DurationHours: float = 0.000000
boolChanges the weather. TransitionSeconds < 0 = the weather type's; DurationHours 0 = rolled from the type / table. Returns false when the weather is not a listed type.
Set Weather Table (SetWeatherTable)functionRPG Saga|WeatherTable: URSEWeatherTableData*The weather table of the current level / zone (null = the settings' default). Levels and weather volumes set it.
Unlock Weather (UnlockWeather)functionRPG Saga|WeatherUnlock Weather

URSETouchActionResolver

Module RSE, display name Custom (Blueprint). Optional custom resolution of a touch action (Blueprint or C++): replaces the source of an action reference.

NodeKindCategoryParametersReturnsDescription
Resolve Action (ResolveAction)overrideRPG Saga|TouchController: APlayerController*UInputAction*The input action for Controller now (null: the control does nothing).

URSETouchInputSubsystem

Module RSE. "RSE Touch Input" (D-180, docs/product/mobile.md): one local player's touch controls.

NodeKindCategoryParametersReturnsDescription
Clear Context Override (ClearContextOverride)functionRPG Saga|TouchGoes back to the context the game is in (Set Touch Context Override undone).
Get Active Context (GetActiveContext)pureRPG Saga|TouchERSETouchContextThe moment of play the controls are for now.
Get Active Layout (GetActiveLayout)pureRPG Saga|TouchURSETouchLayout*The layout in use now (null: no controls, no gestures).
Get Control Opacity (GetControlOpacity)pure, staticRPG Saga|TouchfloatThe player's Touch Controls Opacity (multiplies the rest opacity of the controls; Touch -> Control Opacity Range).
Get Control Scale (GetControlScale)pure, staticRPG Saga|TouchfloatThe player's Touch Controls Size (multiplies control sizes; Touch -> Control Scale Range).
Get Controls Widget (GetControlsWidget)pureRPG Saga|TouchURSETouchControlsWidget*The widget drawing the controls (null until the first touch layout shows).
Get Touch Input (GetFor)pure, staticRPG Saga|TouchController: APlayerController*URSETouchInputSubsystem*The touch subsystem of Controller's local player (null for remote controllers).
Inject Action (InjectAction)functionRPG Saga|TouchAction: UInputAction*
Value: FVector
boolPresses Action once with Value (converted to the action's value type). Returns false without an Enhanced Input subsystem.
Is Emulating Touch (IsEmulatingTouch)pure, staticRPG Saga|TouchboolThe mouse acts as a finger now (Set Emulate Touch, RSE.Input.Touch.Emulate).
Is Left Handed (IsLeftHanded)pure, staticRPG Saga|TouchboolThe controls are mirrored for left-handed players (anchors, offsets and gesture regions flip left / right).
Is Moving to Tap (IsMovingToTap)pureRPG Saga|TouchboolTap-to-move is walking the explorer now.
Is Touch Available (IsTouchAvailable)pure, staticRPG Saga|TouchboolTouch is a device here: a phone, the touch device in use, emulation or the phone simulation (the options show the touch rows).
On Context Changed (OnContextChanged)eventRPG Saga|TouchContext: ERSETouchContextThe context changed (Blueprint reactions, tutorials).
Press Control (PressControl)functionRPG Saga|TouchControlId: FName
bPressed: bool
boolPresses (or releases) a control of the active layout as a finger would. Returns false when the layout has no such control.
Refresh Context (RefreshContext)functionRPG Saga|TouchReads the context again and applies it (layout, widget, hints).
Resolve Context (ResolveContext)pureRPG Saga|TouchERSETouchContextThe context the game is in now (what the poll finds): an open screen, the battle kind, exploration.
Select Radial Item (SelectRadialItem)functionRPG Saga|TouchControlId: FName
Item: int32
boolPicks an item of a radial control (presses its action once).
Set Context Override (SetContextOverride)functionRPG Saga|TouchContext: ERSETouchContextForces a context (a scripted scene, a minigame of your own); Clear Touch Context Override goes back to the game's.
Set Control Axis (SetControlAxis)functionRPG Saga|TouchControlId: FName
Axis: FVector2D
boolMoves a joystick control (X right, Y up, -1..1; zero releases it). Cancels tap-to-move.
Set Emulate Touch (SetEmulateTouch)function, staticRPG Saga|TouchbEmulate: boolMouse as a finger on PC (Slate's fake touch events).
Set Layout Override (SetLayoutOverride)functionRPG Saga|TouchContext: ERSETouchContext
Layout: URSETouchLayout*
Uses Layout for Context instead of the project's (null clears).
Should Show Controls (ShouldShowControls)pureRPG Saga|TouchboolThe on-screen controls should show now (Touch -> Show Controls and the device in use).
Start Move To (StartMoveTo)functionRPG Saga|TouchWorldPoint: FVectorWalks the explorer to WorldPoint through the Move action (what a Move To tap does).
Stop Move To (StopMoveTo)functionRPG Saga|TouchStops tap-to-move (the Move action is released).

URSETravelSubsystem

Module RSE. Zone navigation and fast travel in the world (D-044, docs/design/zones-travel.md).

NodeKindCategoryParametersReturnsDescription
Cancel Group Travel (CancelGroupTravel)functionRPG Saga|TravelStops the group travel countdown (the host changed their mind, a battle started).
Close World Map (CloseWorldMap)functionRPG Saga|TravelCloses the world map screen.
Get Areas (GetAreasBP)functionRPG Saga|TravelTArray<URSEAreaData*>Every area the game knows (Asset Manager).
Get Block Text (GetBlockText)pure, staticRPG Saga|TravelBlock: ERSEFastTravelBlockFTextPlayer-facing text of a block (empty for None).
Get Current Area (GetCurrentArea)pureRPG Saga|TravelURSEAreaData*Area the player is in now (URSETravelWorldSubsystem of the game world), or null.
Get Fast Travel Block (GetFastTravelBlock)pureRPG Saga|TravelERSEFastTravelBlockWhether the world map can be used now, and why not.
Get Group Travel Seconds Left (GetGroupTravelSecondsLeft)pureRPG Saga|TravelfloatSeconds left of the group travel countdown (0 when none).
Get Travel Destinations (GetDestinationsBP)functionRPG Saga|TravelTArray<URSETravelDestinationData*>Every fast-travel place the game knows (Asset Manager).
Is Group Travel Counting Down (IsGroupTravelCountingDown)pureRPG Saga|TravelboolThe host's group travel is counting down.
Is Traveling (IsTraveling)pureRPG Saga|TravelboolA travel is queued, counting down (co-op), fading out or loading.
Is World Map Open (IsWorldMapOpen)pureRPG Saga|TravelboolThe world map screen is open.
On Group Travel Countdown (BP_OnGroupTravelCountdown)eventRPG Saga|TravelRequest: FRSETravelRequest (ref)
Seconds: float
On Group Travel Requested (BP_OnGroupTravelRequested)eventRPG Saga|TravelRequest: FRSETravelRequest (ref)
Guest: FRSEPlayerId
Open World Map (OpenWorldMapBP)functionRPG Saga|TravelOutReason: FText (out)boolOpens the world map screen (after a running dialog). Returns false when blocked; OutReason says why.
Set Group Travel Policy (SetGroupTravelPolicy)functionRPG Saga|TravelPolicy: URSEGroupTravelPolicy*Replaces the rule at run time; null = the settings' class.
Travel To (TravelTo)functionRPG Saga|TravelRequest: FRSETravelRequest (ref)boolStarts a travel. Waits for a running dialog to close first (an exit that asks, a story effect). Refused while another travel runs or without a map. Returns true when the travel was started or queued.
Travel to Destination (TravelToDestination)functionRPG Saga|TravelDestination: URSETravelDestinationData*boolFast travel to a world map place (must be Available).

URSETravelWorldSubsystem

Module RSE. The area side of a game map (D-044): which area the player is in (an ARSEAreaVolume with an Area, else the map's area), its discovery (narrative state), its no-save restriction (a NoSaveZone block, like ARSENoSaveVolume), and the arrival presentation: the fade-in after a travel and the area banner.

NodeKindCategoryParametersReturnsDescription
Get Current Area (GetCurrentArea)pureRPG Saga|TravelURSEAreaData*Area the player is in (null = the map has none).
Get Map Area (GetMapArea)pureRPG Saga|TravelURSEAreaData*The map-level area.
Show Banner (ShowBanner)functionRPG Saga|TravelArea: URSEAreaData*Shows Area's banner now (dev command, scripted moments).

URSETraversalComponent

Module RSE. Plays a body's traversal (D-121, docs/design/traversal.md): holds its FRSETraversalState (small, serializable; a replicated property later, D-124) and derives the position and the animation from it, never from input.

NodeKindCategoryParametersReturnsDescription
Get State (GetState)pureRPG Saga|TraversalFRSETraversalStateThe current state (None when not traversing).
Is on Link (IsOnLink)pureRPG Saga|TraversalboolWhether the body is on a link now.
Is Swimming (IsSwimming)pureRPG Saga|TraversalboolWhether the body swims now.

URSETraversalKindData

Module RSECore. A kind of traversal (D-121, docs/design/traversal.md): what every ladder, rope, swim area or jump of that kind shares.

NodeKindCategoryParametersReturnsDescription
Can be Used By (CanBeUsedBy)overrideRPG Saga|TraversalTags: FGameplayTagContainer (ref)boolWhether a unit or character with these tags may use it (Required / Blocked Tags by default).
Get Prompt (GetPrompt)pureRPG Saga|TraversalDirection: ERSETraversalDirectionFTextThe prompt for a direction.

URSETraversalLinkKindData

Module RSECore, display name Traversal Link Kind. A link between two standable points (D-121): ladders, ropes, jumps across gaps, vaults over low ledges, controlled drops, zip-lines, rope swings, rope bridges.

NodeKindCategoryParametersReturnsDescription
Get Anims (GetAnims)pureRPG Saga|TraversalDirection: ERSETraversalDirectionFRSETraversalLinkAnimsThe animation slots for a direction (backward falls back slot by slot to forward).
Get Battle Cost (GetBattleCost)overrideRPG Saga|TraversalA: FVector (ref)
B: FVector (ref)
CostMultiplierOverride: float
floatMovement (meters) a battle unit pays to go from A to B (battle space). Default: 3D length x multiplier + extra, never below the ground distance.
Get Motion Seconds (GetMotionSeconds)pureRPG Saga|TraversalMotionLengthMeters: floatfloatSeconds the motion takes over a path of MotionLength meters (mount and dismount not included).

URSETraversalMotion

Module RSECore, display name Traversal Motion. How a body moves along a traversal link (D-121, docs/design/traversal.md): pure math on the link's path (its points, from start to end), no world.

NodeKindCategoryParametersReturnsDescription
Evaluate Location (EvaluateLocation)overrideRPG Saga|TraversalPath: TArray<FVector> (ref)
Alpha: float
UnitsPerMeter: float
FVectorWhere the body is at Alpha (0 = the first point, 1 = the last). Path has at least two points.
Get Length (GetLength)overrideRPG Saga|TraversalPath: TArray<FVector> (ref)
UnitsPerMeter: float
floatLength of the motion along Path (in the path's units): the time a traversal takes is this over the kind's speed.
Sample (Sample)pureRPG Saga|TraversalPath: TArray<FVector> (ref)
Count: int32
UnitsPerMeter: float
OutPoints: TArray<FVector> (out)
Samples the motion: Count + 1 points from Alpha 0 to 1 (path previews).

URSETraversalMotion_Arc

Module RSECore, display name Arc. A parabola from the first point to the last (the points in between are ignored): jumps, vaults, drops, swings.

NodeKindCategoryParametersReturnsDescription
Get Arc Height Meters (GetArcHeightMeters)pureRPG Saga|TraversalHorizontalMeters: floatfloatArc height in meters for a horizontal length in meters.

URSETraversalSubsystem

Module RSE. Traversal in the world (D-121, docs/design/traversal.md): the single place that validates and applies traversal commands (who takes which link, who starts or stops swimming).

NodeKindCategoryParametersReturnsDescription
Check Command (CheckCommand)pureRPG Saga|TraversalCommand: FRSETraversalCommand (ref)ERSETraversalCheckValidates a command without applying it.
Complete All (CompleteAll)functionRPG Saga|TraversalEnds every traversal at once (the bodies land where they were going; swimmers stop swimming). A battle starting calls it.
Get State (GetState)pureRPG Saga|TraversalPawn: APawn*FRSETraversalStateThe traversal state of a body (None when it is not traversing).
Is Blocking Save (IsBlockingSave)pureRPG Saga|TraversalboolWhether the subsystem holds the save block now (someone is on a kind that forbids saving).
Is on Link (IsOnLink)pureRPG Saga|TraversalPawn: APawn*boolWhether a body is on a link (a ladder, a jump) right now.
On Swim Changed (OnSwimChanged)eventRPG Saga|TraversalPawn: APawn*
bSwimming: bool
On Traversal Finished (OnTraversalFinished)eventRPG Saga|TraversalPawn: APawn*
Link: ARSETraversalActor*
On Traversal Started (OnTraversalStarted)eventRPG Saga|TraversalPawn: APawn*
Link: ARSETraversalActor*
Direction: ERSETraversalDirection
Submit Command (SubmitCommand)functionRPG Saga|TraversalCommand: FRSETraversalCommand (ref)ERSETraversalCheckValidates and applies a command. Returns Ok when applied (nothing changes otherwise).

URSETutorialSubsystem

Module RSECore. Contextual tutorials (D-047).

NodeKindCategoryParametersReturnsDescription
Are Tutorials Available (AreTutorialsAvailable)pureRPG Saga|TutorialsboolWhether tutorials may be requested and marked seen now: the bound query (RSE: the time policy, which hides tutorials in multiplayer sessions), else only outside a network session (authority mode Standalone).
Get Seen Tutorials (GetSeenTutorialsBP)pureRPG Saga|TutorialsTArray<URSETutorialData*>Seen tutorials in Help order.
Is Seen (IsSeen)pureRPG Saga|TutorialsTutorial: URSETutorialData*boolThe tutorial was shown already.
Mark Tutorial Seen (MarkSeenBP)functionRPG Saga|TutorialsTutorial: URSETutorialData*boolMarks a tutorial seen without showing it. Returns true when it was not seen before.
Notify Tutorial Trigger (NotifyTriggerBP)functionRPG Saga|TutorialsTrigger: FGameplayTagURSETutorialData*A game event happened (Tutorial.Trigger.*): shows the first unseen tutorial with that trigger whose conditions pass. Custom triggers are just new tags fired from Blueprint. Returns the tutorial shown, or none.
On Tutorial Requested (BP_OnTutorialRequested)eventRPG Saga|TutorialsTutorial: URSETutorialData*A tutorial is requested: the presentation shows it (seen state already updated).
Request Tutorial (RequestTutorialBP)functionRPG Saga|TutorialsTutorial: URSETutorialData*
bEvenIfSeen: bool = false
bIgnoreOption: bool = false
boolShows a tutorial now and marks it seen (bEvenIfSeen shows a seen one again; bIgnoreOption shows it with tutorials off).

URSETutorialViewModel

Module RSE. A tutorial (D-047): its pages (title, optional picture, text with dialog markup, key prompts of the page's actions).

NodeKindCategoryParametersReturnsDescription
Advance (Advance)functionRPG Saga|UI|TutorialNext page, or close on the last one.
Dismiss (Dismiss)functionRPG Saga|UI|TutorialCloses the tutorial (Close with its sound).
Refresh (Refresh)functionRPG Saga|UI|TutorialRebuilds the key hints (the player switched devices).
Turn Page (TurnPage)functionRPG Saga|UI|TutorialDirection: int32Turn Page

URSEUIHost

Module RSE. RSE UI Host

NodeKindCategoryParametersReturnsDescription
Get Host ATBHUD (GetHostATBHUD)overrideRPG Saga|UI|HostURSEATBHUDViewModel*The classic battle HUD's view-model (null = none).
Get Host Party Menu (GetHostPartyMenu)overrideRPG Saga|UI|HostURSEPartyMenuViewModel*The party menu's view-model (open / close, pages, actions).
Get Host Party Menu Screen (GetHostPartyMenuScreen)overrideRPG Saga|UI|HostURSEScreenWidget*The party menu's screen (ours or a Widget Blueprint).
Get Host Tactics HUD (GetHostTacticsHUD)overrideRPG Saga|UI|HostURSETacticsHUDViewModel*The Tactics battle HUD's view-model (null = none).

URSEUIStyle

Module RSE. A UI style (D-162, docs/product/ui-styles.md): the colors, fonts, frames, rows, controls, gauges, key caps, icons, sounds and motion of every screen built on URSEHUDWidgetBase.

NodeKindCategoryParametersReturnsDescription
Get Style Name (GetStyleName)pureRPG Saga|UI StyleFTextThe name in menus (Display Name, else the id).

URSEUIStyleLibrary

Module RSE. UI styles in Blueprint (D-162): read colors, fonts and frame brushes of the active style in your own UMG screens, switch styles at runtime.

NodeKindCategoryParametersReturnsDescription
End UIStyle Preview (EndUIStylePreview)function, staticRPG Saga|UI StyleContext: UObject*End UIStyle Preview
Fill UIStyle from Legacy Theme (FillUIStyleFromLegacyTheme)function, staticRPG Saga|UI StyleTarget: URSEUIStyle*Fills Target from the legacy theme settings (the look from before UI styles), as DA_UIStyle_Classic was made. For tools and editor scripts.
Get Active UIStyle (GetActiveUIStyle)pure, staticRPG Saga|UI StyleContext: UObject*URSEUIStyle*The active UI style of Context's local player (the project's default without one). Null = made from the legacy theme.
Get Selectable UIStyle Ids (GetSelectableUIStyleIds)pure, staticRPG Saga|UI StyleTArray<FName>The ids of the styles players can pick (for Set UI Style and the style picker of your own options screen).
Get Selectable UIStyles (GetSelectableUIStyles)pure, staticRPG Saga|UI StyleTArray<URSEUIStyle*>The styles players can pick (UI Theme -> Selectable Styles).
Get UIAccessibility (GetUIAccessibility)pure, staticRPG Saga|UI StyleContext: UObject*FRSEUIAccessibilityContext's accessibility options: color vision, high contrast, text scale, reduce motion (the player's saved ones without a local player).
Get UIColor (GetUIColor)pure, staticRPG Saga|UI StyleContext: UObject*
Token: FName
Shade: ERSEUIShade = Base
Alpha: float = 1.000000
FLinearColorA token color of the active style (Primary, Accent, Surface0, TextMuted, a custom token...).
Get UIFont (GetUIFont)pure, staticRPG Saga|UI StyleContext: UObject*
Role: ERSETextRole
Size: int32 = 0
FSlateFontInfoThe font of a text role in the active style (Size > 0: that size, scaled like the role).
Get UIFrame Brush (GetUIFrameBrush)pure, staticRPG Saga|UI StyleContext: UObject*
Kind: ERSEPanelKind
FSlateBrushThe brush of a panel kind in the active style (for a Border or Image of your own screen).
Preview UIStyle (PreviewUIStyle)function, staticRPG Saga|UI StyleContext: UObject*
Style: URSEUIStyle*
Shows Style on Context's local player without saving it (a preview in a style picker). End UI Style Preview goes back to the player's choice.
Resolve UIColor (ResolveUIColor)pure, staticRPG Saga|UI StyleContext: UObject*
Color: FRSEUIColor (ref)
FLinearColorA UI color (token or fixed) against the active style.
Set UIAccessibility (SetUIAccessibility)function, staticRPG Saga|UI StyleContext: UObject*
Accessibility: FRSEUIAccessibility (ref)
Sets all the accessibility options at once, applies them to every open screen of Context's local player and saves them.
Set UIColor Vision (SetUIColorVision)function, staticRPG Saga|UI StyleContext: UObject*
ColorVision: ERSEColorVision
Changes one accessibility option and keeps the others.
Set UIHigh Contrast (SetUIHighContrast)function, staticRPG Saga|UI StyleContext: UObject*
bHighContrast: bool
Set UIHigh Contrast
Set UIReduce Motion (SetUIReduceMotion)function, staticRPG Saga|UI StyleContext: UObject*
bReduceMotion: bool
Set UIReduce Motion
Set UIStyle (SetUIStyle)function, staticRPG Saga|UI StyleContext: UObject*
StyleId: FName
boolSwitches Context's local player to the style with this id (saved as the player's choice). Returns false when unknown.
Set UIText Scale (SetUITextScale)function, staticRPG Saga|UI StyleContext: UObject*
TextScale: float
Text Scale 0.8..1.5 (1 = the style's own sizes; texts never go below the theme's minimum size).

URSEUIStyleSubsystem

Module RSE. The UI style of one local player (D-162): which style is active, its accessibility options and the resolved style every widget of that player reads.

NodeKindCategoryParametersReturnsDescription
End Preview (EndPreview)functionRPG Saga|UI StyleEnd Preview
Get Accessibility (GetAccessibility)pureRPG Saga|UI StyleFRSEUIAccessibilityGet Accessibility
Get Active Style (GetActiveStyle)pureRPG Saga|UI StyleURSEUIStyle*The active style asset (null = the legacy theme settings).
Get Active Style Id (GetActiveStyleId)pureRPG Saga|UI StyleFNameGet Active Style Id
Get UI Style Subsystem (GetFor)pure, staticRPG Saga|UI StylePlayer: UObject*URSEUIStyleSubsystem*The style subsystem of the local player behind Player (a controller, pawn, widget or local player), or null.
On Style Changed (OnStyleChanged)eventRPG Saga|UI StyleThe active style changed (another style, its asset edited, accessibility). Rebuild what caches colors, fonts or brushes.
Preview Style (PreviewStyle)functionRPG Saga|UI StyleStyle: URSEUIStyle*Shows Style without saving it (a preview in a style picker). EndPreview goes back to the player's choice.
Set Accessibility (SetAccessibility)functionRPG Saga|UI StyleInAccessibility: FRSEUIAccessibility (ref)
bSaveChoice: bool = true
Applies the accessibility options (color vision, high contrast, text scale, reduce motion) to every open screen of this player; saved as the player's choice.
Set Style (SetStyle)functionRPG Saga|UI StyleStyleId: FName
bSaveChoice: bool = true
boolSwitches to the style with this id (Default Style, Selectable Styles, or any style asset with that id). Returns false when unknown.
Set Style Asset (SetStyleAsset)functionRPG Saga|UI StyleStyle: URSEUIStyle*Switches to a style asset directly (previews, the style editor). Null = the project's default.

URSEUnitBubbleComponent

Module RSE. A screen-space speech bubble over a unit (D-117): the "calling for help" icon and bark, the lines of scripted battle events.

NodeKindCategoryParametersReturnsDescription
Hide (Hide)functionRPG Saga|BattleHide
Is Shown (IsShown)pureRPG Saga|BattleboolIs Shown
Show (Show)functionRPG Saga|BattleIcon: FText (ref)
Line: FText (ref)
IconColor: FLinearColor (ref)
Seconds: float
Shows Icon (may be empty) and Line for Seconds of real time (0 = until Hide).

URSEUnitStatSource

Module RSECore, display name Unit Stat Source. A system outside the framework that supplies a battle unit's stats (D-169): a GAS character's attribute set (the RPGSagaEngineGAS companion plugin), a buyer's own stat component, a save from another game...

NodeKindCategoryParametersReturnsDescription
Applies To (AppliesTo)overrideRPG Saga|Characters|Stat SourceSpawn: FRSEBattleUnitSpawn (ref)
Battle: URSEBattle*
UnitId: int32
boolWhether this source supplies the stats of Spawn in Battle. UnitId is the unit's id in that battle, or -1 when the battle only builds a hypothetical unit (summon damage estimates): answer the same way, but do not bind to it. Default: false (override it).
On Unit Built (OnUnitBuilt)overrideRPG Saga|Characters|Stat SourceBattle: URSEBattle*
UnitId: int32
The battle finished building the unit (UnitId >= 0 only): a presenter may now bind to Battle's events for that unit, for example to mirror its damage back. Default: nothing.
Provide Stats (ProvideStats)overrideRPG Saga|Characters|Stat SourceSpawn: FRSEBattleUnitSpawn (ref)
Battle: URSEBattle*
UnitId: int32
OutStats: FRSEExternalUnitStats (out)
Fills OutStats for the unit (see Applies To for UnitId). Leave a part empty to keep the framework's value.

URSEVisualStyleSubsystem

Module RSE. Chooses and applies the visual style of a game world (D-037, docs/design/visual-style.md): area override (the highest-priority ARSEAreaVolume with a VisualStyle containing the player) -> the player's choice (GameUserSettings.ini, by PrimaryAssetId; dev hotkey / console / options) -> URSEVisualStyleS...

NodeKindCategoryParametersReturnsDescription
Cycle User Style (CycleUserStyle)functionRPG Saga|Visual StyleDirection: int32Moves the player's choice through the preset list (Direction +1 / -1) and shows the toast.
Find Style (FindStyle)function, staticRPG Saga|Visual StyleName: FStringURSEVisualStyle*A preset whose asset name or display name matches Name (exact first, then partial; case-insensitive).
Get Active Style (GetActiveStyle)pureRPG Saga|Visual StyleURSEVisualStyle*The style applied now (null = none).
Get Area Style (GetAreaStyle)pureRPG Saga|Visual StyleURSEVisualStyle*The style the player's area forces (none = no area override).
Get Cycle Styles (GetCycleStyles)function, staticRPG Saga|Visual StyleOutStyles: TArray<URSEVisualStyle*> (out)The presets in cycle order (settings list, else every RSEVisualStyle asset by name), loaded.
Get Default Style (GetDefaultStyle)pureRPG Saga|Visual StyleURSEVisualStyle*The project's default style (Visual Style settings).
Get User Style (GetUserStyle)pureRPG Saga|Visual StyleURSEVisualStyle*The player's chosen style (none = the default).
On Visual Style Changed (BP_OnStyleChanged)eventRPG Saga|Visual StyleNewStyle: URSEVisualStyle*The applied style changed (area, player choice, default; Blueprint).
Set Area Style (SetAreaStyle)functionRPG Saga|Visual StyleStyle: URSEVisualStyle*Area override (null = none). Set by the area check; scripts and tests may set it directly.
Set User Style (SetUserStyle)functionRPG Saga|Visual StyleStyle: URSEVisualStyle*
bSave: bool = true
The player's choice (null = the default). Saved per user when bSave. Ignored while the settings disallow it.

URSEWeaponPresentation

Module RSE. How attacks with a weapon look (D-184), in every battle mode (grid, live, ATB, turn-based through the cue timelines; action battles through the combat presentation): the stance's swing or fire animations, the muzzle flash and shell ejection, tracers or projectiles, impacts per surface with decals, t...

NodeKindCategoryParametersReturnsDescription
Get Effective Stance (GetEffectiveStance)pureRPG Saga|WeaponsERSEWeaponStanceThe stance used when it is Auto: from the kind.
Is Ranged (IsRanged)pureRPG Saga|WeaponsboolFires (tracers or projectiles) rather than swings.

URSEWeatherPresenterComponent

Module RSE, display name Weather Presenter. The weather's presentation (D-101): precipitation around the camera (Niagara, the Low systems on Low effects quality), the global material parameters (Wetness, SnowCover, Wind, RainAmount...), weather sounds (SFX channel), lightning and thunder, roofs and no-weather volumes.

NodeKindCategoryParametersReturnsDescription
Get Presentation (GetPresentation)pureRPG Saga|WeatherFRSEWeatherPresentationGet Presentation
On Lightning Strike (OnLightningStrike)eventRPG Saga|WeatherThunderDelaySeconds: floatA lightning strike (the sky flashes now; thunder follows after the delay).
Strike Lightning (StrikeLightning)functionRPG Saga|WeatherStrikes lightning now (dev command, story).

URSEWorldEffect_Custom

Module RSECore, display name Custom (Blueprint). An effect written in Blueprint: create a Blueprint class from it, override On Execute and change the game through the "Context" nodes (RPG Saga\|Narrative\|Context: flags, items, party...) or any other node (sounds, actors: the class reports the game's world).

NodeKindCategoryParametersReturnsDescription
On Execute (OnExecute)overrideRPG Saga|EffectsContext: FRSEEffectContext (ref)Applies the effect. Use the Context nodes so the change is reported (quests, HUD) and deferred like the built-in effects.

URSEWorldMapViewModel

Module RSE. The world map (D-044): discovered places as markers on a map picture and as a list.

NodeKindCategoryParametersReturnsDescription
Choose (Choose)functionRPG Saga|UI|WorldMapTravels to the selected place (or says why not).
Click Place (ClickPlace)functionRPG Saga|UI|WorldMapIndex: int32A click on a place: selects it, a second click travels.
Leave (Leave)functionRPG Saga|UI|WorldMapLeave
Move Selection (MoveSelection)functionRPG Saga|UI|WorldMapDelta: int32Move Selection
Select (Select)functionRPG Saga|UI|WorldMapIndex: int32Select

URSEWorldReactionSubsystem

Module RSE. Abilities on the world (D-157): the registry of reactive objects in this world and the one place that applies the World Reactions rules to them: from the party menu (the Cast On World command: checked, paid only when something reacts), from a Free Tactics ability that lands among them (the director...

NodeKindCategoryParametersReturnsDescription
Apply Ability At (ApplyAbilityAt)functionRPG Saga|World ReactionsAbility: URSEAbilityData*
Center: FVector
Radius: float
Instigator: AActor*
int32Applies Ability's tags (element, type, roles, World Tags) around Center. Returns the objects that reacted.
Cast on World (CastOnWorld)functionRPG Saga|World ReactionsPawn: APawn*
Member: URSECharacterData*
Ability: URSEAbilityData*
OutReason: FText (out)
boolCasts Ability on the surroundings as the player of Pawn, by Member, through the command bus: applied at once in single player and on the host. OutReason says why not. Returns true when it was applied (or sent).
Would React (WouldReact)pureRPG Saga|World ReactionsAbility: URSEAbilityData*
Pawn: APawn*
boolWhether anything around Pawn would react to Ability now (the party menu offers "on the surroundings" only then).

URSEWorldStreamingSubsystem

Module RSE. World Partition and level streaming support (D-174, docs/design/save-system.md "World Partition").

NodeKindCategoryParametersReturnsDescription
Begin Battle Streaming (BeginBattleStreaming)functionRPG Saga|World PartitionCenter: FVector
AreaRadius: float
Keeps the cells within AreaRadius (+ the settings' margin, at least their minimum radius) of Center loaded until End Battle Streaming. Replaces a running one. Does nothing outside a partitioned world or with the setting off.
End Battle Streaming (EndBattleStreaming)functionRPG Saga|World PartitionLets the battle's cells unload again (when no player is near).
Get Data Layer State (GetDataLayerState)pureRPG Saga|World PartitionDataLayer: UDataLayerAsset*ERSEDataLayerStateThe layer's state now: the engine's effective state in a partitioned world that has it, else the state the story recorded, else Unloaded.
Is Battle Area Streamed (IsBattleAreaStreamed)pureRPG Saga|World PartitionboolThe battle's cells finished loading (true outside a partitioned world and when no battle keeps cells).
Is Battle Streaming Active (IsBattleStreamingActive)pureRPG Saga|World PartitionboolA battle keeps cells loaded now.
Set Data Layer State (SetDataLayerState)functionRPG Saga|World PartitionDataLayer: UDataLayerAsset*
State: ERSEDataLayerState
boolSets a data layer's runtime state for the story (a bridge built, ruins after the attack) and records it in the World section, so it is applied again after a load. Returns false when the layer is not in this world (the state is recorded anyway).

Appendix B. Settings reference

Generated from the plugin's developer settings classes. 151 settings classes with 4465 properties. Open Project Settings, then the category and section shown in each heading. Defaults are the values the class holds when the export ran. Restart marks a setting that needs an editor restart.

Editor: RPG Saga Engine Configurator

Class URSEConfiguratorSettings (module RSEEditor), Project Settings, Project, Editor. Options of the RSE Configurator editor window (D-035).

SettingTypeDefaultCategoryRestartDescription
Test Maps (TestMaps)TArray<FRSEConfiguratorTestMap>(3 entries)TestMaps listed in the Test bar, each with Open and Play buttons.
Groups (Groups)TArray<FRSEConfiguratorGroup>(46 entries)TreeDomain groups of the tree, in display order. Settings classes not listed in any group go to "Other". Empty groups are hidden.
Validate Data Assets by Default (bValidateDataAssetsByDefault)boolFalseValidationThe validation panel also loads and validates every RSE data asset (URSEPrimaryDataAsset) by default. Slower on big projects.
Validate on Open (bValidateOnOpen)boolTrueValidationRun the validation when the configurator opens.

Plugins: RPG Saga Studio

Class URSEStudioUserSettings (module RSEEditor), Project Settings, Editor, Plugins. Per-user Studio preferences (Editor Preferences -> RPG Saga Studio, saved per project for this user): the explanation level, opening the Studio at startup, the full menus, the character sheet on double click and the recent assets.

SettingTypeDefaultCategoryRestartDescription
Character Sheet Advanced (bCharacterSheetAdvanced)boolFalseCharacter SheetThe character sheet opens in Advanced mode (every field).
Open Character Sheet on Double Click (bOpenCharacterSheetOnDoubleClick)boolTrueCharacter SheetDouble-clicking a Character asset opens its character sheet (off = the generic asset editor).
Open Sheets on Double Click (bOpenSheetsOnDoubleClick)boolTrueCharacter SheetDouble-clicking an ability, item or archetype opens its sheet (off = the generic asset editor).
First Steps Hidden (bFirstStepsHidden)boolFalseFirst StepsFirst steps: hidden from the Studio's start page ("Hide this list").
First Steps Seen (bFirstStepsSeen)boolFalseFirst StepsFirst steps (D-177): the checklist opened by itself at the first startup in this project (so it opens once per project and user).
First Steps Done (FirstStepsDone)TArray<FName>(0 entries)First StepsFirst steps that leave nothing in the project to detect (Play the slice, Read Getting Started), remembered here.
Show Advanced Tools Everywhere (bShowAdvancedToolsEverywhere)boolFalseMenusShow every RPG Saga Engine tool everywhere, as before the Studio: the full main menu, the toolbar buttons and the context tools even when nothing they apply to is selected. Off = a short menu (Studio, Configurator, Validation, Help, Advanced tools) and tools that appear where they apply.
Open Studio at Startup (bOpenStudioAtStartup)boolTrueStudioOpen the Studio when the editor starts (the Studio's "Don't show at startup" box turns it off).
Detail Level (DetailLevel)ERSEStudioDetailLevelBeginnerStudioHow much the Studio explains: Beginner (explanations always visible), Normal (tooltips) or Expert (nothing).
Recent Assets (RecentAssets)TArray<FSoftObjectPath>(0 entries)StudioRecently created or edited RPG Saga assets, newest first ("Continue where you left off").
Startup Bring to Front Delays (StartupBringToFrontDelays)TArray<float>(2 entries)StudioAfter opening at startup, the Studio's window is brought to the front again at these times (seconds), so windows the editor restores later (the Plugins window after Restart Now) do not hide it (D-136). Empty = never.

RPG Saga Engine: AI

Class URSEAISettings (module RSECore), Project Settings, Project, RPG Saga Engine. Global utility AI tuning.

SettingTypeDefaultCategoryRestartDescription
Charge Interrupt Weight (ChargeInterruptWeight)float15.000000ATBATB: value for hitting a unit that is charging an ability, at intelligence 1 (interrupt its big move).
Charge Time Penalty Per Second (ChargeTimePenaltyPerSecond)float3.000000ATBATB: value lost per second of an ability's charge time (slow moves risk being wasted).
Debug History (DebugHistory)int3220DebugDecisions remembered per battle for the debugger.
Debug Top Options (DebugTopOptions)int325DebugOptions kept per decision for the debugger and the log dump.
End Turn Bias (EndTurnBias)float1.000000DecisionSmall value added to ending the turn, so the AI does not wander for negligible gains.
Revive Value (ReviveValue)float80.000000DecisionValue of bringing a fallen ally back (before the profile's HealWeight), on top of the HP it returns with.
Danger Awareness at Min Intelligence (DangerAwarenessAtMinIntelligence)float0.300000IntelligenceShare of danger awareness at intelligence 0 (it scales linearly to 1 at intelligence 1).
Enemy VIPMultiplier (EnemyVIPMultiplier)float1.500000IntelligenceDamage value multiplier against the enemy team's VIP at intelligence 1.
Focus Fire Weight (FocusFireWeight)float10.000000IntelligenceValue for focusing already-hurt targets at intelligence 1 (coordination / focus fire).
Noise Top Options (NoiseTopOptions)int323IntelligenceAt low intelligence the AI picks among this many best options (plausible mistakes, not random ones).
Temperature at Max Intelligence (TemperatureAtMaxIntelligence)float0.000000Intelligence
Temperature at Min Intelligence (TemperatureAtMinIntelligence)float12.000000IntelligenceSoftmax temperature (in score points) at intelligence 0 and 1. Higher = more varied choices.
Item Use Penalty (ItemUsePenalty)float4.000000ItemsValue lost for using up a consumable (items are a limited resource; abilities are preferred when equal).
Last Item Penalty (LastItemPenalty)float6.000000ItemsExtra value lost for the team's last one of an item, at intelligence 1 (resource management).
Full Resonance Target Multiplier (FullResonanceTargetMultiplier)float1.500000PactsDamage value multiplier against a unit with a full Resonance bar, at intelligence 1 (stop the summon).
Summon Damage Weight (SummonDamageWeight)float0.600000PactsExtra value per point of damage the summon is expected to deal over its stay (times the profile's DamageWeight). Without it a strong attack always beats the flat SummonValue and the AI never summons.
Summon Target Multiplier (SummonTargetMultiplier)float1.500000PactsDamage value multiplier against a summon, at intelligence 1 (defeating it early causes backlash).
Summon Value (SummonValue)float60.000000PactsValue of calling a Pact summon onto the field (D-013).
Max Move Candidates (MaxMoveCandidates)int3240PerformanceMost movement tiles evaluated per decision (closest to the action first). Bounds AI cost per turn.
Kill Threat Weight (KillThreatWeight)float0.000000StatusesValue per point of damage a defeated enemy would have dealt over the threat horizon, times the chance to defeat it. A defeat is worth the larger of this and the profile's flat Kill Bonus: finishing a dangerous enemy stays ahead of buffs at any level, while low-level battles keep the bonus. 0 (default) = off: the flat Kill Bonus only (the shipped content is balanced on it); raise it for an AI that hunts the most dangerous units.
Measured Status Stats (MeasuredStatusStats)TArray<FGameplayTag>(0 entries)StatusesStats whose status modifiers the AI measures through the damage estimate. Modifiers on other stats (Speed, Action Points, custom stats), granted tags and affinities get the profile's flat Status Weight instead. Empty = the combat formulas' offense and defense stats, plus Stat.Accuracy and Stat.Evasion.
Protection Urgency Floor (ProtectionUrgencyFloor)float1.000000StatusesShare of the value of HP saved on an ally (damage prevented, regeneration, shields) when it is in no danger. It rises to 1 as the damage the ally expects over the threat horizon reaches its current HP: buffing a unit nobody can hurt is worth little. 1 (default) = off: the measured relevance and the shields' cap already follow the threat; lower it for an AI that saves its protection for the units in danger.
Status Full Value HPShare (StatusFullValueHPShare)float0.200000StatusesA status earns the profile's full Status Weight when what it changes over the threat horizon (damage prevented or added, HP restored or lost) reaches this share of its bearer's max HP; less earns proportionally less, and nothing (already there, nobody in reach, the wrong damage kind) earns nothing. A status never earns more than one Status Weight, so measured statuses keep the scale the profiles were tuned on.
Threat Horizon Rounds (ThreatHorizonRounds)int323StatusesOwn turns the AI looks ahead when it measures threats: a status or a shield (the damage it would prevent or add against the units that can reach the bearer in that time) and a defeat (the damage the fallen unit will not deal). A status re-applied while it still covers these turns adds nothing.
Threat Round Discount (ThreatRoundDiscount)float0.700000StatusesWeight of each later turn of the threat horizon, relative to the turn before (later turns are less certain).
Combos (Combos)TArray<FRSEAICombo>(1 entries)TeamCombos every AI team knows (setup status, then payoff element). Content tags: set them in the project's config.
Support Threat Decay (SupportThreatDecay)float0.500000TeamHow much of the remembered threat to a Support-role unit is kept at each own turn of that unit's team (0 = forget at once, 1 = never forget). The threat (per 10% of the Support's max HP lost) feeds the profiles' PunishThreatBonus.

RPG Saga Engine: AI Debugger

Class URSEAIDebuggerSettings (module RSE), Project Settings, Project, RPG Saga Engine. The in-game AI debugger (D-056): for the unit that just decided, its best options with their score breakdown (a panel in every mode, labels on the grid tiles in Tactics).

SettingTypeDefaultCategoryRestartDescription
Chosen Color (ChosenColor)FLinearColor(R=1.000000,G=0.850000,B=0.250000,A=1.000000)Colors
Forced Color (ForcedColor)FLinearColor(R=1.000000,G=0.450000,B=0.350000,A=1.000000)Colors
Option Color (OptionColor)FLinearColor(R=0.850000,G=0.900000,B=1.000000,A=1.000000)Colors
Term Color (TermColor)FLinearColor(R=0.600000,G=0.680000,B=0.800000,A=1.000000)Colors
Enabled (bEnabled)boolTrueDebuggerCreates the debugger in game worlds (Development and Debug builds only).
Show Toggle Button (bShowToggleButton)boolTrueDebuggerShows the small "AI" toggle button during battles (otherwise only RSE.AI.Debug turns it on).
Widget Class (WidgetClass)TSoftClassPtr<URSEScreenWidget>NoneDebuggerAI debugger panel (D-052). Empty = the built-in screen. A Widget Blueprint derived from RSEScreenWidget replaces it and receives a RSEAIDebugViewModel (docs/product/custom-ui.md).
Panel Anchor (PanelAnchor)FVector2D(X=1.000000,Y=0.360000)LayoutWhere the options panel sits (normalized screen point).
Panel Width (PanelWidth)float470.000000Layout
Terms Per Option (TermsPerOption)int324LayoutScore terms shown per option in the panel (largest first).
Toggle Anchor (ToggleAnchor)FVector2D(X=1.000000,Y=0.300000)LayoutWhere the toggle button sits (normalized screen point, its alignment follows).
ZOrder (ZOrder)int3215LayoutViewport Z order (above the battle HUDs).
Tile Labels (bTileLabels)boolTrueTacticsTactics: labels on the tiles of the shown options.
Tile Label Height (TileLabelHeight)float40.000000TacticsTactics: label height above the tile.

RPG Saga Engine: Ability Info

Class URSEAbilityInfoSettings (module RSECore), Project Settings, Project, RPG Saga Engine. How abilities are described and grouped in menus (D-147, docs/design/battle-menus.md): the role rules and their labels, and the groups the battle menus use when their config has none.

SettingTypeDefaultCategoryRestartDescription
Collapse Tier Families (bCollapseTierFamilies)boolTrueMenu GroupsTier families show as one entry that opens its tiers. Off: every tier is an entry of its own.
Default Groupings (DefaultGroupings)TArray<FRSEBattleMenuGrouping>(2 entries)Menu GroupsGroups of the battle menus whose config has none (spells by element, skills by role).
Add Derived to Own Roles (bAddDerivedToOwnRoles)boolFalseRolesDerived roles also join the ability's own role tags (off: own tags replace them).
Derive Roles (bDeriveRoles)boolTrueRolesAbilities without role tags of their own get the roles of the rules below (from their effects).
Max Shown Roles (MaxShownRoles)int322RolesMost role tags a tooltip lists.
Role Labels (RoleLabels)TMap<FGameplayTag,FText>(14 entries)RolesThe short text of each role tag in menus ("Single-target damage"). A tag without a label shows its last part.
Role Rules (RoleRules)TArray<FRSEAbilityRoleRule>(18 entries)RolesTrait rules, in order: each matching rule adds its role.

RPG Saga Engine: Ability Test

Class URSEAbilityTestSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Ability Test settings (D-167): who the Test ability button uses by default and the target presets it offers.

SettingTypeDefaultCategoryRestartDescription
Caster Team (CasterTeam)FGameplayTag(TagName="Team.Player")Ability TestTeams of the caster's side and the other side in the mini battles.
Default Caster (DefaultCaster)TSoftObjectPtr<URSEPrimaryDataAsset>/RPGSagaEngine/Data/Characters/DA_Char_Kaela.DA_Char_KaelaAbility TestWho uses the ability when the test names nobody (a character or an archetype).
Default Level (DefaultLevel)int3210Ability Test
Default Preset (DefaultPreset)FNameOneEnemyAbility TestThe preset used when the test names none (its Id). Empty = the first.
Default Runs (DefaultRuns)int3250Ability Test
Grid Size (GridSize)int3213Ability TestSize of the flat grid of the grid and live tests (tiles per side).
Max Runs (MaxRuns)int321000Ability TestUpper bound on runs per test (keeps the editor responsive).
Other Team (OtherTeam)FGameplayTag(TagName="Team.Enemy")Ability Test
Presets (Presets)TArray<FRSEAbilityTestPreset>(5 entries)Ability TestTarget sets the test offers, in order.

RPG Saga Engine: Ability Toolkit

Class URSEAbilityToolkitSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Rules of the Ability Toolkit v2 (D-055, docs/design/abilities-v2.md): reactions, taunts, leaps, zones, objects, captures.

SettingTypeDefaultCategoryRestartDescription
Max Bonus Action Points (MaxBonusActionPoints)int324Action PointsMost Action Points an effect can raise a unit to, above its turn-start amount.
AIAction Point Value (AIActionPointValue)float4.000000AIValue per Action Point given to an ally or taken from an enemy.
AICapture Value (AICaptureValue)float30.000000AIValue of capturing an enemy (times the chance).
AICounter Risk Weight (AICounterRiskWeight)float1.000000AIWeight of the counterattack an attack would provoke (times the profile's danger awareness).
AIDispel Value (AIDispelValue)float8.000000AIValue per buff removed from an enemy, or debuff removed from an ally.
AIDisplacement Value (AIDisplacementValue)float1.000000AIValue per tile an enemy is moved (knockback, pull, swap) besides the damage it causes.
AIResource Value (AIResourceValue)float0.500000AIValue per point of a resource other than HP taken from an enemy or given to an ally (MP, Rage...).
AIShield Weight (AIShieldWeight)float0.800000AIValue per point of shield given to an ally (times the profile's Heal weight).
AISteal Value (AIStealValue)float8.000000AIValue of stealing from an enemy (times the chance).
AITaunt Value (AITauntValue)float10.000000AIValue of taunting an enemy (times the chance).
AITurn Shift Value (AITurnShiftValue)float20.000000AIValue of a whole turn gained by an ally or taken from an enemy (turn manipulation).
AIZone Turns (AIZoneTurns)float2.000000AITurns a unit is expected to stay in a zone (zone damage or healing per turn is multiplied by this).
Capture Needs Victory (bCaptureNeedsVictory)boolTrueCaptureCaptured units join only when the player's side wins (off: also after fleeing).
Can Target Objects (bCanTargetObjects)boolTrueFieldAbilities aimed at enemies may target a tile holding a destructible object (barrels, walls).
One Zone Per Tile (bOneZonePerTile)boolTrueFieldA new zone replaces older zones on the tiles it covers (off: zones stack and all trigger).
Max Chain Explosions (MaxChainExplosions)int3232FieldGuard against endless chain reactions: most objects that can explode from one hit.
Enemies Pay Item Costs (bEnemiesPayItemCosts)boolFalseItem CostsUnits of teams other than the player's pay the Item Costs of their abilities (ammunition) from their team's items. Off (default): enemies use such abilities freely, since encounters rarely give them a pouch.
Max Leap Chain (MaxLeapChain)int328Movement EffectsUpper bound on the hops of any leap chain (content asks for fewer).
Max Slide Tiles (MaxSlideTiles)int323Movement EffectsA knocked-back unit that lands on a slippery tile keeps sliding up to this many extra tiles (per slippery tile entered).
Reactions in Classic Modes (bReactionsInClassicModes)boolTrueReactionsReactions also work in ATB and turn-based battles (overwatch never does: nobody moves there).
Max Reaction Depth (MaxReactionDepth)int321ReactionsHow deep reactions may chain: 1 = a reaction never triggers another one (a counter is not countered). 0 = no reactions at all.
Taunt Forces Target (bTauntForcesTarget)boolFalseTauntAI units under a taunt must aim at the taunter whenever one of their actions can reach it (off: they strongly prefer it).
Taunt Target Multiplier (TauntTargetMultiplier)float3.000000TauntScore multiplier of AI options that hit the taunter (when the taunt does not force).

RPG Saga Engine: Action AI

Class URSEActionAIRules (module RSECore), Project Settings, Project, RPG Saga Engine. Real-time AI of action battles (A2, D-171; docs/design/action-battle.md).

SettingTypeDefaultCategoryRestartDescription
Stamina Reserve (StaminaReserve)float25.000000OptionsStamina a unit keeps for dodging and guarding (scaled by the profile's Resource Management): attacks that dig into it score less.
Stamina Reserve Penalty (StaminaReservePenalty)float10.000000OptionsScore lost by an option that would dig into the stamina reserve (scaled by Resource Management).
Tank Intercept Weight (TankInterceptWeight)float4.000000OptionsTank role: bonus (x the profile's Tank Interpose weight) for attacking an enemy whose attack is aimed at a fragile ally.
Travel Penalty Per Second (TravelPenaltyPerSecond)float4.000000OptionsScore lost per second of walking an option needs before it reaches its target.
Windup Penalty Per Second (WindupPenaltyPerSecond)float3.000000OptionsScore lost per second of windup (slow moves can be dodged, interrupted or wasted).
Default Party Order (DefaultPartyOrder)ERSEActionPartyOrderFreePartyThe order of party members the AI drives until a player orders otherwise (Options can change it per player).
Defend Radius (DefendRadius)float4.000000PartyDefend Me: distance kept from the leader.
Follow Distance (FollowDistance)float3.000000PartyFollow: distance kept from the leader.
Follow Engage Radius (FollowEngageRadius)float8.000000PartyFollow: only enemies this close to the leader are fought.
Free Leash Distance (FreeLeashDistance)float20.000000PartyFree: party members never wander farther than this from the leader (meters; 0 = no leash).
Hold Radius (HoldRadius)float1.000000PartyHold Position: how far from its spot the member may step.
Order Distance Weight (OrderDistanceWeight)float8.000000PartyScore lost per meter a spot is beyond where the order wants the member (leader distance, hold spot).
Order Target Bonus (OrderTargetBonus)float40.000000PartyAttack My Target / Defend Me: bonus for the target the order names (others lose half of it).
Party Intelligence (PartyIntelligence)float0.700000PartyIntelligence of party members the AI drives when the driver gives none (0-1).
Approach Scale (ApproachScale)float0.100000PositioningRanged units with an Approach weight close in: their wanted distance is divided by 1 + Approach Scale x the profile's Approach weight.
Area Margin (AreaMargin)float2.000000PositioningBounded battles: spots closer than this to the edge of the combat area start losing score.
Area Penalty (AreaPenalty)float20.000000PositioningScore lost per meter inside the margin or outside the area.
Cover Weight (CoverWeight)float3.000000PositioningCover-lite: bonus (x awareness) per ranged enemy whose line to the spot an obstacle blocks.
Crowding Weight (CrowdingWeight)float3.000000PositioningScore lost per meter of an ally inside the personal space.
Danger Scale (DangerScale)float0.150000PositioningDanger of a spot: score lost per point of the damage the enemies that reach it could deal (x the profile's Danger weight and awareness).
Flank Scale (FlankScale)float0.500000PositioningFlanking: bonus (x the profile's Flank weight and awareness) for a melee spot behind the target (full value straight behind).
Interpose Scale (InterposeScale)float3.000000PositioningTank role: bonus (x the profile's Tank Interpose weight) for a spot on the line between a fragile ally and the enemy nearest it (fades out two tiles off the line).
Kite Tolerance (KiteTolerance)float1.500000PositioningRanged units closer than their wanted distance minus this walk away first, and shoot once there (or cornered).
Melee Range Fraction (MeleeRangeFraction)float0.750000PositioningMelee units want to stand at this fraction of their reach.
Move Cost Weight (MoveCostWeight)float0.400000PositioningScore lost per meter walked (keeps units from dancing around between equal spots).
No Line Of Sight Penalty (NoLineOfSightPenalty)float15.000000PositioningA ranged unit loses this much at a spot with no line of sight to its target.
Personal Space (PersonalSpace)float1.000000PositioningRoom allies want between each other (meters, edge to edge).
Position Directions (PositionDirections)int3212PositioningDirections sampled around the unit when it picks where to stand (on each ring).
Position Rings (PositionRings)int322PositioningRings of samples (at Reposition Distance divided evenly).
Ranged Range Fraction (RangedRangeFraction)float0.600000PositioningRanged units (reach above Ranged Reach) want to stand at this fraction of their reach, unless the profile prefers a distance.
Ranged Reach (RangedReach)float4.000000PositioningAn attack reaching farther than this is ranged (meters).
Range Weight (RangeWeight)float3.000000PositioningScore lost per meter between a spot's distance to the target and the distance the unit wants to fight at.
Reach Margin (ReachMargin)float0.150000PositioningSafety margin taken off every reach (meters): "in reach" then means inside the hitbox, not on its edge.
Reposition Before Attack (RepositionBeforeAttack)float1.000000PositioningMelee units already in reach still walk to their spot first (a flank, the Tank's line) when it is farther than this and keeps them in reach.
Reposition Distance (RepositionDistance)float4.000000PositioningFarthest sampled spot from the unit (meters).
Retreat Scale (RetreatScale)float0.500000PositioningRetreating (HP under the profile's Retreat HP Percent): bonus per meter from the nearest enemy (x the profile's Retreat weight).
Stop Distance (StopDistance)float0.400000PositioningThe unit stops walking within this distance of the spot it picked.
Walk First Max Seconds (WalkFirstMaxSeconds)float1.000000PositioningSeconds a unit in reach may spend walking to a better spot (backing off, flanking) before it attacks from where it is.
Guard Hold Seconds (GuardHoldSeconds)float0.150000ReactionsA guard raised against a telegraph is held this long after the attack's active time.
Parry Min Intelligence (ParryMinIntelligence)float0.600000ReactionsParries are tried only from this intelligence up (melee attacks, when the rules and the weapon allow it).
Parry Preference (ParryPreference)float0.500000ReactionsChance (x intelligence) to answer a parryable attack with a parry instead of a dodge or a block.
Projectile Horizon (ProjectileHorizon)float1.000000ReactionsProjectiles arriving within this many seconds are answered.
React Chance at Max Intelligence (ReactChanceAtMaxIntelligence)float0.900000ReactionsChance to answer a telegraph at awareness 1.
React Chance at Min Intelligence (ReactChanceAtMinIntelligence)float0.050000ReactionsChance to answer a telegraph aimed at the unit at awareness 0 (the profile's Danger Awareness, which follows intelligence).
Reaction Jitter (ReactionJitter)float0.080000ReactionsRandom extra reaction time (up to this many seconds).
Reaction Time at Max Intelligence (ReactionTimeAtMaxIntelligence)float0.100000ReactionsSeconds from seeing a telegraph to being able to answer it, at intelligence 1.
Reaction Time at Min Intelligence (ReactionTimeAtMinIntelligence)float0.550000ReactionsSeconds from seeing a telegraph to being able to answer it, at intelligence 0.
Threat Slack (ThreatSlack)float1.000000ReactionsTelegraphs this far beyond the attack's reach are still answered (meters; the attacker may step in).
Timing Error at Max Intelligence (TimingErrorAtMaxIntelligence)float0.030000ReactionsLargest timing mistake at intelligence 1.
Timing Error at Min Intelligence (TimingErrorAtMinIntelligence)float0.300000ReactionsLargest timing mistake of a dodge or parry at intelligence 0 (seconds early or late).
Safe Reload Distance (SafeReloadDistance)float6.000000Resources
Tactical Reload Below (TacticalReloadBelow)float0.300000ResourcesReload when the magazine is below this fraction and no enemy is within Safe Reload Distance (smart units only: Resource Management above one half).
Consider Range (ConsiderRange)float40.000000ThinkingUnits farther than this are not considered as targets (meters, edge to edge).
Think Interval at Max Intelligence (ThinkIntervalAtMaxIntelligence)float0.250000ThinkingSeconds between two decisions of a unit at intelligence 1.
Think Interval at Min Intelligence (ThinkIntervalAtMinIntelligence)float0.600000ThinkingSeconds between two decisions of a unit at intelligence 0 (the slowest). Decisions are staggered across units.
Think Stagger Slots (ThinkStaggerSlots)int325ThinkingUnits are spread over this many offsets of the think interval, so a crowd never thinks on the same step.

RPG Saga Engine: Action Battle

Class URSEActionRules (module RSECore), Project Settings, Project, RPG Saga Engine. Real-time action battles (D-171, docs/design/action-battle.md).

SettingTypeDefaultCategoryRestartDescription
Default Weapon (DefaultWeapon)TSoftObjectPtr<URSEActionWeaponData>NoneComboThe weapon of units without one with action data (empty = the unit's basic attack with derived rules).
Input Buffer Seconds (InputBufferSeconds)float0.150000ComboAn attack pressed this long before a combo window opens is kept and runs when it opens.
Active Time (ActiveTime)float0.150000Derived Ability Rules
Attack Stamina Cost (AttackStaminaCost)float8.000000Derived Ability RulesStamina of a basic attack (Ability.Type.Attack).
Charge Time to Windup (ChargeTimeToWindup)float0.500000Derived Ability RulesExtra windup per second of the ability's ATB charge time.
Cooldown Base (CooldownBase)float3.000000Derived Ability Rules
Cooldown Per Cost (CooldownPerCost)float0.150000Derived Ability RulesExtra cooldown per point of resource cost (MP...).
Melee Arc Angle (MeleeArcAngle)float120.000000Derived Ability Rules
Melee Max Tiles (MeleeMaxTiles)int321Derived Ability RulesHostile abilities with a Tactics range up to this many tiles are melee.
Melee Range (MeleeRange)float2.200000Derived Ability Rules
Poise Damage (PoiseDamage)float20.000000Derived Ability Rules
Projectile Speed (ProjectileSpeed)float22.000000Derived Ability Rules
Recovery (Recovery)float0.450000Derived Ability Rules
Tile Meters (TileMeters)float1.500000Derived Ability RulesMeters per Tactics tile when converting ranges and areas.
Windup (Windup)float0.350000Derived Ability Rules
Dodge Distance (DodgeDistance)float4.000000DodgeDistance covered by a dodge when the battle moves the units itself (headless; the presentation uses root motion).
Dodge Duration (DodgeDuration)float0.500000DodgeLength of the dodge (roll, dash, step).
Dodge Invulnerable Start (DodgeInvulnerableStart)float0.030000DodgeSeconds into the dodge when invulnerability (i-frames) starts.
Dodge Invulnerable Time (DodgeInvulnerableTime)float0.300000DodgeSeconds of invulnerability: hits in this window are dodged.
Dodge Stamina Cost (DodgeStaminaCost)float25.000000Dodge--- Dodge ---
Bounded Area Radius (BoundedAreaRadius)float25.000000FramingBounded: radius of the combat area around its center (0 = no area).
Disengage Distance (DisengageDistance)float30.000000FramingOpen: the party is this far from every enemy...
Disengage Seconds (DisengageSeconds)float5.000000FramingOpen: ...for this long: the fight ends (fled).
Framing (Framing)ERSEActionFramingBoundedFramingBounded (area, banner, results) or Open (no results screen; the fight fades out when the party gets away).
Leave Area Seconds (LeaveAreaSeconds)float3.000000FramingBounded: seconds every party member must stay out of the area before it counts as fleeing (when fleeing is allowed).
Guard Enabled (bGuardEnabled)boolTrueGuardUnits may block (hold guard). Weapons may also forbid it.
Block Angle (BlockAngle)float140.000000GuardFull angle in front of the unit that its guard covers (hits from behind go through).
Block Damage Multiplier (BlockDamageMultiplier)float0.250000GuardDamage taken through a block (multiplier; poise damage too).
Block Move Multiplier (BlockMoveMultiplier)float0.500000GuardMovement speed while guarding (multiplier).
Block Regen Multiplier (BlockRegenMultiplier)float0.300000GuardStamina regeneration while guarding (multiplier).
Block Stamina Per Hit (BlockStaminaPerHit)float10.000000GuardStamina each blocked hit drains.
Block Stamina Per Poise (BlockStaminaPerPoise)float0.500000GuardExtra stamina drained per point of the hit's poise damage.
Guard Break Stagger Seconds (GuardBreakStaggerSeconds)float1.200000GuardStagger when a block runs out of stamina (the hit then lands in full).
Item Cooldown (ItemCooldown)float1.000000ItemsSeconds before the same unit can use another item.
Item Use Recovery (ItemUseRecovery)float0.300000Items
Item Use Windup (ItemUseWindup)float0.600000Items--- Items and party ---
Switch Character Cooldown (SwitchControlCooldown)float1.000000ItemsSeconds before the same player can switch character again.
Body Collision (bBodyCollision)boolTrueMovementBodies do not overlap when the battle moves units itself (headless runs, the simulator): they push each other apart.
Default Unit Radius (DefaultUnitRadius)float0.400000MovementRadius of a unit without one (meters).
Move Speed (MoveSpeed)float5.000000MovementWalking speed when the battle moves units itself (headless runs, the simulator); the presentation moves pawns itself.
Move Speed Per Speed (MoveSpeedPerSpeed)float0.000000MovementExtra meters per second per point of Speed above Move Speed Reference Speed (0 = everyone walks alike).
Move Speed Reference Speed (MoveSpeedReferenceSpeed)float10.000000Movement
Claim Burst (ClaimBurst)float16.000000NetworkAnti-abuse (A6): claims a unit may make at once above the rate (a shotgun blast, a sweep through a crowd).
Hit Claim Angle Tolerance (HitClaimAngleTolerance)float20.000000NetworkA melee claim may be this many degrees outside the swing's arc (A6; boxes: Hit Claim Range Tolerance on the width).
Hit Claim Range Tolerance (HitClaimRangeTolerance)float1.000000NetworkA hit claim may be this much farther than the attack reaches.
Hit Claim Time Tolerance (HitClaimTimeTolerance)float0.250000NetworkA hit claim may be this many seconds outside the attack's active time (latency).
Impossible Reach Margin (ImpossibleReachMargin)float4.000000NetworkAnti-abuse (A6): a claim farther than the reach + Hit Claim Range Tolerance + this, at every rewound place, is impossible, not a latency miss; it is refused as Impossible Reach and logged.
Max Claims Per Second (MaxClaimsPerSecond)float30.000000NetworkAnti-abuse (A6): hit claims each unit may make per second (a token bucket; shotgun pellets count one each).
Max Rewind Seconds (MaxRewindSeconds)float0.400000NetworkA claim is checked against the places at its time, at most this far back (A6): an older claim is checked at Now minus this (high latency gets less help, never a free hit from long ago). Also limited by Position History Seconds.
Mirror Rate Hz (MirrorRateHz)float15.000000NetworkHow often the host sends the battle's mirror (A6: a delta from the last state each guest acknowledged).
Position History Seconds (PositionHistorySeconds)float0.500000NetworkSeconds of position history the host keeps to check claims (lag compensation, A6): every unit's place at every step.
Predicted Dodge Confirm Seconds (PredictedDodgeConfirmSeconds)float1.000000NetworkPredicted dodge (A6): a guest's dodge the host has neither started nor refused after this long is undone.
Predicted Dodge Distance Tolerance (PredictedDodgeDistanceTolerance)float0.750000NetworkPredicted dodge (A6): how much farther than Dodge Distance (plus walking) a guest's dodge may go before the host corrects it.
Predicted Dodge Grace Seconds (PredictedDodgeGraceSeconds)float0.250000NetworkPredicted dodge (A6): the host takes the guest's own movement for the dodge's duration plus this much (latency), then checks how far it went (Dodge Distance + Predicted Dodge Distance Tolerance + walking).
Rewind Time Tolerance (RewindTimeTolerance)float0.100000NetworkThe victim's places this much before and after the claim's time are tried too (interpolation delay and jitter, A6).
Ability Pacing (AbilityPacing)ERSEActionAbilityPacingCooldownPacingWhat pays for abilities: their cooldowns, a gauge filled by hits, or only their resource costs.
Gauge Max (GaugeMax)float100.000000Pacing
Gauge Per Hit Dealt (GaugePerHitDealt)float8.000000Pacing
Gauge Per Hit Taken (GaugePerHitTaken)float4.000000Pacing
Gauge Per Parry (GaugePerParry)float15.000000Pacing
Gauge Segments (GaugeSegments)int324PacingSegments of the gauge (an ability's Gauge Cost counts segments).
Parry Enabled (bParryEnabled)boolTrueParryUnits may parry (a timed guard that staggers a melee attacker). Weapons may also forbid it.
Parry Angle (ParryAngle)float120.000000ParryFull angle in front of the unit that a parry covers.
Parry Recovery (ParryRecovery)float0.400000ParrySeconds after the window during which the unit cannot act (a missed parry is punishable).
Parry Stagger Seconds (ParryStaggerSeconds)float1.500000ParryStagger of an attacker whose melee hit was parried.
Parry Stamina Cost (ParryStaminaCost)float10.000000Parry
Parry Window (ParryWindow)float0.200000ParrySeconds the parry window stays open.
Poise Max (PoiseMax)float100.000000PoisePoise of every unit: hits remove their poise damage; at 0 the unit staggers.
Poise Regen Delay (PoiseRegenDelay)float1.500000PoiseSeconds after a hit before poise refills.
Poise Regen Per Second (PoiseRegenPerSecond)float25.000000Poise
Stagger Seconds (StaggerSeconds)float1.000000PoiseLength of a poise-break stagger (poise refills at its end).
Sim Arena Radius (SimArenaRadius)float18.000000SimulatorRadius of the simulated arena around the middle of the two lines (a Bounded combat area: the AI stays inside it, so nobody kites forever). 0 = the Bounded Area Radius.
Sim Cover Count (SimCoverCount)int320SimulatorRound obstacles scattered between the two lines of a simulated battle (cover for shooters; 0 = an open field).
Sim Cover Radius (SimCoverRadius)float0.800000SimulatorRadius of each simulated obstacle.
Sim Start Separation (SimStartSeparation)float10.000000SimulatorDistance between the two sides at the start of a simulated battle.
Sim Unit Spacing (SimUnitSpacing)float2.000000SimulatorDistance between units of the same side at the start.
Stamina Max (StaminaMax)float100.000000Stamina--- Stamina ---
Stamina Regen Delay (StaminaRegenDelay)float0.800000StaminaSeconds after spending stamina before it refills.
Stamina Regen Per Second (StaminaRegenPerSecond)float35.000000Stamina
Aim Assist Angle (AimAssistAngle)float10.000000TargetingPresentation: aim assist cone (full angle).
Aim Assist Strength (AimAssistStrength)float0.300000TargetingPresentation: how strongly the aim is pulled toward targets (0 = none, 1 = snaps).
Friendly Fire (bFriendlyFire)boolFalseTargetingHostile hits also hurt the user's allies (never the user).
Lock on Range (LockOnRange)float20.000000TargetingFarthest a lock-on target may be.
Seconds Per Turn (SecondsPerTurn)float5.000000TimeOne "turn" of a unit in seconds: status durations, periodic damage, summon durations and per-turn regeneration count on this clock.
Step Seconds (StepSeconds)float0.033333TimeFixed simulation step: the battle always advances in steps of this length, so a seed replays exactly.

RPG Saga Engine: Action Battle (Presentation)

Class URSEActionPresentationSettings (module RSE), Project Settings, Project, RPG Saga Engine. The presentation of real-time action battles (D-171, package A3; docs/design/action-battle.md "Presentation"): how an encounter starts in place from exploration, the camera, the controls, the hits from animations, traces and projectile actors, the combat feel (hit-stop, shake, afterimages), the HUD....

SettingTypeDefaultCategoryRestartDescription
Aim Camera (AimCamera)FRSEActionCameraProfile(Distance=250.000000,PivotOffset=(X=0.000000,Y=0.000000,Z=160.000000),ShoulderOffset=75.000000,FieldOfView=70.000000,LagSpeed=25.000000)CameraOver the shoulder while aiming.
Action Camera (bActionCamera)boolTrueCameraThe action camera follows the controlled character (off: the pawn's own camera stays, e.g. a project's own rig).
Camera Blend Seconds (CameraBlendSeconds)float0.450000CameraSeconds of the blend into the action camera and back.
Collision Radius (CollisionRadius)float14.000000CameraThe camera stays this far from walls (sphere probe radius, cm).
Combat Camera (CombatCamera)FRSEActionCameraProfile(Distance=420.000000,PivotOffset=(X=0.000000,Y=0.000000,Z=150.000000),FieldOfView=85.000000,LagSpeed=12.000000)Camera
Gamepad Look Speed (GamepadLookSpeed)float200.000000CameraGamepad look at full stick (degrees per second).
Lock on Camera (LockOnCamera)FRSEActionCameraProfile(Distance=470.000000,PivotOffset=(X=0.000000,Y=0.000000,Z=165.000000),ShoulderOffset=35.000000,FieldOfView=80.000000,LagSpeed=10.000000)CameraWhile locked on a target.
Lock on Turn Speed (LockOnTurnSpeed)float7.000000CameraHow fast the view turns to a hard-locked target.
Mouse Look Speed (MouseLookSpeed)float0.180000CameraMouse look (degrees per mouse unit).
Pitch Max (PitchMax)float40.000000Camera
Pitch Min (PitchMin)float-60.000000Camera
Profile Blend Speed (ProfileBlendSpeed)float9.000000CameraHow fast a profile change blends (per second).
Start Pitch (StartPitch)float-15.000000CameraStarting pitch of the action camera (negative = looking down).
Afterimage Count (AfterimageCount)int323Feel
Afterimage Fade Seconds (AfterimageFadeSeconds)float0.300000Feel
Afterimage Interval (AfterimageInterval)float0.060000Feel
Afterimage Material (AfterimageMaterial)TSoftObjectPtr<UMaterialInterface>/RPGSagaEngine/Visual/Feel/M_RSE_FXGlow.M_RSE_FXGlowFeelTranslucent material of the afterimages (empty = none).
Dodge Afterimages (bDodgeAfterimages)boolTrueFeelAfterimages behind a dodging character (needs Afterimage Material).
Finishers (bFinishers)boolTrueFeelA finisher may play on a kill by this machine's player (Paired Animations, Options -> Finishers; D-172).
Block Burst (BlockBurst)TSoftObjectPtr<UNiagaraSystem>NoneFeel
Dodge Reconcile Max Error (DodgeReconcileMaxError)float150.000000FeelCo-op (A6): corrections larger than this snap at once (cm; a teleport is not smoothed).
Dodge Reconcile Min Error (DodgeReconcileMinError)float8.000000FeelCo-op (A6): corrections smaller than this are ordinary movement noise (cm).
Dodge Reconcile Seconds (DodgeReconcileSeconds)float0.150000FeelCo-op (A6): after a guest's predicted dodge, a correction of its character's place by the host is hidden: the mesh keeps its place and slides to the corrected one over this many seconds (0 = snap).
Dodge Reconcile Watch Seconds (DodgeReconcileWatchSeconds)float0.600000FeelCo-op (A6): how long after a predicted dodge ends corrections are still smoothed (seconds).
Heavy Hit Poise (HeavyHitPoise)float30.000000FeelA hit that removes at least this much poise counts as heavy (longer hit-stop, stronger shake).
Heavy Hit Stop Seconds (HeavyHitStopSeconds)float0.120000FeelHit-stop of a heavy hit (a heavy combo step, a stagger, a parry).
Hit Burst (HitBurst)TSoftObjectPtr<UNiagaraSystem>NoneFeelBursts at the hit location (optional, tinted by "User.Color").
Hit Camera Shake (HitCameraShake)TSoftClassPtr<UCameraShakeBase>NoneFeelA camera shake asset played with the procedural one (optional; scaled by the trauma).
Hit Stop Dilation (HitStopDilation)float0.030000FeelHow slow the two actors run during the hit-stop (their time dilation).
Hit Stop Seconds (HitStopSeconds)float0.060000FeelHit-stop: both actors of a landed hit freeze briefly (their own time only, never the world's: co-op safe, D-134).
Muzzle Flash (MuzzleFlash)TSoftObjectPtr<UNiagaraSystem>/RPGSagaEngine/Visual/Weapons/NS_RSE_MuzzleFlash.NS_RSE_MuzzleFlashFeelMuzzle flash of shooters whose weapon presentation has none (D-184).
Parry Burst (ParryBurst)TSoftObjectPtr<UNiagaraSystem>NoneFeel
Shake Amplitude (ShakeAmplitude)float7.000000FeelLargest shake offset at full trauma (cm).
Shake Decay (ShakeDecay)float1.800000FeelTrauma lost per second.
Shake Frequency (ShakeFrequency)float22.000000Feel
Shake on Heavy (ShakeOnHeavy)float0.600000Feel...on a heavy hit, a stagger or a guard break near the local player.
Shake on Hit Dealt (ShakeOnHitDealt)float0.220000FeelCamera shake (0..1 trauma) when the local player's hit lands.
Shake on Hit Taken (ShakeOnHitTaken)float0.450000Feel...when the local player's character is hit.
Shake Rotation (ShakeRotation)float1.400000FeelLargest shake rotation at full trauma (degrees).
Shot Color (ShotColor)FRSEUIColor(Token="Warning",Alpha=1.000000,Lightness=0.054299,Chroma=0.801492,Hue=12.070757,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))FeelColor of tracers, projectiles and flashes without their own.
Area Ring Spread Seconds (AreaRingSpreadSeconds)float0.700000FlowSeconds the ring takes to spread to the area's edge.
Banner Seconds (BannerSeconds)float1.600000Flow
Banner Text (BannerText)FTextNSLOCTEXT("RSEActionPresentationSettings", "Banner", "{Name}")FlowThe banner when a Bounded battle starts ({Name} = the encounter's name; empty = no banner).
Bounded Results Screen (bBoundedResultsScreen)boolTrueFlowBounded battles end on the results screen (off: the reward feed, as Open battles).
Open Loot Toasts (bOpenLootToasts)boolTrueFlowOpen battles: the spoils as toasts of the reward feed (D-128).
Show Area Ring (bShowAreaRing)boolTrueFlowBounded battles: the combat area's ring on the ground.
Director Class (DirectorClass)TSoftClassPtr<ARSEActionBattleDirector>NoneFlowThe presenter spawned for each battle (a Blueprint child may add its own reactions). Empty = ARSEActionBattleDirector.
Enemy Spawn Distance (EnemySpawnDistance)float900.000000FlowEnemies without a world actor appear this far in front of the leader (cm).
Enemy Spawn Spread (EnemySpawnSpread)float250.000000Flow...spread around that point (cm).
Entry Sound (EntrySound)TSoftObjectPtr<USoundBase>NoneFlow
Escape Text (EscapeText)FTextNSLOCTEXT("RSEActionPresentationSettings", "Escape", "You got away.")FlowShown when the party got away (empty = nothing).
Party Join Radius (PartyJoinRadius)float2000.000000FlowParty members within this distance of the leader fight from where they stand (cm).
Aim Height (AimHeight)float100.000000HitsThe AI aims at this height above its target's feet (cm).
Melee Height Reach (MeleeHeightReach)float220.000000HitsMelee: units within this height of the attacker's feet can be hit (cm).
Projectile Class (ProjectileClass)TSoftClassPtr<ARSEActionProjectileActor>NoneHitsThe projectile actor (a Blueprint child may add its own mesh, trail and impact). Empty = ARSEActionProjectileActor.
Projectile Material (ProjectileMaterial)TSoftObjectPtr<UMaterialInterface>/RPGSagaEngine/Visual/Feel/M_RSE_FXGlow.M_RSE_FXGlowHits
Projectile Mesh (ProjectileMesh)TSoftObjectPtr<UStaticMesh>/RPGSagaEngine/Visual/Weapons/SM_RSE_ProjectileCore.SM_RSE_ProjectileCoreHits
Projectile Visual Size (ProjectileVisualSize)float24.000000HitsSize of the default projectile's ball (cm, diameter; the collision is the ability's radius).
Shot Height (ShotHeight)float130.000000HitsShots of characters without a muzzle socket start this high above their feet (cm).
Weapon Visuals (WeaponVisuals)TArray<FRSEActionWeaponVisual>(3 entries)HitsHow weapons look in the hand (each action weapon may have one).
World Trace Channel (WorldTraceChannel)TEnumAsByte<ECollisionChannel>ECC_VisibilityHitsChannel of the hitscan and projectile traces that stop on the world (walls, props).
Crosshair Only While Aiming (bCrosshairOnlyWhileAiming)boolFalseHUDThe crosshair shows only while aiming (off: always for weapons that shoot).
Damage Numbers (bDamageNumbers)boolTrueHUDFloating damage numbers over the units.
Crosshair Color (CrosshairColor)FRSEUIColor(Token="Text",Alpha=0.900000,Lightness=0.006294,Chroma=0.000012,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))HUD
Crosshair Size (CrosshairSize)float30.000000HUDSize of the crosshair (layout units).
Gauge Color (GaugeColor)FRSEUIColor(Token="Charge",Alpha=1.000000,Lightness=-0.075148,Chroma=1.599149,Hue=95.683128,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))HUD
Gauge Width (GaugeWidth)float300.000000HUDWidth of the main gauges of the controlled character (layout units).
HUDClass (HUDClass)TSoftClassPtr<URSEActionHUDWidget>NoneHUDThe action HUD (a C++ or Blueprint child of RSE Action HUD Widget). Empty = URSEActionHUDWidget.
Layout (Layout)ERSEActionHUDLayoutChoiceAutoHUD
Lock Marker Color (LockMarkerColor)FRSEUIColor(Token="Negative",Alpha=1.000000,Lightness=-0.020204,Chroma=1.123482,Hue=0.300643,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))HUD
Lock Marker Size (LockMarkerSize)float44.000000HUDSize of the lock-on marker (layout units).
Poise Color (PoiseColor)FRSEUIColor(Token="Warning",Alpha=1.000000,Lightness=0.035043,Chroma=0.961372,Hue=10.526348,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))HUD
Stamina Color (StaminaColor)FRSEUIColor(Token="Positive",Alpha=1.000000,Lightness=-0.033025,Chroma=0.865333,Hue=-11.323245,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))HUD
Ability Keys (AbilityKeys)TArray<FKey>(2 entries)InputUse the selected ability.
Aim Keys (AimKeys)TArray<FKey>(2 entries)InputHold: over the shoulder (weapons that shoot), guard (melee weapons).
Dodge Keys (DodgeKeys)TArray<FKey>(2 entries)Input
Fire Mode Keys (FireModeKeys)TArray<FKey>(2 entries)InputNext fire mode.
Guard Keys (GuardKeys)TArray<FKey>(2 entries)InputHold to guard.
Heavy Attack Keys (HeavyAttackKeys)TArray<FKey>(2 entries)Input
Input Priority (InputPriority)int326InputPriority of the action context: above exploration, so its keys win for the battle (the exploration context stays for walking and its other keys wait).
Item Keys (ItemKeys)TArray<FKey>(2 entries)InputUse the first healing item the party carries.
Light Attack Keys (LightAttackKeys)TArray<FKey>(2 entries)Input
Lock on Keys (LockOnKeys)TArray<FKey>(2 entries)InputHard lock on / off.
Look Keys (LookKeys)TArray<FKey>(2 entries)InputThe view (2D axis keys: the mouse, the right stick).
Mapping Context (MappingContext)TSoftObjectPtr<UInputMappingContext>NoneInputA mapping context asset of your own (its actions are named in the fields below by the keys' order); empty = built from the keys.
Next Ability Keys (NextAbilityKeys)TArray<FKey>(2 entries)InputSelect the next ability.
Next Target Keys (NextTargetKeys)TArray<FKey>(2 entries)InputNext target (an axis key's sign picks the side: the mouse wheel).
Parry Keys (ParryKeys)TArray<FKey>(2 entries)Input
Previous Target Keys (PreviousTargetKeys)TArray<FKey>(2 entries)Input
Reload Keys (ReloadKeys)TArray<FKey>(2 entries)Input
Stick Deadzone (StickDeadzone)float0.200000InputGamepad stick deadzone of the look and target switch.
Switch Character Keys (SwitchCharacterKeys)TArray<FKey>(2 entries)InputTake command of the next party member.
Party Order Bindings (PartyOrderBindings)TArray<FRSEActionPartyOrderBinding>(5 entries)Input|Party OrdersDirect party orders: each binding's keys give the whole party its order (one input action per binding, listed in the Controls page).
Party Order Cycle (PartyOrderCycle)TArray<ERSEActionPartyOrder>(5 entries)Input|Party OrdersThe orders Party Order Keys cycles through, in this order (empty = every order).
Party Order Keys (PartyOrderKeys)TArray<FKey>(2 entries)Input|Party OrdersParty orders (A2): gives the whole party the next order of Party Order Cycle (the members the AI drives).
Aim Trace Range (AimTraceRange)float8000.000000TargetingFarthest an aimed shot looks for what it hits (cm).
Aim Turn Speed (AimTurnSpeed)float900.000000TargetingThe character turns to the view while aiming (degrees per second).
Soft Lock Angle (SoftLockAngle)float55.000000TargetingSoft lock: attacks without a hard lock turn toward the enemy nearest the view within this angle.
Soft Lock Range (SoftLockRange)float0.000000TargetingSoft lock reach (cm; 0 = the rules' Lock On Range).
Switch Target Cooldown (SwitchTargetCooldown)float0.250000TargetingSeconds between two target switches.

RPG Saga Engine: Action Commands

Class URSEActionCommandSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Global rules of action commands.

SettingTypeDefaultCategoryRestartDescription
Defense Enabled (bDefenseEnabled)boolTrueDefensePlayer units may block instant enemy attacks with a timed press (damage reduction).
Block Good Damage Multiplier (BlockGoodDamageMultiplier)float0.750000Defense
Block Miss Damage Multiplier (BlockMissDamageMultiplier)float1.000000DefenseDamage taken multiplier per block grade.
Block Perfect Damage Multiplier (BlockPerfectDamageMultiplier)float0.500000Defense
Block Required Tag (BlockRequiredTag)FGameplayTag(TagName="Equip.Type.Shield")DefenseOnly units with this granted tag can block (prompt and damage reduction). Worn equipment grants its Equip.Type tag, so the default Equip.Type.Shield means "a shield is equipped"; a trait tag works too. Empty = anyone.
Block Window Max Seconds (BlockWindowMaxSeconds)float1.000000DefenseThe block window never lasts longer than this (real seconds, from the prompt to the end of its Good tolerance). The battle does not stop meanwhile: the attack plays on in slow motion (Battle Presentation).
Default Defense Grade (DefaultDefenseGrade)ERSEExecutionQualityUnsetDefenseGrade used when nobody blocks (AI defenders, headless). Unset = no block.
Defense Input (DefenseInput)ERSEActionCommandInputBlockDefenseThe input that blocks (D-066: Block, a key and button of its own, so Enter / A never go to a block prompt while the player is in the command menu). Confirm / Cancel / Any share the menu's keys (the old behavior).
Defense Window (DefenseWindow)FRSEActionCommandWindow(Time=0.550000,GoodTolerance=0.120000,PerfectTolerance=0.040000)Defense
Enabled (bEnabled)boolTrueOffenseOff: no prompts are shown; every command uses DefaultGrade (accessibility option).
Default Grade (DefaultGrade)ERSEExecutionQualityGoodOffenseGrade used without a player's press: AI, auto-play, headless simulations, commands turned off.
Default Window (DefaultWindow)FRSEActionCommandWindow(Time=0.600000,GoodTolerance=0.120000,PerfectTolerance=0.040000)OffenseWindow of abilities with a command but no windows of their own.
Good Bonus (GoodBonus)FRSEExecutionBonus(DamageMultiplier=1.000000,HealMultiplier=1.000000)Offense
Miss Bonus (MissBonus)FRSEExecutionBonus(DamageMultiplier=0.750000,HealMultiplier=0.750000)Offense
Perfect Bonus (PerfectBonus)FRSEExecutionBonus(DamageMultiplier=1.300000,HealMultiplier=1.250000)Offense
Default Player Mode (DefaultPlayerMode)ERSEActionCommandPlayerModeAllPlayer OptionPlayer option used until the player picks one (Options menu / RSE.ActionCommand.PlayerMode).

RPG Saga Engine: Animation & FX Library

Class URSEAnimLibrarySettings (module RSEEditor), Project Settings, Project, RPG Saga Engine. Animation & FX Library settings (D-087): Project Settings -> RPG Saga Engine -> Animation & FX Library.

SettingTypeDefaultCategoryRestartDescription
Default Impact Fraction (DefaultImpactFraction)float0.450000Dress My Abilities
Impact Notifies (ImpactNotifies)TArray<FRSEPackNamePattern>(1 entries)Dress My AbilitiesMontages built for dressed abilities: notifies that mark the hit frame (else Default Impact Fraction).
Max Attack Combo (MaxAttackCombo)int323Dress My AbilitiesClips of a style's attack combo given to a character's Attack Presentations.
Library Asset Name (LibraryAssetName)FStringDA_AnimLibraryOutputName of the library asset in the Library Folder.
Library Folder (LibraryFolder)FDirectoryPath(set per project)OutputProject folder of the library asset, the styles, the retargeted clips and the dressed looks. Project content only.
Borrowed Clips in Place (bBorrowedClipsInPlace)boolTrueRetargetingRetargeted clips play in place (root locked): battle presentations do the travelling.
Strip Borrowed Effect Notifies (bStripBorrowedEffectNotifies)boolTrueRetargetingRetargeted clips lose their particle and trail notifies (effects of another pack's look). Sounds stay.
FXTaxonomy (FXTaxonomy)TSoftObjectPtr<URSEFXTaxonomy>/RPGSagaEngine/Data/AnimLibrary/DA_FXTaxonomy_Default.DA_FXTaxonomy_DefaultTaxonomyHow effects and sounds are classified, and the Dress My Abilities rules.
Taxonomy (Taxonomy)TSoftObjectPtr<URSEAnimTaxonomy>/RPGSagaEngine/Data/AnimLibrary/DA_AnimTaxonomy_Default.DA_AnimTaxonomy_DefaultTaxonomyHow animations are classified (categories, words, slots). The plugin's generic taxonomy fits most packs.
Thumbnail Pool Size (ThumbnailPoolSize)int32128WindowRows of the library window loaded with thumbnails at once (0 = no thumbnails).
Thumbnail Size (ThumbnailSize)int3248WindowThumbnail size in the library window (pixels).

RPG Saga Engine: Attributes

Class URSEAttributeSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Which attribute registry a game uses (D-054, docs/design/attributes.md).

SettingTypeDefaultCategoryRestartDescription
Registry (Registry)TSoftObjectPtr<URSEAttributeRegistry>NoneAttributesAttribute and resource definitions. Empty = the framework's built-in definitions (HP, MP, Resonance and the standard stats), which reproduce the default rules exactly.

RPG Saga Engine: Audio

Class URSEAudioSettings (module RSE), Project Settings, Project, RPG Saga Engine. Audio (D-036, docs/design/audio.md): music per context and map, the sound catalog and the mixer.

SettingTypeDefaultCategoryRestartDescription
Channels (Channels)TMap<ERSEAudioChannel,FRSEAudioChannelSetup>(5 entries)MixerEngine route and default volume of each channel. Channels without a route get their volume as a gain on the sounds RSE plays.
Volume Change Fade Time (VolumeChangeFadeTime)float0.100000MixerFade of sound class volume changes.
Volume Mix (VolumeMix)TSoftObjectPtr<USoundMix>NoneMixerSound mix pushed at startup; the channels' sound classes get their volumes through it. Needed only for sound class routes.
Area Music Check Interval (AreaMusicCheckInterval)float0.500000MusicHow often the explorer's area is checked for area-volume music (only on maps that have such volumes).
Music Plays when Paused (bMusicPlaysWhenPaused)boolTrueMusicMusic keeps playing while the game is paused (menus).
Resume Covered Music (bResumeCoveredMusic)boolTrueMusicA track that comes back after being covered (area music after a battle) continues where it was, if its length is known.
Context Music (ContextMusic)TMap<ERSEMusicContext,FRSEMusicTrack>(5 entries)MusicDefault track of each context. A context without a track plays silence (Dialog: dialogs keep the current music).
Default Fade In (DefaultFadeIn)float1.000000MusicFade-in of tracks that do not set their own.
Default Fade Out (DefaultFadeOut)float1.000000MusicFade-out of the replaced music when the incoming track does not set its own.
Map Music (MapMusic)TMap<TSoftObjectPtr<UWorld> ,FRSEMusicTrack>(0 entries)MusicExploration music of a map, used outside area volumes with music. Maps not listed use ContextMusic[Exploration].
Preload Catalog (bPreloadCatalog)boolTrueSound EffectsLoads every catalog sound when the game starts (no delay on the first play). Off: each sound loads on first use.
Min Retrigger Time (MinRetriggerTime)float0.040000Sound EffectsThe same tag does not play again within this time (a menu rebuilt twice in a frame, a hit on many targets).
Sound Catalog (SoundCatalog)TSoftObjectPtr<URSESoundCatalog>NoneSound EffectsThe sound library: GameplayTag -> sound (Audio.UI., Audio.Battle., Audio.World.*). Empty = silent.
Battle Event Sounds (BattleEventSounds)TMap<ERSEBattleEventType,FGameplayTag>(6 entries)Sound Effects|BattleSound of each presented battle event type.
Battle Event Sounds (bBattleEventSounds)boolTrueSound Effects|BattlePresented battle events play catalog sounds (hit, miss, heal, KO, summon). Off when presentation assets play their own.
Block Sound (BlockSound)FGameplayTag(TagName="Audio.Battle.Block")Sound Effects|BattleA defensive command that was not a Miss.
Critical Hit Sound (CriticalHitSound)FGameplayTag(TagName="Audio.Battle.Crit")Sound Effects|BattlePlayed instead of the DamageDealt sound for critical hits.
Perfect Sound (PerfectSound)FGameplayTag(TagName="Audio.Battle.Perfect")Sound Effects|BattleA Perfect action command grade.

RPG Saga Engine: Balance

Class URSEBalanceSettings (module RSECore), Project Settings, Project, RPG Saga Engine. "Balance My Campaign" (D-077, docs/product/balance-tool.md): the target bands per kind of battle, the party levels the scenarios use, the knobs the proposals may turn and how long the search runs.

SettingTypeDefaultCategoryRestartDescription
Check Ability Cliffs (bCheckAbilityCliffs)boolTrueBandsFlag enemy abilities that unlock strictly inside a zone's level range (a difficulty cliff, D-068).
Check One Shots (bCheckOneShots)boolTrueBandsCheck the D-066 rule: no enemy takes a full-HP party member down with one normal hit.
Boss Win Rate (%) (BossWinRate)FRSEProgressionBand(Min=30.000000,Max=60.000000)Bands
Use Campaign Turn Bands (bUseCampaignTurnBands)boolFalseBandsParty turns per battle from the campaign's targets (TurnsPerBattle for normal / elite, KeyBattleTurns for the others). Off by default: those are zone medians over every mode, and a Tactics battle counts many more unit turns than an ATB one.
Class Swing Threshold (ClassSwingThreshold)float20.000000BandsA class is an outlier when parties with it win this many points more or less than parties without it.
Elite Win Rate (%) (EliteWinRate)FRSEProgressionBand(Min=55.000000,Max=80.000000)Bands
Key Turns (KeyTurns)FRSEProgressionBand(Min=8.000000,Max=96.000000)BandsParty turns of key, boss and ultra battles (~24 rounds of a party of four).
Key Battle Win Rate (%) (KeyWinRate)FRSEProgressionBand(Min=60.000000,Max=85.000000)Bands
Max Timeout Rate (MaxTimeoutRate)float5.000000BandsHighest acceptable share of battles stopped by the simulator's guard (percent).
Normal Win Rate (%) (NormalWinRate)FRSEProgressionBand(Min=75.000000,Max=95.000000)Bands--- Win-rate bands (percent of battles won by the standard party) ---
Regular Turns (RegularTurns)FRSEProgressionBand(Min=4.000000,Max=48.000000)BandsParty turns (every party unit's turns together) of normal and elite battles. The default allows ~12 rounds of a party of four.
Ultra Boss Win Rate (%) (UltraWinRate)FRSEProgressionBand(Min=30.000000,Max=60.000000)Bands
Tune Enemy Count (bTuneEnemyCount)boolTrueKnobsTry one enemy more or less.
Class Growth Steps (ClassGrowthSteps)TArray<float>(3 entries)KnobsClass growth steps (percent on the PerLevel of the Progression Designer's vitality and power stats).
Class Probe Scenarios (ClassProbeScenarios)int326KnobsAlternative-party scenarios a class candidate is measured on.
Enemy Count Cost (EnemyCountCost)float3.000000Knobs
Enemy Stat Cost (EnemyStatCost)float2.000000Knobs
Enemy Stat Steps (EnemyStatSteps)TArray<float>(3 entries)KnobsEnemy family steps (percent on the enemy's HP and offense), when no encounter knob lands in the band.
Intelligence Cost (IntelligenceCost)float1.500000Knobs
Intelligence Steps (IntelligenceSteps)TArray<float>(2 entries)KnobsIntelligence floors (harder) / caps (easier) tried, as steps from the encounter's current bounds.
Level Cost (LevelCost)float1.000000KnobsCost of a change when choosing between candidates that land in the band (per level, per step, per enemy, per 10%).
Max Level Step (MaxLevelStep)int323KnobsLargest level step tried on an encounter (offset or fixed level).
Min Improvement (MinImprovement)float0.400000KnobsA candidate that does not land in the band is kept only if it removes at least this share of the score.
One Shot Steps (OneShotSteps)TArray<float>(4 entries)KnobsOffense steps (percent) tried against a one-shot.
Turn Weight (TurnWeight)float2.000000KnobsScore points per party turn outside the turn band (win-rate points count 1 each).
Alternative Party Kinds (AlternativePartyKinds)TArray<ERSEEncounterBalanceRole>(1 entries)Party LevelsAlternative parties play these kinds of battle (their other flags would repeat the standard party's).
Boss Level (BossLevel)FRSEBalanceLevelRule(Fraction=1.000000)Party LevelsBosses: the zone's exit level.
Elite Level (EliteLevel)FRSEBalanceLevelRule(Fraction=0.500000)Party Levels
Key Level (KeyLevel)FRSEBalanceLevelRule(Fraction=0.500000,Rounding=Up)Party LevelsKey battles: halfway through the zone, rounded up.
Normal Level (NormalLevel)FRSEBalanceLevelRule(Fraction=0.500000)Party LevelsNormal battles: halfway through the zone's target levels, rounded down (the D-068 scenarios).
Ultra Level (UltraLevel)FRSEBalanceLevelRule(Source=OptionalTarget,Fraction=1.000000)Party LevelsUltra bosses: the recommended level of the campaign's optional content.
Report Folder (ReportFolder)FStringBalanceReportReports go to <Project>/Saved/<ReportFolder>/<timestamp>_<campaign>/ (report.md, report.json).
Max Iterations (MaxIterations)int323Simulation
Runs (Runs)int3240SimulationBattles per scenario (seeds Seed .. Seed + Runs - 1).
Runs Per Slice (RunsPerSlice)int325SimulationBattles per time slice (the editor window stays responsive between slices).
Search Runs (SearchRuns)int3220SimulationBattles per candidate while searching (the first seeds of the scenario); accepted changes are re-measured with Runs.
Slice Milliseconds (SliceMilliseconds)float40.000000SimulationTime the editor window gives the job per frame.
Time Budget Seconds (TimeBudgetSeconds)float900.000000Simulation

RPG Saga Engine: Barks

Class URSEBarkSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Project Settings -> RPG Saga Engine -> Barks (D-157): the pools every NPC falls back on and how often NPCs talk.

SettingTypeDefaultCategoryRestartDescription
Decision Window Seconds (DecisionWindowSeconds)float0.250000BudgetRequests made within this time are decided together: the speaker with the highest priority, then the nearest to the player (the most relevant) wins. 0 = decided at once, first come first served.
Global Cooldown Seconds (GlobalCooldownSeconds)float2.500000BudgetLeast time between two automatic lines starting anywhere (a crowd never talks in chorus).
Max Concurrent Lines (MaxConcurrentLines)int321BudgetMost lines said at once over NPCs' heads (automatic ones: greetings, small talk, proximity barks). 0 = no automatic lines.
Quiet After Screen Seconds (QuietAfterScreenSeconds)float2.000000BudgetNo automatic lines while a dialog, a document or any modal screen is open, and this long after it closed.
Approach Kind (ApproachKind)FGameplayTag(TagName="Bark.Kind.Greeting")ChoiceThe kind asked for when the party comes near (Bark.Kind.Greeting); lines of other kinds are used when it has none.
Talk Falls Back to Lines (bTalkFallsBackToLines)boolTrueChoiceTalking to an NPC with no dialog and no interaction gets one of its lines (off: no prompt for it).
Fallback Lines (FallbackLines)TArray<FText>(3 entries)ChoiceWhat an NPC says when it is talked to and none of its lines passes now (all conditional, none fits the hour or the weather) or its interaction / dialog had nothing to run: Talk is never silent. One is picked at random.
Repeat Memory (RepeatMemory)int323ChoiceHow many of an NPC's last lines it avoids repeating while it has others to say.
Default Pools (DefaultPools)TArray<TSoftObjectPtr<URSEBarkPoolData> >(1 entries)PoolsUsed by NPCs without pools of their own or of their NPC Type: nobody is mute.
Global Pools (GlobalPools)TArray<TSoftObjectPtr<URSEBarkPoolData> >(3 entries)PoolsShared by every NPC on top of its own (weather talk, the region's rumours).
Ambient Interval (AmbientInterval)FVector2D(X=12.000000,Y=24.000000)TimingSeconds between an NPC's small talk while the party stays near (random between the two; 0 = only on approach).
Max Seconds (MaxSeconds)float6.000000Timing
Min Seconds (MinSeconds)float2.500000Timing
Seconds Per Character (SecondsPerCharacter)float0.060000TimingHow long a line stays over the speaker (seconds per character, with a minimum and a maximum).

RPG Saga Engine: Battle

Class URSEBattleSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Global battle rules.

SettingTypeDefaultCategoryRestartDescription
ATBBack Row Physical Multiplier (ATBBackRowPhysicalMultiplier)float0.500000ATBPhysical damage multiplier when the attacker or the target stands in the back row (each applies).
ATBFill Per Speed (ATBFillPerSpeed)float2.000000ATBGauge filled per second per point of Speed.
ATBGauge Max (ATBGaugeMax)float100.000000ATBA unit gets a command when its gauge reaches this value.
ATBInitial Gauge Per Speed (ATBInitialGaugePerSpeed)float3.000000ATBGauge at battle start per point of Speed (never a full gauge).
ATBParty Size (ATBPartySize)int324ATBCharacters in an ATB party.
ATBStep Seconds (ATBStepSeconds)float0.033333ATBFixed simulation step, in seconds. Smaller = finer timing, more work.
Default ATBTime Mode (DefaultATBTimeMode)ERSEATBTimeModeWaitATBDefault time mode, used until the player picks one in the options (D-022, D-038).
Busy Commands (BusyCommands)ERSEATBBusyCommandsQueueATB|CommandsA command given while an action is still being shown: queued (runs right after it) or refused.
Flee Base Chance (FleeBaseChance)float40.000000ATB|FleeFlee chance in percent: base, plus per point of (party average Speed - enemy average Speed).
Flee Chance Per Speed (FleeChancePerSpeed)float3.000000ATB|Flee
Flee Max Chance (FleeMaxChance)float95.000000ATB|Flee
Flee Min Chance (FleeMinChance)float5.000000ATB|Flee
Active Menu Time Scale (ActiveMenuTimeScale)float1.000000ATB|TimeActive mode: time scale while the player is in a sub-list or picks a target (1 = full speed, the classic Active; 0.5 = half speed while choosing). The first command list always runs at full speed.
Wait Pauses Enemies (bWaitPausesEnemies)boolTrueATB|TimeWait mode: while time stands still, ready enemies wait too (no new enemy action starts; the one being shown finishes).
Wait Pause (WaitPause)ERSEATBWaitPauseAnyMenuATB|TimeWait mode: which open command menus stop ATB time (D-065).
Base Critical Chance (BaseCriticalChance)float5.000000DamageBase critical chance in percent.
Critical Multiplier (CriticalMultiplier)float1.500000Damage
Defense Constant (DefenseConstant)float100.000000DamageDefense reduces damage by DefenseConstant / (DefenseConstant + Defense): diminishing returns, never immune.
Max Hit Chance (MaxHitChance)float100.000000Damage
Min Damage (MinDamage)int321DamageSmallest damage of a hit that is not nullified by affinity.
Min Hit Chance (MinHitChance)float5.000000DamageHit chance bounds in percent, after Accuracy - Evasion and positional bonuses.
Variance Max (VarianceMax)float1.100000Damage
Variance Min (VarianceMin)float0.900000DamageRandom damage spread: each hit is multiplied by a value in [VarianceMin, VarianceMax].
Affinity Multipliers (AffinityMultipliers)TMap<ERSEElementAffinity,float>(5 entries)ElementsDamage multiplier per affinity. Negative values heal (absorb).
Default Encounter Mode (DefaultEncounterMode)FGameplayTag()EncountersThe mode new battles start with when the wizards and the Studio make an encounter (Battle.Mode.Tactics, ATB, Turn, Action; D-171 A7). Empty = Project Settings -> Wizards -> Default Battle Mode. A game that is mostly real-time sets Action; each encounter still decides its own mode.
Jump Down Bonus (JumpDownBonus)int321Tactics|MovementHeight steps a unit may drop beyond its Jump stat.
Back Damage Multiplier (BackDamageMultiplier)float1.500000Tactics|Positioning
Back Hit Bonus (BackHitBonus)float25.000000Tactics|Positioning
Height Damage Max (HeightDamageMax)float1.500000Tactics|Positioning
Height Damage Min (HeightDamageMin)float0.700000Tactics|Positioning
Height Damage Per Step (HeightDamagePerStep)float0.100000Tactics|PositioningDamage change per height step the attacker stands above (or below) the target.
Line Of Sight Eye Height (LineOfSightEyeHeight)float2.000000Tactics|PositioningEye height above a tile surface for line of sight, in height steps.
Side Damage Multiplier (SideDamageMultiplier)float1.250000Tactics|PositioningDamage multiplier when hitting a target from the side / from behind.
Side Hit Bonus (SideHitBonus)float10.000000Tactics|PositioningExtra hit chance (percent points) when attacking from the side / from behind.
CTThreshold (CTThreshold)int32100Tactics|Turn OrderA unit takes its turn when its CT reaches this value.
KOCountdown Turns (KOCountdownTurns)int323Tactics|Turn OrderTactics: own turns a fallen unit can wait to be revived before it leaves the battle. 0 = no countdown.
Turn CTCost Full (TurnCTCostFull)int32100Tactics|Turn OrderCT spent by a turn in which all Action Points were used. Partial use interpolates.
Turn CTCost Idle (TurnCTCostIdle)int3260Tactics|Turn OrderCT spent by a turn in which no Action Points were used.

RPG Saga Engine: Battle Feel

Class URSEBattleFeelSettings (module RSE), Project Settings, Project, RPG Saga Engine. The feel of battles (D-115, docs/product/free-tactics.md "Battle feel"): how a live battle starts (a ring spreading from the contact point, the enemies turning with a bark, the HUD fading in), the pace of every action (wind-up or cast, hit-stop, the target's reaction, recovery), the juice (element-c...

SettingTypeDefaultCategoryRestartDescription
Alert Bark Chance (AlertBarkChance)float0.600000EntryChance of each enemy after the first to bark (the first always does).
Alert Barks (AlertBarks)TArray<FText>(4 entries)EntryLines the enemies shout as they turn ("!", "There!"). A character's Battle Barks -> Alert replaces them.
Alert Bark Stagger (AlertBarkStagger)float0.180000EntrySeconds between two barks (they come one after another).
Bark Seconds (BarkSeconds)float1.400000EntrySeconds a bark stays over the unit.
Enemies Face Party (bEnemiesFaceParty)boolTrueEntryEnemies that noticed the party turn toward it at the start (not when the party surprised them). Their facing is the battle's.
Entry Sequence (bEntrySequence)boolTrueEntryA live battle starts with its entry sequence: the ring, the enemies turning, the barks, the HUD fading in. Off: at once.
Entry Min Seconds (EntryMinSeconds)float1.000000EntryThe first turn waits until the entry has played this long (real seconds; at least the ring's spread).
Entry Turn Seconds (EntryTurnSeconds)float0.400000EntryReal seconds the enemies take to turn (and a unit nudged to a free spot takes to slide there).
HUDFade Delay (HUDFadeDelay)float0.350000EntryThe battle HUD fades in after this many real seconds, over HUD Fade Seconds.
HUDFade Seconds (HUDFadeSeconds)float0.500000Entry
Max Alert Barks (MaxAlertBarks)int323EntryAt most this many enemies bark at the start.
Ring Color (RingColor)FLinearColor(R=1.000000,G=0.620000,B=0.250000,A=0.900000)Entry
Ring Fade Seconds (RingFadeSeconds)float0.600000Entry
Ring Hold Seconds (RingHoldSeconds)float0.300000EntryThe ring stays this long at its radius, then fades over Ring Fade Seconds.
Ring Material (RingMaterial)TSoftObjectPtr<UMaterialInterface>/RPGSagaEngine/Materials/Battle/M_RSE_BattleRing.M_RSE_BattleRingEntryDeferred decal of the ring, the magic circles and the telegraphs (M_RSE_BattleRing: Color, Ring, Fill, Runes, Opacity).
Ring Radius (RingRadius)float10.000000EntryRadius the ring spreads to (meters). 0 = half the captured battle area.
Ring Spread Seconds (RingSpreadSeconds)float0.800000EntrySeconds (real time) the battle ring takes to spread from the contact point to its radius.
Ring Width (RingWidth)float40.000000EntryWidth of the ring's line on the ground (cm).
Show Intent (bShowIntent)boolTrueIntentOn an enemy's turn, its intent shows over it briefly (icon and bark) before it acts.
Callout Height (CalloutHeight)float230.000000IntentHeight of barks and intents above a unit's feet (cm).
Intent Bark Chance (IntentBarkChance)float0.500000IntentChance that the enemy also shouts a line with its intent.
Intent Display Seconds (IntentDisplaySeconds)float1.500000IntentSeconds the intent stays on screen.
Intent Icon Material (IntentIconMaterial)TSoftObjectPtr<UMaterialInterface>/RPGSagaEngine/Materials/UI/M_RSE_IntentIcon.M_RSE_IntentIconIntentUI material of the built-in icons (M_RSE_IntentIcon: Shape, Color).
Intent Icon Size (IntentIconSize)float36.000000IntentIcon size on screen (pixels at 1080p).
Intent Lookahead (IntentLookahead)int324IntentAn enemy that walks first decides the rest of its turn this many steps ahead (spread over frames), so its intent shows what the walk is for (walk up and strike = Attack). 0 = a walk shows Move.
Intents (Intents)TMap<ERSEBattleIntent,FRSEIntentLook>(9 entries)IntentEach intent's icon, color and lines.
Intent Seconds (IntentSeconds)float0.750000IntentSeconds the enemy waits with its intent shown before acting (game seconds, follows the battle speed).
Cast Circle (bCastCircle)boolTrueJuiceSpells and supports draw a magic circle under the caster while they charge.
Impact Flash (bImpactFlash)boolTrueJuiceElement-colored flash at each hit target at the impact.
Impact Shake (bImpactShake)boolFalseJuiceA small camera shake at impacts (stronger on criticals). Off by default (D-113: the live camera never jolts); Free Tactics (Presentation) -> Action Camera Shake also turns it on.
Projectiles (bProjectiles)boolTrueJuiceSpells at a distance fly to their target (a glowing core with the element's trail) instead of landing at once.
Telegraph (bTelegraph)boolTrueJuiceWhere a spell will land is marked on the ground while it charges (its area, or the target's footprint).
Weapon Trails (bWeaponTrails)boolTrueJuiceMelee strikes leave a ribbon trail on the weapon during the swing (a presentation may turn it on or off).
Cast Circle Radius (CastCircleRadius)float120.000000Juice
Critical Scale (CriticalScale)float1.600000JuiceCriticals: larger flash, stronger shake, bigger number.
Elements (Elements)TMap<FGameplayTag,FRSEElementLook>(8 entries)JuicePer element (Element.*): color and default effects. Abilities without an element use Neutral Look.
Glow Material (GlowMaterial)TSoftObjectPtr<UMaterialInterface>/RPGSagaEngine/Visual/Feel/M_RSE_FXGlow.M_RSE_FXGlowJuice
Glow Mesh (GlowMesh)TSoftObjectPtr<UStaticMesh>/Engine/BasicShapes/Sphere.SphereJuiceMesh and additive material of flashes and projectile cores (a sphere, M_RSE_FXGlow: Color, Intensity, Opacity).
Impact Flash Intensity (ImpactFlashIntensity)float5.000000Juice
Impact Flash Seconds (ImpactFlashSeconds)float0.240000Juice
Impact Flash Size (ImpactFlashSize)float90.000000JuiceSize of the impact flash (cm, its widest). Criticals are Critical Scale larger.
Impact Shake Amplitude (ImpactShakeAmplitude)float4.000000Juice
Impact Shake Seconds (ImpactShakeSeconds)float0.160000Juice
Neutral Look (NeutralLook)FRSEElementLook(Color=(R=1.000000,G=0.930000,B=0.800000,A=1.000000),CastEffect="/RPGSagaEngine/Visual/Feel/NS_RSE_Cast_Neutral.NS_RSE_Cast_Neutral",ImpactEffect="/RPGSagaEngin...Juice
Projectile Arc (ProjectileArc)float60.000000JuiceHeight of the projectile's arc at its middle (cm).
Projectile Min Distance (ProjectileMinDistance)float250.000000JuiceTargets closer than this (cm) get no projectile.
Projectile Size (ProjectileSize)float30.000000Juice
Support Look (SupportLook)FRSEElementLook(Color=(R=0.450000,G=1.000000,B=0.600000,A=1.000000),CastEffect="/RPGSagaEngine/Visual/Feel/NS_RSE_Cast_Support.NS_RSE_Cast_Support",ImpactEffect="/RPGSagaEngin...JuiceColor of heals and buffs (flashes, circles, telegraphs of support actions).
Telegraph Fill (TelegraphFill)float0.100000JuiceOpacity of the telegraph's fill (its outline is opaque).
Telegraph Min Radius (TelegraphMinRadius)float75.000000JuiceSmallest telegraph radius (cm): a single target's mark.
Trail Anchor (TrailAnchor)FGameplayTag(TagName="Appearance.Anchor.WeaponTip")JuiceWhere the trail is attached (Appearance.Anchor.*: the weapon tip, else the hand).
Trail Linger (TrailLinger)float0.120000JuiceThe trail keeps emitting this long after the impact.
Weapon Trail (WeaponTrail)TSoftObjectPtr<UNiagaraSystem>/RPGSagaEngine/Visual/Feel/NS_RSE_WeaponTrail.NS_RSE_WeaponTrailJuiceThe trail (a ribbon Niagara system that follows its emitter, NS_RSE_WeaponTrail).
Free Tactics Pacing (FreeTacticsPacing)FRSEActionPacingDefaults(bEnabled=True,Melee=(bOverride=True,WindUp=0.280000,ImpactHold=0.090000,HitStopDilation=0.030000,HitSlide=22.000000,Recovery=0.400000,ProjectileSpeed=1600.0000...PacingThe pace of each kind of action in Free Tactics and the floors no override goes under (D-115).
Turn Reframe Dead Zone (TurnReframeDeadZone)float3.000000PacingAt a new turn the camera glides to the active unit when it is farther than this from the view's center (meters).
Turn Reframe Seconds (TurnReframeSeconds)float0.550000PacingReal seconds of that glide (eased in and out, at the current zoom: no close-ups). 0 = the camera's own interpolation.
Wind Up Draw Back (WindUpDrawBack)float14.000000PacingMelee and ranged wind-up: the actor draws back this far (cm) before the strike.
Status Effects (bStatusEffects)boolTrueStatusesStatus effects on units while statuses last (their Loop Effect, else the visual for their tag below).
Max Status Effects Per Unit (MaxStatusEffectsPerUnit)int322StatusesAt most this many status effects on one unit at a time (the newest win).
Status Visuals (StatusVisuals)TMap<FGameplayTag,FRSEStatusVisual>(21 entries)StatusesFallback looks by status tag (Status.*; a parent tag covers its children).

RPG Saga Engine: Battle Flow UI

Class URSEBattleFlowUISettings (module RSE), Project Settings, Project, RPG Saga Engine. What happens on screen after a battle (D-030, D-031): the victory results screen and the game over screen.

SettingTypeDefaultCategoryRestartDescription
Game Over Delay (GameOverDelay)float1.500000FlowPause after the defeat banner before the game over screen opens.
Results Delay (ResultsDelay)float1.200000FlowPause after the victory banner before the results screen opens.
Results Presentation (ResultsPresentation)ERSEResultsPresentationScreenFlowD-128: how a won Tactics or ATB battle shows its rewards: the classic results screen (default), or the reward feed (floating texts and toasts over the world, Project Settings -> Reward Feed). Free Tactics battles choose with Free Tactics -> Results Mode.
Screen ZOrder (ScreenZOrder)int3220FlowViewport Z order of both screens (above the battle HUDs).
Game Over Background Color (GameOverBackgroundColor)FRSEUIColor(Token="Black",Alpha=0.750000,Chroma=1.000000,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))LayoutCovers the screen behind the game over menu.
Game Over Menu Width (GameOverMenuWidth)float380.000000Layout
Results Width (ResultsWidth)float520.000000LayoutWidth of the rewards column of the results screen.
Statistics Number Column Width (StatisticsNumberColumnWidth)float76.000000LayoutWidth of each number column of the statistics table (dealt, taken, KOs).
Statistics Width (StatisticsWidth)float420.000000LayoutWidth of the battle statistics column of the results screen (0 = no statistics column).
Experience Bar Color (ExperienceBarColor)FRSEUIColor(Token="Info",Alpha=1.000000,Lightness=-0.035760,Chroma=1.293677,Hue=13.383118,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Layout|ResultsExperience bar: the part the member had before the battle.
Experience Bar Height (ExperienceBarHeight)float7.000000Layout|Results
Experience Gain Color (ExperienceGainColor)FRSEUIColor(Token="Rare",Alpha=1.000000,Lightness=-0.007420,Chroma=0.969650,Hue=-2.652298,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Layout|ResultsExperience bar: the part gained in this battle (the whole bar after a level up).
Item Columns (ItemColumns)int322Layout|ResultsItems gained are laid out in this many columns.
Member Card Width (MemberCardWidth)float230.000000Layout|ResultsWidth of one member card (name, level, experience bar, level up, new abilities).
Portrait Size (PortraitSize)float52.000000Layout|ResultsPortrait slot of a member card (the speaker portrait of the character; the initial when it has none). 0 = no portrait.
Rare Item Color (RareItemColor)FRSEUIColor(Token="Rare",Alpha=1.000000,Lightness=-0.061545,Chroma=0.675865,Hue=-151.382233,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Layout|Results
Rare Item Min Buy Price (RareItemMinBuyPrice)int32300Layout|ResultsAn item worth at least this much (buy price) is a rare drop: highlighted with RareItemColor and RareBadge. 0 = none.
Game Over Widget Class (GameOverWidgetClass)TSoftClassPtr<URSEScreenWidget>NoneScreensGame over screen (D-052). Empty = built-in. A Widget Blueprint derived from RSEScreenWidget receives a RSEGameOverViewModel.
Results Widget Class (ResultsWidgetClass)TSoftClassPtr<URSEScreenWidget>NoneScreensResults screen (D-052). Empty = the built-in themed screen. A Widget Blueprint derived from RSEScreenWidget replaces it and receives a RSEResultsViewModel (docs/product/custom-ui.md).
Game Over Hint (GameOverHint)FTextNSLOCTEXT("RSEBattleFlowUI", "GameOverHint", "Up / Down: select Select: choose")Texts|Game Over
Game Over Title (GameOverTitle)FTextNSLOCTEXT("RSEBattleFlowUI", "GameOverTitle", "Game Over")Texts|Game Over--- Game over texts ---
Load Label (LoadLabel)FTextNSLOCTEXT("RSEBattleFlowUI", "Load", "Load last save")Texts|Game Over
Load Unavailable Detail (LoadUnavailableDetail)FTextNSLOCTEXT("RSEBattleFlowUI", "LoadUnavailable", "No saved games")Texts|Game OverDetail next to Load when there is no save.
Main Menu Label (MainMenuLabel)FTextNSLOCTEXT("RSEBattleFlowUI", "MainMenu", "Return to main menu")Texts|Game Over
Retry Label (RetryLabel)FTextNSLOCTEXT("RSEBattleFlowUI", "Retry", "Retry battle")Texts|Game Over
Unavailable Detail (UnavailableDetail)FTextNSLOCTEXT("RSEBattleFlowUI", "Unavailable", "Not available")Texts|Game OverDetail next to an option that cannot be used for another reason (no main menu map, nothing to retry).
Card Level Format (CardLevelFormat)FTextNSLOCTEXT("RSEBattleFlowUI", "CardLevel", "{Term.LevelShort} {Level}")Texts|ResultsLevel on a card ({Level}).
Card Level Up Format (CardLevelUpFormat)FTextNSLOCTEXT("RSEBattleFlowUI", "CardLevelUp", "{Term.LevelShort} {OldLevel} → {Level}")Texts|ResultsLevel on the card of a member that levelled up ({OldLevel}, {Level}).
Continue Label (ContinueLabel)FTextNSLOCTEXT("RSEBattleFlowUI", "Continue", "Continue")Texts|Results
Experience Gained Format (ExperienceGainedFormat)FTextNSLOCTEXT("RSEBattleFlowUI", "ExperienceGained", "+{Amount} {Term.ExperienceShort}")Texts|ResultsExperience gained on a card ({Amount}).
Experience Label (ExperienceLabel)FTextNSLOCTEXT("RSEBattleFlowUI", "ExperienceLabel", "{Term.Experience}")Texts|Results
Item Count Format (ItemCountFormat)FTextNSLOCTEXT("RSEBattleFlowUI", "ItemCount", "×{Count}")Texts|ResultsCount of an item gained ({Count}).
Item Format (ItemFormat)FTextNSLOCTEXT("RSEBattleFlowUI", "Item", "{Item} x{Count}")Texts|ResultsOne item: {Item}, {Count}.
Items Header (ItemsHeader)FTextNSLOCTEXT("RSEBattleFlowUI", "ItemsHeader", "{Term.Items} obtained")Texts|Results
KOBadge (KOBadge)FTextNSLOCTEXT("RSEBattleFlowUI", "KOBadge", "KO")Texts|ResultsBadge of a member that ended the battle KO.
Level Up Badge (LevelUpBadge)FTextNSLOCTEXT("RSEBattleFlowUI", "LevelUpBadge", "LEVEL UP!")Texts|ResultsBadge of a member that levelled up.
Level Up Format (LevelUpFormat)FTextNSLOCTEXT("RSEBattleFlowUI", "LevelUp", "{Name} reached level {Level}!")Texts|ResultsA level up: {Name}, {Level}.
Max Level Text (MaxLevelText)FTextNSLOCTEXT("RSEBattleFlowUI", "MaxLevel", "Maximum level")Texts|Results
Member Format (MemberFormat)FTextNSLOCTEXT("RSEBattleFlowUI", "Member", "{Name} {Term.LevelShort} {Level} +{Amount} {Term.ExperienceShort}")Texts|ResultsOne member: {Name}, {Level}, {Amount} (experience gained).
Member KOText (MemberKOText)FTextNSLOCTEXT("RSEBattleFlowUI", "MemberKO", "{Name} {Term.LevelShort} {Level} KO: no experience")Texts|ResultsDetail of a fallen member (gets no experience).
Money Label (MoneyLabel)FTextNSLOCTEXT("RSEBattleFlowUI", "MoneyLabel", "{Term.Money}")Texts|Results
Money Value Format (MoneyValueFormat)FTextNSLOCTEXT("RSEBattleFlowUI", "MoneyValue", "+{Money}")Texts|ResultsMoney value in the spoils ({Money}, already formatted by the Economy settings).
New Ability Format (NewAbilityFormat)FTextNSLOCTEXT("RSEBattleFlowUI", "NewAbility", "{Name} learned {Ability}.")Texts|ResultsAn ability learned: {Name}, {Ability}.
No Items Text (NoItemsText)FTextNSLOCTEXT("RSEBattleFlowUI", "NothingFound", "Nothing found")Texts|Results
Pact Points Format (PactPointsFormat)FTextNSLOCTEXT("RSEBattleFlowUI", "PactPoints", "{Pact}: +{Amount} Pact points")Texts|ResultsPact points: {Pact}, {Amount}.
Pact Points Label Format (PactPointsLabelFormat)FTextNSLOCTEXT("RSEBattleFlowUI", "PactPointsLabel", "{Pact} (Pact points)")Texts|ResultsPact points row of the spoils: label ({Pact}) and value ({Amount}).
Pact Points Value Format (PactPointsValueFormat)FTextNSLOCTEXT("RSEBattleFlowUI", "PactPointsValue", "+{Amount}")Texts|Results
Rare Badge (RareBadge)FTextNSLOCTEXT("RSEBattleFlowUI", "RareBadge", "RARE")Texts|ResultsBadge of a rare drop.
Recruited Format (RecruitedFormat)FTextNSLOCTEXT("RSEBattleFlowUI", "Recruited", "{Name}")Texts|ResultsA character captured in the battle joined the party: label ({Name}); the value is RecruitedValue.
Recruited Value (RecruitedValue)FTextNSLOCTEXT("RSEBattleFlowUI", "RecruitedValue", "joined the party")Texts|Results
Results Hint (ResultsHint)FTextNSLOCTEXT("RSEBattleFlowUI", "ResultsHint", "Select: continue")Texts|Results
Results Title (ResultsTitle)FTextNSLOCTEXT("RSEBattleFlowUI", "ResultsTitle", "Victory")Texts|Results--- Results texts ({Name}, {Amount}, {Level}, {Ability}, {Item}, {Count}, {Pact} are filled in) ---
Spoils Header (SpoilsHeader)FTextNSLOCTEXT("RSEBattleFlowUI", "SpoilsHeader", "Spoils")Texts|ResultsTitle of the spoils section (experience, money, Pact points, items).
To Next Format (ToNextFormat)FTextNSLOCTEXT("RSEBattleFlowUI", "ToNext", "Next level: {Amount}")Texts|ResultsExperience still needed for the next level ({Amount}).
Total Experience Format (TotalExperienceFormat)FTextNSLOCTEXT("RSEBattleFlowUI", "TotalExperience", "{Term.Experience} earned: {Amount}")Texts|ResultsLine with the total experience.
Biggest Hit Critical Format (BiggestHitCriticalFormat)FTextNSLOCTEXT("RSEBattleFlowUI", "BiggestHitCritical", "Biggest hit: {Amount}, critical ({Name}, {Ability})")Texts|StatisticsThe biggest hit was a critical hit.
Biggest Hit Format (BiggestHitFormat)FTextNSLOCTEXT("RSEBattleFlowUI", "BiggestHit", "Biggest hit: {Amount} ({Name}, {Ability})")Texts|Statistics{Amount}, {Name} (who hit), {Ability} (ability or item).
Biggest Hit No Ability Format (BiggestHitNoAbilityFormat)FTextNSLOCTEXT("RSEBattleFlowUI", "BiggestHitNoAbility", "Biggest hit: {Amount} ({Name})")Texts|StatisticsThe biggest hit has no known ability ({Amount}, {Name}).
Dealt Column (DealtColumn)FTextNSLOCTEXT("RSEBattleFlowUI", "DealtColumn", "Dealt")Texts|Statistics
Duration Format (DurationFormat)FTextNSLOCTEXT("RSEBattleFlowUI", "Duration", "Duration: {Time}")Texts|StatisticsReal-time battles: {Time} (m:ss).
Enemies Defeated Format (EnemiesDefeatedFormat)FTextNSLOCTEXT("RSEBattleFlowUI", "EnemiesDefeated", "{Term.Enemies} defeated: {Count}")Texts|Statistics
Items Used Format (ItemsUsedFormat)FTextNSLOCTEXT("RSEBattleFlowUI", "ItemsUsed", "{Term.Items} used: {Count}")Texts|Statistics
KOs Column (KOsColumn)FTextNSLOCTEXT("RSEBattleFlowUI", "KOsColumn", "KOs")Texts|Statistics
Member Column (MemberColumn)FTextNSLOCTEXT("RSEBattleFlowUI", "MemberColumn", "Member")Texts|StatisticsColumn headers of the member table.
Member Fell Format (MemberFellFormat)FTextNSLOCTEXT("RSEBattleFlowUI", "MemberFell", "{Name} (fell)")Texts|StatisticsAfter the name of a member that fell during the battle ({Name}).
Statistics Header (StatisticsHeader)FTextNSLOCTEXT("RSEBattleFlowUI", "StatisticsHeader", "Battle statistics")Texts|Statistics--- Battle statistics ({Count}, {Time}, {Amount}, {Name}, {Ability}) ---
Taken Column (TakenColumn)FTextNSLOCTEXT("RSEBattleFlowUI", "TakenColumn", "Taken")Texts|Statistics
Turns Format (TurnsFormat)FTextNSLOCTEXT("RSEBattleFlowUI", "Turns", "Turns: {Count}")Texts|StatisticsTurn-based battles: {Count} turns of the party.
Units Lost Format (UnitsLostFormat)FTextNSLOCTEXT("RSEBattleFlowUI", "UnitsLost", "Units lost: {Count}")Texts|Statistics

RPG Saga Engine: Battle Menus

Class URSEBattleMenuSettings (module RSE), Project Settings, Project, RPG Saga Engine. Battle menus (D-122): the menu styles the game offers, the one Free Tactics uses and what its menu holds.

SettingTypeDefaultCategoryRestartDescription
Default Icons (DefaultIcons)TMap<FName,TSoftObjectPtr<UTexture2D> >(14 entries)ContentD-132: icons by id for categories and turn commands the menu data leaves without one (a category: the menu config's icon wins; an entry: its own icon wins, ids like "Door.2" use the part before the dot). Keys are category and entry ids: Move, Jump, Attack, Skills, Magic, Items, Field, Flee, Door, EndTurn, Pact... The plugin's defaults use its own glyphs.
Element Colors (ElementColors)TMap<FGameplayTag,FLinearColor>(8 entries)ContentD-147: the color of each element in tooltips (Element.*); elements without one use the text color.
Free Tactics Menu (FreeTacticsMenu)TSoftObjectPtr<URSEBattleMenuConfig>NoneContentWhat the Free Tactics menu holds (providers and categories). Empty = the built-in providers (Move, the class's commands, Flee, doors, End Turn).
Target Badges (TargetBadges)TMap<ERSEAbilityTargetKind,TSoftObjectPtr<UTexture2D> >(7 entries)ContentD-147: the badge glyph of each targeting kind (one target, area, line, cone, self, ally, allies in an area). The plugin's: /RPGSagaEngine/UI/Badges.
Player Can Choose (bPlayerCanChoose)boolTrueStylesThe options menu lets the player pick the style.
Free Tactics Style (FreeTacticsStyle)FNameRadialStylesThe style Free Tactics battles use unless the player picks another (by Style Id).
Styles (Styles)TArray<TSoftObjectPtr<URSEBattleMenuStyle> >(0 entries)StylesStyle assets the game offers (empty = the built-in List, Radial and Hotbar with their default look).

RPG Saga Engine: Battle Mode Override

Class URSEBattleModeOverrideSettings (module RSECore), Project Settings, Project, RPG Saga Engine. D-182: the battle mode override.

SettingTypeDefaultCategoryRestartDescription
Auto Deployment Rows (AutoDeploymentRows)int322FallbacksGrid fallback: rows of deployment tiles made along the zone's near edge (row 0) when the encounter has none.
Auto Deployment Tiles Per Unit (AutoDeploymentTilesPerUnit)int322FallbacksGrid fallback: deployment tiles made per deployable unit (more tiles give the player a choice).
Auto Enemy Edge Margin (AutoEnemyEdgeMargin)int321FallbacksGrid fallback: rows kept free between the far edge and the enemies laid out automatically.
Auto Front Row Size (AutoFrontRowSize)int323FallbacksClassic fallback: with every enemy in the front row, the enemies after this many go to the back row (an encounter made for another mode).
Fall Back to Own Mode (bFallBackToOwnMode)boolTrueModesWhen the encounter cannot be fought in the override's mode (it does not allow it, its data cannot, no battle site on the map): on = it is fought in its own mode (a warning in the log); off = it does not start.
Overridable Modes (OverridableModes)TArray<FGameplayTag>(5 entries)ModesThe modes an override may choose, in this order (demo menus and the mode report list them so).

RPG Saga Engine: Battle Presentation

Class URSEBattlePresentationSettings (module RSE), Project Settings, Project, RPG Saga Engine. How battles are shown (D-034): playback speed, approach movement, default timelines, camera shots, effects and cinematic moments.

SettingTypeDefaultCategoryRestartDescription
Block Prompt Text (BlockPromptText)FTextNSLOCTEXT("RSEBattlePresentation", "BlockPrompt", "Block!")Action Command UI
Good Color (GoodColor)FRSEUIColor(Token="Charge",Alpha=1.000000,Lightness=0.017993,Chroma=0.926205,Hue=-5.896690,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Action Command UI
Good Text (GoodText)FTextNSLOCTEXT("RSEBattlePresentation", "Good", "GOOD")Action Command UI
Grade Height (GradeHeight)float215.000000Action Command UIHeight above the anchor unit where the grade (Perfect / Good / Miss) shows (D-083): above the head, apart from the combat numbers at the hit point (UI -> Floating Hit Height).
Grade Pop Scale (GradePopScale)float1.350000Action Command UIThe grade starts this much larger and settles (pop).
Grade Rise (GradeRise)float22.000000Action Command UIRise of the grade over its display time, in screen units.
Grade Scale (GradeScale)float0.800000Action Command UISize of the grade as a share of the Title text style (smaller than the damage numbers).
Miss Color (MissColor)FRSEUIColor(Token="Negative",Alpha=1.000000,Lightness=-0.053433,Chroma=0.794947,Hue=-7.461658,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Action Command UI
Miss Text (MissText)FTextNSLOCTEXT("RSEBattlePresentation", "Miss", "MISS")Action Command UI
Perfect Color (PerfectColor)FRSEUIColor(Token="Rare",Alpha=1.000000,Chroma=1.000000,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Action Command UI
Perfect Text (PerfectText)FTextNSLOCTEXT("RSEBattlePresentation", "Perfect", "PERFECT!")Action Command UI
Prompt Height (PromptHeight)float120.000000Action Command UIHeight above the anchor unit where the prompt appears.
Prompt Text (PromptText)FTextNSLOCTEXT("RSEBattlePresentation", "Prompt", "Timing!")Action Command UI
Result Seconds (ResultSeconds)float0.700000Action Command UIHow long the grade stays on screen.
Ring Radius (RingRadius)float44.000000Action Command UIRadius of the target ring of the timing prompt.
Ring Segments (RingSegments)int3248Action Command UI
Ring Start Scale (RingStartScale)float3.000000Action Command UIThe closing ring starts this many times larger.
Ring Thickness (RingThickness)float4.000000Action Command UI
Default Body Radius (DefaultBodyRadius)float35.000000ApproachBody radius of a target whose look gives none (placeholders), for Move cues with a Reach.
Max Move Time (MaxMoveTime)float0.800000Approach
Melee Contact Depth (MeleeContactDepth)float10.000000ApproachMove cues with a Reach (D-079: the attack's measured contact reach): the attacker stops where its blow lands on the target's body: the target's body radius (its look's body preset) plus the reach, minus this depth.
Melee Stop Distance (MeleeStopDistance)float110.000000ApproachMelee attackers stop this far from their target (Move cues without a Reach).
Min Move Time (MinMoveTime)float0.150000Approach
Return Speed (ReturnSpeed)float1300.000000Approach
Run Speed (RunSpeed)float1100.000000Approach--- Approach (ATB; Tactics limits it to a step) ---
Tactics Max Contact Step (TacticsMaxContactStep)float180.000000ApproachTactics, Move cues with a Reach (D-079): the step goes as far as the blow needs to land, up to this distance (then the unit goes back to its tile). 0 = the Max Step Distance above.
Tactics Max Step Distance (TacticsMaxStepDistance)float30.000000ApproachTactics: units stay on their tiles, so Move cues toward the target become a short step of at most this distance (then the strike's lunge). 0 = no step. Grid movement itself is the battle's (UnitMoved).
Block Min Lead Seconds (BlockMinLeadSeconds)float0.300000Block WindowShortest time (real seconds) from the prompt to the ideal press. When the attack connects sooner, the impact waits for the grade (a short pause) rather than asking for an impossible press.
Block Slow Motion Dilation (BlockSlowMotionDilation)float0.250000Block WindowWhile a block window is open the enemy's attack keeps playing, slowed to this time dilation (the battle never freezes; Bogdan 2026-09-26). The ring closes when the attack connects. Reduced effects without slow motion: 1.
Block Slow Motion Ease In (BlockSlowMotionEaseIn)float0.120000Block WindowReal seconds to blend into the slow motion when the window opens.
Block Slow Motion Ease Out (BlockSlowMotionEaseOut)float0.200000Block WindowReal seconds to blend back to normal speed once the block is graded.
Avoid Camera Obstacles (bAvoidCameraObstacles)boolTrueCameraCamera shots never go into walls (D-079): each shot is probed from the subject it frames to the camera; a blocked view pulls the camera in, else tries other angles (turned sideways, the other side, higher), else the shot is skipped and the camera stays where it is. Subjects hidden behind an obstacle count as blocked too.
Camera Alternate Yaw (CameraAlternateYaw)float40.000000CameraOther angles tried: the shot turned by this much around its subject (then twice as much, the other side, higher).
Camera Probe Channel (CameraProbeChannel)TEnumAsByte<ECollisionChannel>ECC_CameraCameraCollision channel of the probes (units are ignored).
Camera Probe Radius (CameraProbeRadius)float15.000000CameraRadius of the camera probe (cm): the camera keeps this far from walls.
Camera Raise Share (CameraRaiseShare)float0.700000CameraHigher angles: the camera goes up by this share of its distance to the subject.
Close Up Distance (CloseUpDistance)float280.000000Camera
Close Up Height (CloseUpHeight)float20.000000Camera
Close Up Side Offset (CloseUpSideOffset)float80.000000Camera
Min Shot Distance (MinShotDistance)float140.000000CameraA shot pulled in closer than this to its subject is not used (another angle is tried).
Orbit Degrees Per Second (OrbitDegreesPerSecond)float30.000000Camera
Orbit Height (OrbitHeight)float280.000000Camera
Orbit Radius (OrbitRadius)float560.000000Camera
Over Shoulder Distance (OverShoulderDistance)float260.000000Camera
Over Shoulder Height (OverShoulderHeight)float150.000000Camera
Over Shoulder Side Offset (OverShoulderSideOffset)float110.000000Camera
Return Blend Time (ReturnBlendTime)float0.400000CameraBlend back to the battle camera when a timeline ends.
Shot Blend Time (ShotBlendTime)float0.350000Camera
Shot FOV (ShotFOV)float55.000000CameraField of view of cinematic shots (0 = keep the battle camera's).
Subject Height (SubjectHeight)float90.000000CameraHeight of a unit's chest above its origin: what shots look at.
Boss Special Camera (bBossSpecialCamera)boolTrueCamera PolicySpecial Only: bosses (VIP enemies) keep their cinematic camera (intro, special moves) even with enemies off.
Enemy Special Camera (bEnemySpecialCamera)boolFalseCamera PolicySpecial Only: enemies' special actions may move the camera too. Off: only the player's side (bosses: below).
Shake in Fixed View (bShakeInFixedView)boolTrueCamera PolicyCamera shakes still play in the fixed view (they do not change the perspective).
Classic Camera Policy (ClassicCameraPolicy)ERSEBattleCameraPolicySpecialOnlyCamera PolicyClassic battles (ATB, turn-based): which actions may move the camera away from the stage's fixed view. Default Special Only: attacks, skills, spells and items (the enemies' too) play in the fixed view; flagged abilities, super moves and summons may use their camera shots.
Tactics Camera Policy (TacticsCameraPolicy)ERSEBattleCameraPolicyAllCamera PolicyTactics battles: the same choice. Default All (the Ability Toolkit's shots follow leaps, dashes and fireballs, D-055).
Boss Intro (bBossIntro)boolTrueCinematicsBattles with a boss (a VIP enemy) open on it.
Hide HUDDuring Cinematics (bHideHUDDuringCinematics)boolTrueCinematicsThe battle HUD hides while a cinematic moment plays.
Boss Intro (BossIntro)TSoftObjectPtr<URSEAbilityPresentationBase>NoneCinematics
Boss Title Format (BossTitleFormat)FTextNSLOCTEXT("RSEBattlePresentation", "BossTitle", "{Name}")CinematicsBanner title of boss intros ({Name} = the boss).
Summon Entrance (bSummonEntrance)boolTrueCinematicsSummons enter with a short cinematic (camera, slow motion, banner).
Cinematic Hold Seconds (CinematicHoldSeconds)float1.400000CinematicsHow long cinematic shots hold.
Slow Motion Dilation (SlowMotionDilation)float0.350000Cinematics
Slow Motion Seconds (SlowMotionSeconds)float0.900000Cinematics
Summon Entrance (SummonEntrance)TSoftObjectPtr<URSEAbilityPresentationBase>NoneCinematicsReplaces the built-in summon entrance.
Summon Title Format (SummonTitleFormat)FTextNSLOCTEXT("RSEBattlePresentation", "SummonTitle", "{Name}")CinematicsBanner title of summon entrances ({Name} = the summon).
Super Move Prelude (SuperMovePrelude)TSoftObjectPtr<URSEAbilityPresentationBase>NoneCinematicsReplaces the built-in super move prelude (abilities with Moment = Super Move and no asset).
Action Banner Format (ActionBannerFormat)FTextNSLOCTEXT("RSEBattlePresentation", "ActionBanner", "{Caster} — {Ability}")Default TimelinesText of the default action banner, for every unit (D-065). Arguments: {Caster}, {Ability}. Empty = the ability's name only.
Banner Seconds (BannerSeconds)float1.100000Default Timelines
Show Ability Banner (bShowAbilityBanner)boolTrueDefault TimelinesShows the ability's name in a banner (abilities may turn it off).
Cast Hop Height (CastHopHeight)float30.000000Default Timelines
Cast Time (CastTime)float0.450000Default TimelinesCasting pose before the impact of in-place abilities.
Flee Action Name (FleeActionName)FTextNSLOCTEXT("RSEBattlePresentation", "FleeAction", "Flee")Default TimelinesName of the Flee command in its action banner ("Aldren — Flee", D-083). Empty = no banner for fleeing.
In Place Default (InPlaceDefault)TSoftObjectPtr<URSEAbilityPresentationBase>NoneDefault Timelines
Melee Default (MeleeDefault)TSoftObjectPtr<URSEAbilityPresentationBase>NoneDefault TimelinesOptional assets replacing the built-in default timeline of each approach.
Post Impact Wait (PostImpactWait)float0.300000Default TimelinesPause after the impact before the caster returns / the next action.
Ranged Default (RangedDefault)TSoftObjectPtr<URSEAbilityPresentationBase>NoneDefault Timelines
Shoot Recoil Distance (ShootRecoilDistance)float20.000000Default Timelines
Shoot Time (ShootTime)float0.250000Default Timelines
Strike Lunge Distance (StrikeLungeDistance)float45.000000Default Timelines
Strike Time (StrikeTime)float0.200000Default Timelines
Support Cast Anchor (SupportCastAnchor)FGameplayTag(TagName="Appearance.Anchor.WeaponTip")Default Timelines|SupportWhere on the caster (Appearance.Anchor.*: the weapon tip falls back to the hand, D-081).
Support Cast Effect (SupportCastEffect)TSoftObjectPtr<UObject>NoneDefault Timelines|SupportEffect at the caster while a support action is cast (a Niagara or legacy particle system). Empty = none.
Support Receive Effect (SupportReceiveEffect)TSoftObjectPtr<UObject>NoneDefault Timelines|SupportEffect on each target when it receives the action (a heal burst, a buff aura). Empty = none.
Support Receive Lift (SupportReceiveLift)float10.000000Default Timelines|SupportThe targets rise this much for a moment when they receive it (a small lift, not a hit reaction). 0 = no reaction.
Support Receive Time (SupportReceiveTime)float0.400000Default Timelines|Support
Reduce Camera Shake (bReduceCameraShake)boolTrueEffects
Reduce Effects (bReduceEffects)boolFalseEffectsLow-end PCs / accessibility: turns off the effects selected below.
Reduce Hit Stop (bReduceHitStop)boolTrueEffects
Reduce Optional Cues (bReduceOptionalCues)boolTrueEffectsCues marked optional (extra VFX) are skipped.
Reduce Screen Flash (bReduceScreenFlash)boolTrueEffects
Reduce Slow Motion (bReduceSlowMotion)boolFalseEffects
Effect Max Lifetime (EffectMaxLifetime)float2.500000EffectsLongest an effect of a VFX or Projectile cue lives when the cue gives no Duration (D-079). Looping systems (auras, fires, many pack effects) would otherwise run forever; they are deactivated (their particles finish) after this. One-shot systems end sooner on their own. Every effect still running stops when the battle's presentations stop.
Flash Alpha (FlashAlpha)float0.600000Effects
Flash Color (FlashColor)FRSEUIColor(Token="White",Alpha=1.000000,Chroma=1.000000,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Effects
Hit Stop Dilation (HitStopDilation)float0.030000EffectsTime dilation during a hit-stop.
Hit Stop Seconds (HitStopSeconds)float0.080000Effects
Shake Amplitude (ShakeAmplitude)float10.000000Effects
Shake Frequency (ShakeFrequency)float18.000000Effects
Shake Rotation Amplitude (ShakeRotationAmplitude)float0.800000Effects
Shake Seconds (ShakeSeconds)float0.300000Effects
Battle End Pause (BattleEndPause)float1.000000End of BattlePause after the last action of a battle has fully played (its timeline, the KO falls) before the battle's end is shown (banner, results / game over timers, music). Lets the killing blow's damage numbers finish.
Defeat Fall Seconds (DefeatFallSeconds)float0.450000End of BattlePlaceholder units: time a fallen unit takes to tip over (0 = at once).
Return to Slot (bReturnToSlot)boolTrueFormationClassic battles: units always go back to their stage slot (knocked-out ones too) once nothing animates them: after an action, a hit reaction, or a row change (Knockback / Pull / Swap), whose slot is in the new row. Tactics: units go back to their tile's center. Off = they stay wherever the presentation left them.
Slot Return Max Time (SlotReturnMaxTime)float0.800000Formation
Slot Return Min Time (SlotReturnMinTime)float0.200000Formation
Slot Return Speed (SlotReturnSpeed)float400.000000FormationSpeed of the walk back to the slot.
Slot Tolerance (SlotTolerance)float2.000000FormationA unit farther than this from its slot goes back.
Slot Yaw Tolerance (SlotYawTolerance)float3.000000FormationA unit turned farther than this from its slot's facing turns back (classic battles).
Dodge Distance (DodgeDistance)float50.000000Hit ReactionSidestep of a target that dodges (a miss).
Hit Reaction Distance (HitReactionDistance)float35.000000Hit Reaction--- Hit reactions ---
Hit Reaction Time (HitReactionTime)float0.280000Hit Reaction
Allow Skip Actions (bAllowSkipActions)boolFalsePlaybackConfirm / Cancel also skip ordinary actions (cinematic moments are always skippable).
Restore Caster on Finish (bRestoreCasterOnFinish)boolTruePlaybackWhen a timeline ends, the caster is put back where it started (row position and facing).
Fast Forward Keys (FastForwardKeys)TArray<FKey>(2 entries)PlaybackHeld: fast-forwards battle presentations.
Fast Forward Speed (FastForwardSpeed)float3.000000PlaybackSpeed while a fast-forward key is held.
Playback Speed (PlaybackSpeed)float1.000000PlaybackSpeed of every battle presentation (1 = normal).
Action Command Widget Class (ActionCommandWidgetClass)TSoftClassPtr<URSEScreenWidget>NoneWidgetsAction command ring (D-052). Empty = the built-in screen. A Widget Blueprint derived from RSEScreenWidget replaces it and receives a RSEActionCommandViewModel (docs/product/custom-ui.md).
Banner Widget Class (BannerWidgetClass)TSoftClassPtr<URSEScreenWidget>NoneWidgetsBanner screen: ability names, cinematic titles (D-052). Empty = the built-in themed screen. A Widget Blueprint derived from RSEScreenWidget replaces it and receives a RSEBattleBannerViewModel (docs/product/custom-ui.md).

RPG Saga Engine: Battle Simulator

Class URSEBattleSimSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Headless battle simulator (D-041, docs/design/battle-simulator.md): defaults for scenarios that leave a value out, guards against endless battles and where reports go.

SettingTypeDefaultCategoryRestartDescription
Default Enemy Team (DefaultEnemyTeam)FGameplayTag(TagName="Team.Enemy")Defaults
Default Player Intelligence (DefaultPlayerIntelligence)float0.800000DefaultsIntelligence (0-1) of the AI playing the party. A competent player, by default.
Default Player Team (DefaultPlayerTeam)FGameplayTag(TagName="Team.Player")DefaultsTeams of inline scenarios (no encounter asset). Encounters bring their own teams.
Default Runs (DefaultRuns)int3250DefaultsBattles per batch (per sweep value) when the scenario gives no Runs.
Default Seed (DefaultSeed)int321DefaultsFirst seed of a batch when the scenario gives no Seed. Run i uses Seed + i, so sweep values share their seeds.
ATBSim Delta Seconds (ATBSimDeltaSeconds)float0.500000GuardsATB: simulated time advanced between AI checks. The battle itself steps in URSEBattleSettings::ATBStepSeconds and stops early when a unit becomes ready, so this only trades loop overhead against nothing: results do not depend on it.
Max ATBSeconds (MaxATBSeconds)float1200.000000GuardsATB: a battle still running after this much simulated time ends as a Timeout.
Max Tactics Turns (MaxTacticsTurns)int32400GuardsTactics and turn-based: a battle still running after this many unit turns (both sides) ends as a Timeout.
Histogram Bins (HistogramBins)int3210ReportsBars of the turns / duration histograms in summary.html.
Output Folder (OutputFolder)FStringBattleSimReportsReports go to Saved/<OutputFolder>/<timestamp>_<scenario>/.
Scenario Folder (ScenarioFolder)FStringConfig/BattleSimReportsScenario files (*.json) the RSE Configurator offers as one-click runs, relative to the project directory.
Generated Grid Depth (GeneratedGridDepth)int3212Tactics Grid
Generated Grid Width (GeneratedGridWidth)int3212Tactics GridGenerated grid (no zone found, or the scenario asks for one): size in tiles. Grown to fit every unit's tile.
Generated Height Noise (GeneratedHeightNoise)int320Tactics GridGenerated grid: highest random height in steps (0 = flat). Heights are smoothed so hills, not spikes.
Grid Search Maps (GridSearchMaps)TArray<FSoftObjectPath>(1 entries)Tactics GridMaps searched for the zone grid of an encounter when a scenario names no map: the first Tactics battle director whose encounter matches gives its zone's baked grid. Loading a map costs a second or two, once per batch.

RPG Saga Engine: Battle Transition

Class URSEBattleTransitionSettings (module RSE), Project Settings, Project, RPG Saga Engine. The screen transition between exploration and battles (D-083), like the classic JRPGs: the last frame of exploration breaks, whirls or rushes away with a flash, the screen goes black, then fades into the battle with an intro banner ("Battle!", "Preemptive!").

SettingTypeDefaultCategoryRestartDescription
Exit Fade in Seconds (ExitFadeInSeconds)float0.500000ExitFade from black into exploration.
Exit Fade Out Seconds (ExitFadeOutSeconds)float0.350000ExitFade to black when a battle ends, before the camera goes back to exploration.
Flash Alpha (FlashAlpha)float0.850000FlashStrength of the flash at its peak (0 = none).
Flash Color (FlashColor)FRSEUIColor(Token="Text",Alpha=1.000000,Lightness=0.013515,Chroma=3.687879,Hue=161.669617,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Flash--- Flash ---
Flash in Seconds (FlashInSeconds)float0.060000FlashThe flash rises in this long...
Flash Out Seconds (FlashOutSeconds)float0.300000Flash...and fades out in this long.
Back Attack Color (BackAttackColor)FRSEUIColor(Token="Negative",Alpha=1.000000,Lightness=0.017781,Chroma=0.901999,Hue=4.368494,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Intro Banner
Back Attack Text (BackAttackText)FTextNSLOCTEXT("RSEBattleTransition", "BackAttack", "Back Attack!")Intro BannerThe enemies caught the party from behind (D-063).
Battle Text (BattleText)FTextNSLOCTEXT("RSEBattleTransition", "Battle", "Battle!")Intro Banner
Show Intro Banner (bShowIntroBanner)boolTrueIntro BannerA banner as the battle fades in.
Use Encounter Name (bUseEncounterName)boolFalseIntro BannerThe banner shows the encounter's name when it has one (and no intro text of its own), instead of Battle Text.
Intro Color (IntroColor)FRSEUIColor(Token="Accent",Alpha=1.000000,Lightness=0.023505,Chroma=0.866576,Hue=4.106044,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Intro Banner
Intro Screen Height (IntroScreenHeight)float0.360000Intro BannerHeight of the banner on the screen (0 = top, 1 = bottom).
Intro Seconds (IntroSeconds)float1.300000Intro BannerSeconds the banner stays after the fade (it fades out over the last quarter).
Preemptive Color (PreemptiveColor)FRSEUIColor(Token="Charge",Alpha=1.000000,Lightness=0.017993,Chroma=0.926205,Hue=-5.896690,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Intro Banner
Preemptive Text (PreemptiveText)FTextNSLOCTEXT("RSEBattleTransition", "Preemptive", "Preemptive!")Intro BannerThe party struck first (D-063).
Exit Sound (ExitSound)TSoftObjectPtr<USoundBase>NoneSoundPlays as the screen goes back to exploration. Empty = none.
Start Sound (StartSound)TSoftObjectPtr<USoundBase>NoneSoundPlays as the transition into a battle starts (the classic encounter swoosh). Empty = none.
Grid Reveal Seconds (GridRevealSeconds)float0.700000Style DetailsFlash Grid (Tactics): seconds for the grid to spread from the center to the edge of the zone.
Grid Reveal Step (GridRevealStep)float0.033000Style DetailsFlash Grid: the grid grows in steps this far apart (a timer, not a tick).
Shatter Columns (ShatterColumns)int329Style DetailsShatter: shards across and down (each cell breaks into two triangles).
Shatter Fall (ShatterFall)float1.400000Style DetailsShatter: how far the shards fly, as a share of the screen height (gravity pulls them down).
Shatter Rows (ShatterRows)int326Style Details
Shatter Spin (ShatterSpin)float0.600000Style DetailsShatter: most turns a shard makes while it falls.
Swirl Resolution (SwirlResolution)int3224Style DetailsSwirl: mesh resolution (cells across; more = smoother whirl).
Swirl Turns (SwirlTurns)float1.600000Style DetailsSwirl: turns of the center by the end (the edges turn less).
Wipe Segments (WipeSegments)int3272Style DetailsRadial Wipe: segments of the sweeping darkness (smoothness).
Zoom Copies (ZoomCopies)int327Style DetailsZoom Blur: copies of the frame drawn for the blur trail.
Zoom Scale (ZoomScale)float1.800000Style DetailsZoom Blur: how much larger the frame grows by the end.
Enabled (bEnabled)boolTrueStylesPlays transitions at all (off: the camera goes straight to the battle, as before D-083).
Classic Style (ClassicStyle)ERSEBattleTransitionStyleShatterStylesInto classic battles (ATB, turn-based). An encounter's own Transition Style wins.
Reduced Style (ReducedStyle)ERSEBattleTransitionStyleFadeStylesPlayed instead of the image styles (Shatter, Swirl, Zoom Blur, Radial Wipe) when battle effects are reduced (options menu, Battle Presentation -> Reduce Effects, RSE.Battle.Presentation.ReduceEffects): no flash either.
Tactics Style (TacticsStyle)ERSEBattleTransitionStyleFlashGridStylesInto Tactics battles on the live map. An encounter's own Transition Style wins.
Black Hold Seconds (BlackHoldSeconds)float0.200000TimingBlack between the effect and the battle: the battle starts and its camera takes over here, unseen.
Capture Max Width (CaptureMaxWidth)int321280TimingWidth of the captured frame (smaller = cheaper on handhelds; the effect moves too fast to show it). 0 = full size.
Capture Timeout (CaptureTimeout)float0.350000TimingThe frame of exploration is taken before the effect; without one after this long, Fade plays instead.
Effect Seconds (EffectSeconds)float0.850000TimingThe effect itself (shards falling, the whirl, the rush, the wipe, the fade to black).
Fade in Seconds (FadeInSeconds)float0.450000TimingFade from black into the battle.
Widget Class (WidgetClass)TSoftClassPtr<URSEScreenWidget>NoneWidgetThe transition screen (D-052). Empty = the built-in one (drawn in C++). A Widget Blueprint derived from RSEScreenWidget replaces it and receives a RSEBattleTransitionViewModel (the captured frame, the style, the phase and its progress, the darkness, the flash, the intro text).
ZOrder (ZOrder)int32500WidgetZ-order of the transition screen: above every HUD and screen.

RPG Saga Engine: Bestiary

Class URSEBestiarySettings (module RSECore), Project Settings, Project, RPG Saga Engine. Bestiary rules (D-047, Project Settings -> RPG Saga Engine -> Bestiary): which enemies get an entry and how much each entry reveals.

SettingTypeDefaultCategoryRestartDescription
Player Can Always Show Enemy Health (bPlayerCanAlwaysShowEnemyHealth)boolTrueBattle HUDThe players' option to always show enemy HP is offered (accessibility).
Enemy Health Reveal (EnemyHealthReveal)ERSEEnemyHealthRevealWhenScannedBattle HUDD-147: when the battle HUDs (turn order bar, target preview) show an enemy's HP. Hidden HP shows as "?". A Scan ability or item reveals the type for good (bestiary). Players may choose to always see it (Options -> Game).
Listed Stats (ListedStats)TArray<FGameplayTag>(7 entries)DisplayStats listed on an entry, in order (names from UI -> TagLabels).
Enemy Roster Only (bEnemyRosterOnly)boolTrueRecordingOnly characters whose roster is Enemy get entries (off: every non-player unit, e.g. neutral guests).
Record Summons (bRecordSummons)boolFalseRecordingSummoned (temporary) enemy units are recorded too.
Description on Encounter (bDescriptionOnEncounter)boolTrueRevealThe description shows from the first encounter (off: after DefeatsToRevealStats defeats).
Defeats to Reveal Affinities (DefeatsToRevealAffinities)int321RevealDefeats needed before the elemental weaknesses and resistances show.
Defeats to Reveal Drops (DefeatsToRevealDrops)int321RevealDefeats needed before the drops (loot table, D-042) show.
Defeats to Reveal Stats (DefeatsToRevealStats)int321RevealDefeats needed before the stats show. 0 = from the first encounter.

RPG Saga Engine: Bestiary UI

Class URSEBestiaryUISettings (module RSE), Project Settings, Project, RPG Saga Engine. The party menu's Bestiary page (D-047).

SettingTypeDefaultCategoryRestartDescription
Resist Color (ResistColor)FRSEUIColor(Token="Info",Alpha=1.000000,Lightness=0.028463,Chroma=0.871971,Hue=6.030436,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors
Weak Color (WeakColor)FRSEUIColor(Token="Negative",Alpha=1.000000,Lightness=0.032983,Chroma=0.852280,Hue=15.421614,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))ColorsColour of weaknesses (and of absorbed / resisted elements).
Details Width (DetailsWidth)float460.000000LayoutWidth of the details panel.
Affinities Header (AffinitiesHeader)FTextNSLOCTEXT("RSEBestiaryUI", "AffinitiesHeader", "Elements")Texts
Affinity Format (AffinityFormat)FTextNSLOCTEXT("RSEBestiaryUI", "AffinityFormat", "{Element}: {Affinity}")Texts{Element}: {Affinity}.
Affinity Names (AffinityNames)TMap<ERSEElementAffinity,FText>(4 entries)TextsAffinity names (Normal is never listed).
Category Labels (CategoryLabels)TArray<FRSEBestiaryCategoryLabel>(3 entries)TextsCategory names (content tags, in DefaultGame.ini). A category without a label shows its last tag part.
Count Format (CountFormat)FTextNSLOCTEXT("RSEBestiaryUI", "CountFormat", "{Count} {Count}|plural(one=entry,other=entries)")Texts{Count} entries.
Defeated Format (DefeatedFormat)FTextNSLOCTEXT("RSEBestiaryUI", "Defeated", "Defeated: {Count}")Texts{Count} = units defeated.
Drop Format (DropFormat)FTextNSLOCTEXT("RSEBestiaryUI", "DropFormat", "{Item} ×{Count} ({Chance}%)")Texts{Item}, {Chance} (percent), {Count} ("1" or "1-2").
Drops Header (DropsHeader)FTextNSLOCTEXT("RSEBestiaryUI", "DropsHeader", "Drops")Texts
Empty Text (EmptyText)FTextNSLOCTEXT("RSEBestiaryUI", "Empty", "No enemies met yet.")Texts
Encountered Format (EncounteredFormat)FTextNSLOCTEXT("RSEBestiaryUI", "Encountered", "Met: {Count}")Texts{Count} = units met.
Level Format (LevelFormat)FTextNSLOCTEXT("RSEBestiaryUI", "Level", "{Term.LevelShort} {Level}")Texts{Level}.
List Column Text (ListColumnText)FTextNSLOCTEXT("RSEBestiaryUI", "ListColumn", "{Term.Enemies}")Texts--- Texts ---
Locked Text (LockedText)FTextNSLOCTEXT("RSEBestiaryUI", "Locked", "??? Defeat one to learn more.")TextsInstead of a hidden section: defeat one to learn more.
Money Drop Format (MoneyDropFormat)FTextNSLOCTEXT("RSEBestiaryUI", "MoneyDrop", "{Min} - {Max}")Texts{Min} - {Max}: money dropped (formatted with the currency).
No Affinities Text (NoAffinitiesText)FTextNSLOCTEXT("RSEBestiaryUI", "NoAffinities", "No weaknesses or resistances.")Texts
No Drops Text (NoDropsText)FTextNSLOCTEXT("RSEBestiaryUI", "NoDrops", "Nothing.")Texts
Row Defeated Format (RowDefeatedFormat)FTextNSLOCTEXT("RSEBestiaryUI", "RowDefeated", "×{Count}")TextsRow detail: {Count} defeated.
Stat Format (StatFormat)FTextNSLOCTEXT("RSEBestiaryUI", "StatFormat", "{Stat} {Value}")TextsStat line: {Stat} {Value}.
Stats Header (StatsHeader)FTextNSLOCTEXT("RSEBestiaryUI", "StatsHeader", "Stats")Texts
Uncategorized Text (UncategorizedText)FTextNSLOCTEXT("RSEBestiaryUI", "Uncategorized", "Other")TextsCategory heading of enemies without a category.

RPG Saga Engine: Buildings

Class URSEBuildingSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Building entrances and interiors (D-150): Project Settings -> RPG Saga Engine -> Buildings.

SettingTypeDefaultCategoryRestartDescription
Building Size (BuildingSize)FVector2D(X=300.000000,Y=6000.000000)AnalyzerSmallest and largest footprint of a building (cm, the bounds' longer side).
Building Words (BuildingWords)TArray<FString>(22 entries)AnalyzerThe building analyzer's words (lower case, matched in actor labels, names and mesh names).
Default Template (DefaultTemplate)TSoftObjectPtr<URSEInteriorTemplateData>/RPGSagaEngine/Data/Interiors/DA_InteriorTemplate_House.DA_InteriorTemplate_HouseAnalyzer
Door Reach (DoorReach)float150.000000AnalyzerA door belongs to a building when it is this close to the building's bounds (cm).
Door Words (DoorWords)TArray<FString>(4 entries)Analyzer
Navigable Share (NavigableShare)float0.500000AnalyzerThe interior counts as navigable when this share of its floor probe points is free and walkable.
Stair Words (StairWords)TArray<FString>(3 entries)Analyzer
Templates (Templates)TArray<TSoftObjectPtr<URSEInteriorTemplateData> >(9 entries)AnalyzerThe templates the analyzer picks from (by keyword), and the one used when no keyword matches.
Default Door Height (DefaultDoorHeight)float230.000000Door Detection
Default Door Width (DefaultDoorWidth)float130.000000Door DetectionD-158: the door's size when nothing was measured (cm).
Door Detection (DoorDetection)FRSEDoorDetectionRules(MinWidth=70.000000,MaxWidth=280.000000,MinHeight=170.000000,MaxHeight=380.000000,MaxSill=80.000000,DepthTolerance=5.000000,ColumnFill=0.750000,LintelRows=2,Pre...Door DetectionD-158: what counts as a door modelled into a building's mesh (the Building Analyzer, Detect Door).
Door Zone Inside (DoorZoneInside)float25.000000Door Detection
Door Zone Outside (DoorZoneOutside)float70.000000Door DetectionD-158: the entrance's interaction zone: how far it reaches out in front of the door and into the doorway (cm).
Analyzer Generates Interiors (bAnalyzerGeneratesInteriors)boolTrueGenerated InteriorsD-158: the Building Analyzer makes generated interiors (off: copies of the templates' maps, as before).
Generated Interior Map (GeneratedInteriorMap)TSoftObjectPtr<UWorld>/RPGSagaEngine/Interiors/Generated/L_RSE_Interior_Generated.L_RSE_Interior_GeneratedGenerated InteriorsD-158: the map generated interiors load (it holds an RSE Generated Interior actor that builds the rooms).
Generation (Generation)FRSEInteriorLayoutRules(Snap=(bSnapToKitGrid=True,SnapTolerance=25.000000,bHalfModules=True,bStoreyHeightFromKit=True,MinSteps=2,GridTolerance=2.000000),Windows=(bWindows=True,bWithKi...Generated InteriorsD-158: the generator's measures (doors, walls, stairs, paths, the furniture checker).
Interior Scale (InteriorScale)float1.150000Generated InteriorsD-158: the inside's size from the outside's footprint (a roomy feel) and its limits (cm).
Lore Libraries (LoreLibraries)TArray<TSoftObjectPtr<URSELoreLibraryData> >(1 entries)Generated InteriorsD-158: lore texts for books, letters and notes in generated interiors.
Max Floors (MaxFloors)int324Generated Interiors
Max Interior Size (MaxInteriorSize)FVector2D(X=2800.000000,Y=2200.000000)Generated Interiors
Min Interior Size (MinInteriorSize)FVector2D(X=600.000000,Y=500.000000)Generated Interiors
Roof Share (RoofShare)float0.300000Generated Interiors
Storey Height (StoreyHeight)float330.000000Generated InteriorsD-158: a building's storey height outside (cm) and the share of its height that is roof: its floor count.
Auto Close Delay (AutoCloseDelay)float2.000000Real DoorsSeconds after the last member left before an auto-opened door closes (0 = it stays open).
Auto Open Radius (AutoOpenRadius)float220.000000Real DoorsReal doors open by themselves when a party member comes this close (cm; 0 = only by Interact).
Blackout Adapt Speed (BlackoutAdaptSpeed)float200.000000Separate InteriorsD-158: how fast the eye adapts under the blackout (f-stops per second; very fast = done before the screen is back).
Blackout Color (BlackoutColor)FLinearColor(R=0.000000,G=0.000000,B=0.000000,A=1.000000)Separate Interiors
Blackout Seconds (BlackoutSeconds)float0.400000Separate InteriorsSeconds of black between outside and a separate interior (0.3 to 0.5 feels like a cut, not a loading screen).
Unload on Exit (bUnloadOnExit)boolTrueSeparate InteriorsLeaving unloads the interior (off: it stays loaded for a quick return; more memory).
Default Rules (DefaultRules)FRSEInteriorRules(bSeal=True,ShellPadding=(X=1500.000000,Y=1500.000000,Z=1200.000000),bHideWorldLighting=True,ExposureEV100=1.000000,bPresetExposureOnEntry=True,ExposureHoldSeco...Separate InteriorsD-153: the rules of interiors without a template or an override of their own.
Exit Distance (ExitDistance)float180.000000Separate InteriorsWhere the party stands when it comes out: this far in front of the door (cm), facing away from it.
Exit Search Distance (ExitSearchDistance)float420.000000Separate InteriorsD-153: an exit point is searched up to this far from the door (cm) when the first spot is blocked or off the ground.
Fade Out Share (FadeOutShare)float0.400000Separate InteriorsShare of the blackout spent fading to black (the rest fades back in).
Instance Origin (InstanceOrigin)FVector(X=0.000000,Y=0.000000,Z=100000.000000)Separate InteriorsWhere the first interior's level instance sits (cm): far above the playable area (never below it: a level's Kill Z would destroy the party there).
Instance Slots (InstanceSlots)int3264Separate InteriorsHow many different places interiors use (their ids spread over them).
Instance Spacing (InstanceSpacing)FVector(X=20000.000000,Y=0.000000,Z=0.000000)Separate InteriorsThe distance between two interiors' places (cm; each interior has its own, from its id).
Point Clearance Half Height (PointClearanceHalfHeight)float88.000000Separate Interiors
Point Clearance Radius (PointClearanceRadius)float40.000000Separate InteriorsD-153: the room a character needs at an exit or entry point (capsule radius and half height, cm).
Shell Mesh (ShellMesh)TSoftObjectPtr<UStaticMesh>/Engine/BasicShapes/Cube.CubeSeparate InteriorsD-153: the mesh the shell's slabs are made of (a box, scaled to each slab).
Void Material (VoidMaterial)TSoftObjectPtr<UMaterialInterface>/Engine/EngineDebugMaterials/BlackUnlitMaterial.BlackUnlitMaterialSeparate InteriorsD-153: the material of a sealed interior's shell (unlit black).
Asked Host Text (AskedHostText)FTextNSLOCTEXT("RSEBuildingEntrances", "AskedHost", "The host was asked to go in.")TextsA guest asked the host to enter (co-op).
Closed Text (ClosedText)FTextNSLOCTEXT("RSEBuildingEntrances", "Closed", "It\'s closed. Come back later.")Texts
Enter Prompt (EnterPrompt)FTextNSLOCTEXT("RSEBuildingEntrances", "Enter", "Enter")Texts
Exit Prompt (ExitPrompt)FTextNSLOCTEXT("RSEBuildingEntrances", "Exit", "Leave")Texts
Locked Text (LockedText)FTextNSLOCTEXT("RSEBuildingEntrances", "Locked", "The door is locked.")Texts

RPG Saga Engine: Camera Framing

Class URSECameraFramingSettings (module RSE), Project Settings, Project, RPG Saga Engine. D-183: obstruction-aware cameras (Project Settings -> RPG Saga Engine -> Camera Framing).

SettingTypeDefaultCategoryRestartDescription
Capture Max Push Out (CaptureMaxPushOut)float1500.000000CaptureHow far a capture point inside geometry may be pushed out (cm).
Capture Min Clear Distance (CaptureMinClearDistance)float400.000000CaptureA capture point without a look target is occluded when geometry stands closer than this along its view (cm).
Cinematic Battle (CinematicBattle)FRSECinematicBattleCamera(OverShoulderDistance=420.000000,ReactionDistance=360.000000,WideDistance=1100.000000,FieldOfView=50.000000,HeightOffset=40.000000,CutAngle=40.000000,BlendSecon...Cinematic Battle CameraThe cinematic battle camera (captures, trailers).
Enabled (bEnabled)boolTrueFramingCameras avoid obstructions (off = every camera keeps its own pose).
Camera Blocker Tag (CameraBlockerTag)FNameRSE.CameraBlockerFramingActors or components with this tag always block the camera (it moves instead of fading them).
Action (Action)FRSECameraFramingRules(bEnabled=True,ProbeChannel=ECC_Camera,ProbeRadius=20.000000,NearClipMargin=8.000000,bAnyGeometryObstructs=True,FocusHeights=(90.000000,160.000000),MaxFocusTarg...ModesThe action battle camera: the view stays the player's; geometry pulls it in.
ATB (ATB)FRSECameraFramingRules(bEnabled=True,ProbeChannel=ECC_Camera,ProbeRadius=24.000000,NearClipMargin=8.000000,FocusHeights=(110.000000),MaxFocusTargets=6,YawStep=10.000000,YawSteps=3,Pi...ModesThe ATB stage camera (framed once when the battle starts: the stage stays composed).
Capture (Capture)FRSECameraFramingRules(bEnabled=True,ProbeChannel=ECC_Camera,ProbeRadius=24.000000,NearClipMargin=8.000000,bAnyGeometryObstructs=True,FocusHeights=(0.000000),MaxFocusTargets=1,YawSte...ModesClip capture points: how an occluded point is fixed.
Exploration (Exploration)FRSECameraFramingRules(bEnabled=True,ProbeChannel=ECC_Camera,ProbeRadius=24.000000,NearClipMargin=8.000000,FocusHeights=(90.000000,160.000000),MaxFocusTargets=1,YawStep=20.000000,Pit...ModesThe exploration camera (tactical style): the yaw stays the player's; the angle rises and the distance comes in.
Free Tactics (FreeTactics)FRSECameraFramingRules(bEnabled=True,ProbeChannel=ECC_Camera,ProbeRadius=24.000000,NearClipMargin=8.000000,FocusHeights=(90.000000,160.000000),MaxFocusTargets=2,YawStep=20.000000,Yaw...ModesThe Free Tactics / live battle camera.
Grid Tactics (GridTactics)FRSECameraFramingRules(bEnabled=True,ProbeChannel=ECC_Camera,ProbeRadius=24.000000,NearClipMargin=8.000000,FocusHeights=(60.000000,150.000000),MaxFocusTargets=2,YawStep=15.000000,Yaw...ModesThe grid Tactics camera: the grid stays readable (steeper angles and other sides before coming in).
Shot (Shot)FRSECameraFramingRules(bEnabled=True,ProbeChannel=ECC_Camera,ProbeRadius=24.000000,NearClipMargin=8.000000,bAnyGeometryObstructs=True,FocusHeights=(90.000000,160.000000),MaxFocusTarg...ModesThe cinematic shots of battle timelines: never inside geometry while they blend.

RPG Saga Engine: Camera Occlusion

Class URSECameraOcclusionSettings (module RSE), Project Settings, Project, RPG Saga Engine. What stands between the RPG cameras (the tactical exploration camera, the Free Tactics camera) and the party (D-113, D-116): these cameras never collide with the world; what hides the party fades instead, only around the party.

SettingTypeDefaultCategoryRestartDescription
Collection (Collection)TSoftObjectPtr<UMaterialParameterCollection>/RPGSagaEngine/Materials/Camera/MPC_RSE_CameraOcclusion.MPC_RSE_CameraOcclusionFadeThe see-through circle of opted-in materials (MF_RSE_CameraOcclusion reads it). Empty = no fading, only the fallback.
Fade Function (FadeFunction)TSoftObjectPtr<UMaterialFunctionInterface>/RPGSagaEngine/Materials/Camera/MF_RSE_CameraOcclusion.MF_RSE_CameraOcclusionFadeThe material function that makes a material fade (MF_RSE_CameraOcclusion): RPG Saga -> Add Camera Occlusion Fade (the Content Browser menu of materials) multiplies the material's Opacity Mask by it.
Fade Seconds (FadeSeconds)float0.350000FadeSeconds a see-through circle takes to open or close (opted-in materials and ghosts alike): never a pop.
Hole Keep Near Target (HoleKeepNearTarget)float60.000000FadeWhat stands closer than this in front of a character is left alone (the chair beside it, cm).
Hole Radius (HoleRadius)float170.000000FadeRadius of the see-through circle at the character (cm); it keeps its size on screen toward the camera.
Hole Softness (HoleSoftness)float45.000000FadeSoft edge of the circle (cm at the character).
Marker Parameter (MarkerParameter)FNameRSE_CameraOcclusionFadeA material with this scalar parameter (the material function declares it) fades instead of hiding.
Opt in Content Roots (OptInContentRoots)TArray<FString>(1 entries)FadeD-116: content roots whose materials Add Camera Occlusion Fade may change (it changes an instance's parent material). The engine's and the plugins' materials are never changed: their objects become ghosts instead.
Ghost Fallback (bGhostFallback)boolTrueGhost FallbackObjects whose materials have no Camera Occlusion Fade get the same see-through circle while they hide the party: their materials are swapped for the Ghost Material (with their own base texture and color when found), the circle opens over Fade Seconds, and their materials come back once it closed. An instanced mesh (a tree of a forest) gets a copy of the one tree in the way. Off = they hide (Hide Fallback).
Ghost Color Parameters (GhostColorParameters)TArray<FName>(8 entries)Ghost FallbackColor parameters a ghost multiplies its texture by, in this order (none = white).
Ghost Material (GhostMaterial)TSoftObjectPtr<UMaterialInterface>/RPGSagaEngine/Materials/Camera/M_RSE_CameraOcclusionGhost.M_RSE_CameraOcclusionGhostGhost FallbackThe material ghosts wear (M_RSE_CameraOcclusionGhost): masked, two-sided, the see-through circle of the Collection, with the parameters BaseTexture, BaseTint, Roughness, UseTextureAlpha, AlphaClip and RSE_GhostFade (0..1, how far the circle is open).
Ghost Material Two Sided (GhostMaterialTwoSided)TSoftObjectPtr<UMaterialInterface>/RPGSagaEngine/Materials/Camera/MI_RSE_CameraOcclusionGhost_TwoSided.MI_RSE_CameraOcclusionGhost_TwoSidedGhost FallbackThe ghost of a two-sided material (leaves, cloth): the same, two-sided (MI_RSE_CameraOcclusionGhost_TwoSided). Empty = Ghost Material.
Ghost Min Coverage (GhostMinCoverage)float0.200000Ghost FallbackShare of a character's sample points (0..1) an object must cover before it turns into a ghost: a big tree touching one shoulder stays.
Ghost Neutral Color (GhostNeutralColor)FLinearColor(R=0.450000,G=0.450000,B=0.450000,A=1.000000)Ghost FallbackThe color of a ghost whose material gives neither a texture nor a color.
Ghost Roughness Parameters (GhostRoughnessParameters)TArray<FName>(3 entries)Ghost FallbackScalar parameters a ghost takes its roughness from, in this order (none = the ghost material's own).
Ghost Texture Parameters (GhostTextureParameters)TArray<FName>(15 entries)Ghost FallbackTexture parameters a ghost takes its base texture from, in this order (else the material's first color texture).
Max Ghosts (MaxGhosts)int3216Ghost FallbackGhosts at once at most (the nearest to the lines of view first); the rest fall back to hiding.
Hide Fallback (bHideFallback)boolTrueHide FallbackObjects that cannot fade nor become a ghost are hidden while they hide the party (off = they stay).
Single Instances (bHideSingleInstances)boolTrueHide FallbackD-112, D-116: single instances of instanced meshes whose materials cannot fade (one tree of an instanced forest, one rock) are handled one at a time while they hide the party: a ghost copy of that one tree (Ghost Fallback), else hidden (scaled to nothing, put back after); the rest of the forest stays. Off = instanced meshes are never touched.
Never Hide Instanced (bNeverHideInstanced)boolTrueHide FallbackInstanced meshes (foliage, forests) are never hidden or ghosted as a whole: they fade when their material is opted in, else one instance at a time (Single Instances).
Hide Min Coverage (HideMinCoverage)float0.600000Hide FallbackShare of a character's sample points (0..1) an object must cover before it is hidden: never a whole big tree for a small intrusion.
Instance Max Size (InstanceMaxSize)float1500.000000Hide FallbackInstances at least this wide on both sides are never touched (ground pieces, cliffs, big terrain meshes).
Max Hidden (MaxHidden)int3224Hide FallbackObjects hidden at once at most (the nearest to the lines of view first).
Max Hidden Instances (MaxHiddenInstances)int3232Hide FallbackInstances hidden or ghosted at once at most.
Enabled (bEnabled)boolTrueOcclusionObjects between the camera and the party fade (opted-in materials) or hide (the rest).
Trace Complex (bTraceComplex)boolTrueOcclusionThe lines of view test the meshes' real shape (their triangles), not their simple collision: a canopy over a trunk counts.
Check Interval (CheckInterval)float0.100000OcclusionSeconds between two checks of what stands in the way (the see-through circle itself moves every frame).
Floor Tolerance (FloorTolerance)float40.000000OcclusionObjects whose top is lower than this above a character's feet are ground, never hidden (cm).
Focus Height (FocusHeight)float100.000000OcclusionHeight above a character's feet of the see-through circle's center (its chest, cm).
Max Fade Size (MaxFadeSize)float1500.000000OcclusionD-183: objects at least this wide on both sides (cliffs, big terrain meshes, whole rock faces) never fade or hide: the obstruction-aware cameras move around them instead (Camera Framing). 0 = any size fades.
Max Objects Per Line (MaxObjectsPerLine)int326OcclusionObjects one line of view looks through at most (a wall, then a tree behind it...).
Max Targets (MaxTargets)int324OcclusionCharacters kept visible at most (the leader first, then the nearest party members; the active unit and the cursor in battle).
Never Fade Tag (NeverFadeTag)FNameRSE.NoFadeOcclusionActors or components with this tag never fade or hide.
Probe Channel (ProbeChannel)TEnumAsByte<ECollisionChannel>ECC_VisibilityOcclusionTrace channel of the probe (objects that ignore it never fade).
Probe Radius (ProbeRadius)float0.000000OcclusionRadius of each line of view (cm; 0 = a thin line). Wider catches more around the line.
Sample Points (SamplePoints)TArray<FVector2D>(5 entries)OcclusionD-116: the points of each character the camera must see, as its silhouette on screen: X = to the side, across the view (cm), Y = height above the feet (cm). A line of view goes from the camera to each point; an object counts by how many of them it covers (Ghost Min Coverage, Hide Min Coverage).
Ground Lift Release Speed (GroundLiftReleaseSpeed)float4.000000TerrainHow quickly the camera settles back down after it was lifted over a hill (higher = faster).
Ground Probe Distance (GroundProbeDistance)float6000.000000TerrainHow far above and below the camera the terrain is looked for (cm).
Ground Tags (GroundTags)TArray<FName>(1 entries)TerrainBesides landscapes, actors or components with one of these tags are terrain: the RPG cameras stay above them.
Hide Delay (HideDelay)float0.150000TimingAn object turns into a ghost or hides after it has been in the way this long (no flicker when brushing past).
Show Delay (ShowDelay)float0.400000TimingA ghost or a hidden object comes back after it has been out of the way this long; the see-through circles close after it too.

RPG Saga Engine: Cards

Class URSECardSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Card game rules (D-028).

SettingTypeDefaultCategoryRestartDescription
Max Copies Per Card (MaxCopiesPerCard)int3299CollectionMost copies of one card the collection holds (extra copies are not added).
Starting Cards (StartingCards)TMap<TSoftObjectPtr<URSECardData> ,int32>(11 entries)CollectionCards owned when a new game starts; the starting deck is auto-built from them.
Max Deck Size (MaxDeckSize)int3215DeckMost cards in a deck (the player's and every opponent's).
Min Deck Size (MinDeckSize)int321DeckFewest cards the player needs to play.
Shuffle Decks (bShuffleDecks)boolTrueMatchShuffle both decks at the start of a match. Off only for debugging (decks play in list order).
Turn Limit (TurnLimit)int3240MatchA match ends after this many turns; the player with more cards wins (equal = draw).
Rarity Tiers (RarityTiers)TArray<FRSECardRarityTier>(3 entries)RarityRarity tiers and their value ranges; card validation checks each card against its tier.
Protected Value (ProtectedValue)int327StakeCards with at least this value can never be lost as a stake.

RPG Saga Engine: Cards UI

Class URSECardUISettings (module RSE), Project Settings, Project, RPG Saga Engine. Card game presentation (D-028): the War table, the result screen, the album / deck editor and challenge notices.

SettingTypeDefaultCategoryRestartDescription
Album Column Width (AlbumColumnWidth)float380.000000Album
Album Height (AlbumHeight)float620.000000Album
Album Width (AlbumWidth)float1100.000000Album--- Album layout ---
Protected Color (ProtectedColor)FRSEUIColor(Token="Info",Alpha=1.000000,Lightness=0.056059,Chroma=0.827640,Hue=-13.637671,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Album
Validation Error Color (ValidationErrorColor)FRSEUIColor(Token="Negative",Alpha=1.000000,Lightness=0.019198,Chroma=0.887452,Hue=-0.115458,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Album
Validation Ok Color (ValidationOkColor)FRSEUIColor(Token="Positive",Alpha=1.000000,Chroma=1.000000,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Album
Card Back Color (CardBackColor)FRSEUIColor(Token="Primary",Alpha=1.000000,Lightness=-0.106148,Chroma=0.976898,Hue=41.373325,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Card
Card Back Pattern Color (CardBackPatternColor)FRSEUIColor(Token="Primary",Alpha=1.000000,Lightness=0.012852,Chroma=0.996315,Hue=41.214352,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))CardPattern colour of the card back (inner panel).
Card Corner Radius (CardCornerRadius)float8.000000Card
Card Face Bottom Color (CardFaceBottomColor)FRSEUIColor(Token="Accent",Alpha=1.000000,Lightness=-0.032428,Chroma=0.276497,Hue=-8.469772,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Card
Card Face Color (CardFaceColor)FRSEUIColor(Token="Accent",Alpha=1.000000,Lightness=0.046021,Chroma=0.160610,Hue=-2.762362,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))CardCard face: a gradient from CardFaceColor (top) to CardFaceBottomColor.
Card Icon Size (CardIconSize)float56.000000CardIcon size inside a card (the art is optional).
Card Name Font Size (CardNameFontSize)int3211Card
Card Size (CardSize)FVector2D(X=120.000000,Y=170.000000)CardCard size on the table (the album preview uses the same size).
Card Text Color (CardTextColor)FRSEUIColor(Token="Neutral",Alpha=1.000000,Lightness=-0.430560,Chroma=1.949115,Hue=30.887167,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))CardValue and name text on the card face.
Card Value Font Size (CardValueFontSize)int3240Card
Fallback Style (FallbackStyle)FRSECardRarityStyle(Rarity=(),FrameColor=(Token="Neutral",Alpha=1.000000,Lightness=-0.116132,Chroma=0.000002,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000)),TextColor=(Tok...CardFrame used for a rarity without a style.
Rarity Styles (RarityStyles)TArray<FRSECardRarityStyle>(3 entries)Card--- Card look ---
Small Card Size (SmallCardSize)FVector2D(X=84.000000,Y=119.000000)CardCard size in the result screen's reward list.
Auto Build Keys (AutoBuildKeys)TArray<FKey>(2 entries)InputAlbum: build the best deck.
Back Keys (BackKeys)TArray<FKey>(3 entries)InputTable: skip to the result, then close it. Album: close.
Confirm Keys (ConfirmKeys)TArray<FKey>(3 entries)InputTable: skip to the result, then close it. Album: add / remove the selected card.
Down Keys (DownKeys)TArray<FKey>(4 entries)Input
Left Keys (LeftKeys)TArray<FKey>(4 entries)Input
Right Keys (RightKeys)TArray<FKey>(4 entries)Input
Speed Keys (SpeedKeys)TArray<FKey>(3 entries)InputTable: next replay speed.
Up Keys (UpKeys)TArray<FKey>(4 entries)Input--- Input (the card screens hold keyboard focus and read keys directly, like the main menu) ---
Default Speed Index (DefaultSpeedIndex)int320PacingIndex into SpeedOptions used for the first match of a session.
Notice Duration (NoticeDuration)float2.500000PacingHow long a challenge refusal notice stays on screen.
Pacing (Pacing)FRSECardPacing(Intro=0.600000,Reveal=0.450000,Compare=0.500000,WarBanner=0.900000,FaceDown=0.150000,Decider=0.700000,Forfeit=0.900000,PileReturned=0.900000,Collect=0.450000,T...Pacing--- Pacing (seconds at speed x1) ---
Speed Options (SpeedOptions)TArray<float>(3 entries)PacingReplay speeds the speed button cycles through.
Cards Per Deck Layer (CardsPerDeckLayer)int323TableDeck piles show one back per this many cards (visual thickness).
Deck Offset (DeckOffset)FVector2D(X=-330.000000,Y=190.000000)TablePlayer's deck.
Max Visible Stack Cards (MaxVisibleStackCards)int328TableMost face-down cards drawn in a stack (the count label shows the real number).
Played Card Offset (PlayedCardOffset)FVector2D(X=0.000000,Y=115.000000)TablePlayer's revealed card (the opponent's is mirrored above the centre).
Result Panel Width (ResultPanelWidth)float560.000000Table
Stack Card Step (StackCardStep)FVector2D(X=6.000000,Y=-3.000000)TableScreen offset between two face-down cards of a war stack.
Table Color (TableColor)FRSEUIColor(Token="Secondary",Alpha=1.000000,Lightness=-0.420493,Chroma=0.888146,Hue=-34.901016,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))TableTable felt (opaque: the table hides the world and any dialog behind it). Edges darken toward TableEdgeColor.
Table Edge Color (TableEdgeColor)FRSEUIColor(Token="Secondary",Alpha=1.000000,Lightness=-0.596025,Chroma=0.501982,Hue=-31.293844,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Table
Table Light Color (TableLightColor)FRSEUIColor(Token="Secondary",Alpha=0.120000,Lightness=0.026886,Chroma=1.248798,Hue=-41.326351,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))TableSoft light over the middle of the table.
War Banner Color (WarBannerColor)FRSEUIColor(Token="Warning",Alpha=1.000000,Lightness=-0.078838,Chroma=1.090544,Hue=-35.890274,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Table
War Stack Offset (WarStackOffset)FVector2D(X=170.000000,Y=115.000000)TablePlayer's face-down war stack, next to the revealed card.
Winner Card Scale (WinnerCardScale)float1.120000TableThe winning card is scaled up by this much while the trick is decided.
Album Column Action Text (AlbumColumnActionText)FTextNSLOCTEXT("RSECardUISettings", "AlbumColumnAction", "Collection / Deck")Texts|AlbumKey prompt actions of the album.
Album Hint Text (AlbumHintText)FTextTexts|AlbumOptional line under the album key prompts (empty = none).
Album Title (AlbumTitle)FTextNSLOCTEXT("RSECardUISettings", "AlbumTitle", "Card Album")Texts|Album
Album Toggle Action Text (AlbumToggleActionText)FTextNSLOCTEXT("RSECardUISettings", "AlbumToggleAction", "Add / Remove")Texts|Album
Auto Build Label (AutoBuildLabel)FTextNSLOCTEXT("RSECardUISettings", "AutoBuild", "Best deck")Texts|Album
Card Row Format (CardRowFormat)FTextNSLOCTEXT("RSECardUISettings", "CardRow", "[{Value}] {Name}")Texts|AlbumRow label: {Value} {Name}
Close Label (CloseLabel)FTextNSLOCTEXT("RSECardUISettings", "Close", "Close")Texts|Album
Collection Header (CollectionHeader)FTextNSLOCTEXT("RSECardUISettings", "Collection", "Collection")Texts|Album
Deck Header Format (DeckHeaderFormat)FTextNSLOCTEXT("RSECardUISettings", "DeckHeader", "Deck {Count} / {Max}")Texts|Album{Count} {Max}
Deck Invalid Card Text (DeckInvalidCardText)FTextNSLOCTEXT("RSECardUISettings", "DeckInvalidCard", "A card in the deck is missing.")Texts|Album
Deck Kept Text (DeckKeptText)FTextNSLOCTEXT("RSECardUISettings", "DeckKept", "The edited deck is not valid: your previous deck is kept.")Texts|AlbumShown when the album closes with an invalid deck: the last valid deck stays.
Deck Not Owned Text (DeckNotOwnedText)FTextNSLOCTEXT("RSECardUISettings", "DeckNotOwned", "The deck uses cards you do not own.")Texts|Album
Deck Too Large Format (DeckTooLargeFormat)FTextNSLOCTEXT("RSECardUISettings", "DeckTooLarge", "The deck holds at most {Max} {Max}|plural(one=card,other=cards).")Texts|Album
Deck Too Small Format (DeckTooSmallFormat)FTextNSLOCTEXT("RSECardUISettings", "DeckTooSmall", "The deck needs at least {Min} {Min}|plural(one=card,other=cards).")Texts|Album
Deck Total Format (DeckTotalFormat)FTextNSLOCTEXT("RSECardUISettings", "DeckTotal", "Total value {Total}")Texts|Album{Total}
Deck Valid Text (DeckValidText)FTextNSLOCTEXT("RSECardUISettings", "DeckValid", "Deck ready.")Texts|Album
Empty Collection Text (EmptyCollectionText)FTextNSLOCTEXT("RSECardUISettings", "EmptyCollection", "No cards yet.")Texts|Album
Empty Deck Text (EmptyDeckText)FTextNSLOCTEXT("RSECardUISettings", "EmptyDeck", "The deck is empty.")Texts|Album
Owned Detail Format (OwnedDetailFormat)FTextNSLOCTEXT("RSECardUISettings", "OwnedDetail", "{InDeck} / {Owned}")Texts|AlbumCollection row detail: {InDeck} {Owned}
Preview Owned Format (PreviewOwnedFormat)FTextNSLOCTEXT("RSECardUISettings", "PreviewOwned", "Owned: {Owned} In deck: {InDeck}")Texts|AlbumPreview line: {Owned} {InDeck}
Protected Marker (ProtectedMarker)FTextNSLOCTEXT("RSECardUISettings", "Protected", "Protected: never lost as a stake")Texts|AlbumPreview label of a card that cannot be lost as a stake.
Protected Owned Detail Format (ProtectedOwnedDetailFormat)FTextNSLOCTEXT("RSECardUISettings", "ProtectedOwnedDetail", "{InDeck} / {Owned} (protected)")Texts|AlbumCollection row detail of a card that cannot be lost as a stake: {InDeck} {Owned}
Refused Busy Text (RefusedBusyText)FTextNSLOCTEXT("RSECardUISettings", "RefusedBusy", "You cannot play cards now.")Texts|ChallengeBusy (battle, another card screen).
Refused Conditions Text (RefusedConditionsText)FTextNSLOCTEXT("RSECardUISettings", "RefusedConditions", "They do not want to play right now.")Texts|Challenge
Refused Host Only Text (RefusedHostOnlyText)FTextNSLOCTEXT("RSECardUISettings", "RefusedHostOnly", "Only the host can play cards in co-op.")Texts|ChallengeCo-op: this player may not play cards (the card game is the host's at launch, D-139). Also the album's deck changes.
Refused Invalid Deck Text (RefusedInvalidDeckText)FTextNSLOCTEXT("RSECardUISettings", "RefusedInvalidDeck", "Your deck is not ready. Check it in the card album.")Texts|Challenge
Refused No Opponent Text (RefusedNoOpponentText)FTextNSLOCTEXT("RSECardUISettings", "RefusedNoOpponent", "There is nobody to play with.")Texts|Challenge
Refused No Rematch Text (RefusedNoRematchText)FTextNSLOCTEXT("RSECardUISettings", "RefusedNoRematch", "They will not play you again.")Texts|Challenge
Continue Label (ContinueLabel)FTextNSLOCTEXT("RSECardUISettings", "Continue", "Continue")Texts|Result
Draw Text (DrawText)FTextNSLOCTEXT("RSECardUISettings", "Draw", "Draw")Texts|Result
End Deck Out Format (EndDeckOutFormat)FTextNSLOCTEXT("RSECardUISettings", "EndDeckOut", "{Winner} took every card.")Texts|Result{Winner}
End No Cards for War Format (EndNoCardsForWarFormat)FTextNSLOCTEXT("RSECardUISettings", "EndNoCardsForWar", "Nobody could finish the war: {Count0} to {Count1} cards.")Texts|Result{Count0} {Count1}
End Turn Limit Format (EndTurnLimitFormat)FTextNSLOCTEXT("RSECardUISettings", "EndTurnLimit", "Turn limit ({Turns}) reached: {Count0} to {Count1} cards.")Texts|Result{Turns} {Count0} {Count1}
Lost Text (LostText)FTextNSLOCTEXT("RSECardUISettings", "Lost", "Defeat")Texts|Result
No Stake Text (NoStakeText)FTextNSLOCTEXT("RSECardUISettings", "NoStake", "No card changes hands.")Texts|ResultFriendly match (no stake) or a draw.
Rewards Header (RewardsHeader)FTextNSLOCTEXT("RSECardUISettings", "Rewards", "First victory rewards:")Texts|Result
Stake Lost Format (StakeLostFormat)FTextNSLOCTEXT("RSECardUISettings", "StakeLost", "{Opponent} takes {Card} ({Rarity}).")Texts|Result{Opponent} {Card} {Rarity}
Stake Protected Text (StakeProtectedText)FTextNSLOCTEXT("RSECardUISettings", "StakeProtected", "Every card in the loser\'s deck is protected: nothing is taken.")Texts|ResultA winner, but every card of the loser was protected.
Stake Won Format (StakeWonFormat)FTextNSLOCTEXT("RSECardUISettings", "StakeWon", "You win {Card} ({Rarity}).")Texts|Result{Card} {Rarity}
Won Text (WonText)FTextNSLOCTEXT("RSECardUISettings", "Won", "Victory")Texts|Result
Deck Count Format (DeckCountFormat)FTextNSLOCTEXT("RSECardUISettings", "DeckCount", "{Count} cards")Texts|Table{Count}
Forfeit Format (ForfeitFormat)FTextNSLOCTEXT("RSECardUISettings", "Forfeit", "{Name} has no cards left for the war.")Texts|Table{Name} cannot go to war.
Pile Returned Text (PileReturnedText)FTextNSLOCTEXT("RSECardUISettings", "PileReturned", "No cards left for the war: each takes back their own.")Texts|Table
Player Label (PlayerLabel)FTextNSLOCTEXT("RSECardUISettings", "Player", "You")Texts|Table--- Texts (localizable; {named} arguments are filled by the widgets) ---
Skip Label (SkipLabel)FTextNSLOCTEXT("RSECardUISettings", "Skip", "Skip")Texts|Table
Speed Action Text (SpeedActionText)FTextNSLOCTEXT("RSECardUISettings", "SpeedAction", "Speed")Texts|TableAction of the speed key prompt.
Speed Format (SpeedFormat)FTextNSLOCTEXT("RSECardUISettings", "Speed", "Speed x{Speed}")Texts|Table{Speed}
Stack Count Format (StackCountFormat)FTextNSLOCTEXT("RSECardUISettings", "StackCount", "x{Count}")Texts|Table{Count} face-down cards in a war stack.
Table Hint Text (TableHintText)FTextTexts|Table
Turn Format (TurnFormat)FTextNSLOCTEXT("RSECardUISettings", "Turn", "Turn {Turn} / {Limit}")Texts|Table{Turn} {Limit}
War Banner Text (WarBannerText)FTextNSLOCTEXT("RSECardUISettings", "WarBanner", "War!")Texts|Table
War Detail Format (WarDetailFormat)FTextNSLOCTEXT("RSECardUISettings", "WarDetail", "Tie on {Value}: {Count} {Count}|plural(one=card,other=cards) each")Texts|TableUnder the banner. {Value} = tied value, {Count} = cards each player turns over.
Album Widget Class (AlbumWidgetClass)TSoftClassPtr<URSEScreenWidget>NoneWidgetsCard album and deck editor (D-052). Empty = the built-in themed screen. A Widget Blueprint derived from RSEScreenWidget replaces it and receives a RSECardAlbumViewModel (docs/product/custom-ui.md).
Notice Widget Class (NoticeWidgetClass)TSoftClassPtr<URSEScreenWidget>NoneWidgetsCard challenge notice (D-052). Empty = the built-in themed screen. A Widget Blueprint derived from RSEScreenWidget replaces it and receives a RSENoticeViewModel (docs/product/custom-ui.md).
Table Widget Class (TableWidgetClass)TSoftClassPtr<URSEScreenWidget>NoneWidgetsCard table (D-052). Empty = the built-in themed screen. A Widget Blueprint derived from RSEScreenWidget replaces it and receives a RSECardTableViewModel (docs/product/custom-ui.md).
Widget ZOrder (WidgetZOrder)int3260WidgetsViewport Z order of the table and the album (above the HUDs).

RPG Saga Engine: Character Actions

Class URSECharacterActionsSettings (module RSEEditor), Project Settings, Project, RPG Saga Engine. One-click character actions (D-084, docs/product/editors-and-wizards.md): Add to Starting Party, Make Recruitable and Make Enemy on a Character asset (Content Browser right-click, RPG Saga Engine -> Content -> Character Actions, the asset's Details).

SettingTypeDefaultCategoryRestartDescription
Place Enemy in Level (bPlaceEnemyInLevel)boolTrueEnemyPlace something that starts the battle in the open level: a roaming enemy spawner (classic modes) or a battle zone (Tactics).
Enemy Battle Mode (EnemyBattleMode)FGameplayTag()EnemyBattle mode of a new encounter. Empty = Wizards -> Default Battle Mode.
Enemy Group Size (EnemyGroupSize)int322EnemyUnits of the character in a new encounter (a small group of the same enemy).
Enemy Outliner Folder (EnemyOutlinerFolder)FNameRPG Saga/EnemiesPlacementWorld Outliner folder of the placed enemy spawners.
Ground Search Distance (GroundSearchDistance)float2000.000000PlacementHow far above and below the placement point the ground is searched.
NPCOutliner Folder (NPCOutlinerFolder)FNameRPG Saga/NPCsPlacementWorld Outliner folder of the placed NPCs.
Place Distance (PlaceDistance)float500.000000PlacementNew NPCs and enemy spawners are placed this far in front of the level viewport's camera (then dropped to the ground).
Declined Line (DeclinedLine)FTextNSLOCTEXT("RSECharacterActions", "DefaultDeclined", "Suit yourself. You know where to find me.")RecruitSaid after being turned down (the player may ask again later).
Decline Option (DeclineOption)FTextNSLOCTEXT("RSECharacterActions", "DefaultDecline", "Not now.")RecruitOption that turns the character down (also the Cancel button).
Greeting Line (GreetingLine)FTextNSLOCTEXT("RSECharacterActions", "DefaultGreeting", "Well met. I\'m {Name}. I hear you could use another pair of hands.")RecruitFirst line of the recruit dialog. {Name} = the character's name.
Joined Line (JoinedLine)FTextNSLOCTEXT("RSECharacterActions", "DefaultJoined", "Then let\'s go. I\'m with you.")RecruitSaid after joining. {Name} = the character's name.
Join Option (JoinOption)FTextNSLOCTEXT("RSECharacterActions", "DefaultJoin", "Join us, {Name}.")RecruitOption that recruits the character. {Name} = the character's name.
Join Prompt (JoinPrompt)FTextNSLOCTEXT("RSECharacterActions", "DefaultPrompt", "Ask {Name} to join the party?")RecruitQuestion shown with the two options. {Name} = the character's name.
Recruit Flag Root (RecruitFlagRoot)FStringNarrative.Flag.RecruitedRecruitParent of the story flag set when a character joins ("Narrative.Flag.Recruited" -> Narrative.Flag.Recruited.Mira).
Recruit Flag Tag Source (RecruitFlagTagSource)FStringRSE_Recruits.iniRecruitTag file (Config/Tags of the project) new recruit flags are written to.
Max Starting Party Size (MaxStartingPartySize)int320Starting PartyMost characters Add to Starting Party accepts in Party -> Starting Members. 0 = the battle places (the ATB party size of the default rules profile, Battle -> ATB Party Size) plus Starting Reserve Places (D-136).
Starting Reserve Places (StartingReservePlaces)int324Starting PartyWith Max Starting Party Size 0: starting members allowed after the battle places (D-136). They are in the party from the start and are swapped into battles from the party menu (Formation); in Tactics battles every member can be deployed.

RPG Saga Engine: Character Packs

Class URSECharacterPackSettings (module RSEEditor), Project Settings, Project, RPG Saga Engine. Character pack importer defaults (D-074): Project Settings -> RPG Saga Engine -> Character Packs.

SettingTypeDefaultCategoryRestartDescription
Body Preset Prefix (BodyPresetPrefix)FStringImporterPrefix of the body presets the importer writes (<Prefix><Character>_<Skin>).
Default Profile (DefaultProfile)TSoftObjectPtr<URSECharacterPackProfile>(set per project)ImporterProfile the importer starts with (the plugin's generic one fits packs with conventional clip names).
Target Root (TargetRoot)FDirectoryPath(set per project)ImporterFolder the imported characters go under (one subfolder per pack). Must be project content.
Display Name Noise Words (DisplayNameNoiseWords)TArray<FString>(26 entries)New Character from MeshWords dropped when a character's display name is made from its asset name ("samurai_warrior_3d_model" -> "Samurai Warrior"): what model exporters and stores add to file names. Case-insensitive, whole words.
New Character Default Class (NewCharacterDefaultClass)TSoftObjectPtr<URSEClassData>/RPGSagaEngine/Data/Classes/DA_Class_Warrior.DA_Class_WarriorNew Character from MeshClass New Character from Mesh offers first.
New Character Profile (NewCharacterProfile)TSoftObjectPtr<URSECharacterPackProfile>/RPGSagaEngine/Data/CharacterPacks/DA_PackProfile_Generic.DA_PackProfile_GenericNew Character from MeshProfile New Character from Mesh starts from (D-085; a copy is adjusted for the one mesh: its class, height and animation source). Empty = Default Profile.

RPG Saga Engine: Character Visuals

Class URSECharacterVisualSettings (module RSE), Project Settings, Project, RPG Saga Engine. Character Visuals

SettingTypeDefaultCategoryRestartDescription
Anchor Fallbacks (AnchorFallbacks)TArray<FRSEAnchorFallback>(2 entries)AnchorsWhere an anchor goes when a look has nothing for it, tried in order (e.g. Weapon Tip -> Right Hand for an unarmed caster, Muzzle -> Weapon Tip). A held weapon without a Weapon Tip socket gets its tip measured (the far end from the grip).
Default Blend Time (DefaultBlendTime)float0.200000AnimationBlend in / out of state and reaction animations whose own BlendTime is negative.
Hit Direction Memory (HitDirectionMemory)float3.000000AnimationA knock-out within this time of a hit falls the way the hit came from (directional Down animations); later ones use the front one.
Moving Speed Threshold (MovingSpeedThreshold)float10.000000AnimationSpeed (cm/s) above which a character counts as moving (the combat idle stops, locomotion takes over).
Speed Smoothing (SpeedSmoothing)float12.000000AnimationHow fast the measured speed follows the real one for actors moved without a movement component (grid units, cue moves). Higher = snappier, lower = smoother blends. 0 = no smoothing.
Turn Anim Min Angle (TurnAnimMinAngle)float60.000000AnimationStanding turns of at least this angle play the anim set's turn in place clip (TurnLeft90 / TurnRight90 / Turn180), and the mesh turns over the clip's length. Smaller turns stay procedural.
Turn in Place Max Angle (TurnInPlaceMaxAngle)float180.000000AnimationTurns larger than this snap (teleports, respawns).
Turn in Place Rate (TurnInPlaceRate)float720.000000AnimationFacing turns (Tactics facing, turning to a target) are shown as a smooth turn in place at this speed instead of a snap. 0 = snap.
Animated Recoil Scale (AnimatedRecoilScale)float0.400000BattleDistance scale of the procedural hit recoil on animated units (0 = only the hit animation).
Animated Units Skip Procedural Fall (bAnimatedUnitsSkipProceduralFall)boolTrueBattleUnits with an animated appearance skip the procedural tip-over on a knock-out (their Down animation shows it).
Impact from Anim Notifies (bImpactFromAnimNotifies)boolTrueBattleA Montage cue whose montage has RSEImpact notifies times its impacts with them (the damage shows on the hit frame).
Body Presets (BodyPresets)TMap<FName,FRSEBodyPreset>(43 entries)BodiesBodies by name, used by appearances that name a Body Preset instead of a mesh (the framework's starter looks use "Mannequin" and "MannequinSlim"). A missing preset leaves those characters as placeholder shapes. The New RPG Project wizard (Install the UE mannequin kit) fills them.
Empty Slot Look (EmptySlotLook)ERSEEmptySlotLookPlayerCharactersEquipmentD-128: whose looks hide their own weapon / shield while the matching equipment slot (Items -> Equipment Slots, with an Appearance Slot and Empty Hides Look Part) is empty. The paperdoll preview and the world follow every equipment change.
Tint Fallback by Team (bTintFallbackByTeam)boolTrueFallbackBattle units with the fallback look take their team color (Tactics Zone -> team colors), so the sides stay readable.
Character Appearance Overrides (CharacterAppearanceOverrides)TMap<TSoftObjectPtr<URSECharacterData> ,TSoftObjectPtr<URSECharacterAppearance> >(1 entries)FallbackLooks this project gives to characters it cannot edit (e.g. the plugin's example monsters, like the wolves of Call Wolves): used instead of the character's own Appearance, wherever it appears (battle, exploration, previews).
Fallback Appearance (FallbackAppearance)TSoftObjectPtr<URSECharacterAppearance>/RPGSagaEngine/Data/Appearance/DA_Appearance_Mannequin.DA_Appearance_MannequinFallbackLook of characters that have no Appearance (enemies made before their art, generated groups): e.g. the mannequin, so they never show as placeholder blocks next to animated characters. Empty = the placeholder shapes.
Fallback Tint Parameter (FallbackTintParameter)FNamePaint TintFallbackVector parameter of the fallback look's materials that takes the team color.
Fallback Tint Strength (FallbackTintStrength)float0.800000FallbackMultiplies the team color before it is applied (team colors are bright UI colors; a darker paint reads better on a body).
Default Idle Anims (DefaultIdleAnims)TMap<FGameplayTag,FRSECharacterAnim>(0 entries)Idle LifeIdle clips for looks whose animation set lacks a slot (Idle.Anim.*): the visible party's idle behaviours try the set, its parent slots, then these (and their parents). Loaded when the party field starts. Empty = only the sets' clips.
Idle Interrupt Blend Out (IdleInterruptBlendOut)float0.200000Idle LifeBlend out (seconds) of an idle animation cut short (the leader walks, a battle starts).
Locomotion Warping (bLocomotionWarping)boolTrueLocomotion WarpingOrientation and stride warping of the locomotion (explorer, NPCs, grid units walking): the feet follow the real movement direction and speed instead of sliding. Off = the warping nodes are skipped (their alpha is 0). Debug override: CVar RSE.Anim.Warping.
Orientation Warp Snap Angle (OrientationWarpSnapAngle)float45.000000Locomotion WarpingThe blend space plays the nearest direction on this grid (45 = the mannequin's 8 directions) and orientation warping turns the legs by the rest. 0 = the blend space gets the exact direction (no orientation warp).
Stride Warp Max Scale (StrideWarpMaxScale)float1.500000Locomotion WarpingMovement faster than the locomotion blend space's top speed (a sprint, a fast cue move) keeps the top speed's cycle and lengthens the strides (stride warping) up to this scale, instead of sliding the feet.
Cast Shadows (bCastShadows)boolTruePerformanceSkeletal parts cast dynamic shadows (off saves shadow draw calls on low-end targets).
Enable Update Rate Optimizations (bEnableUpdateRateOptimizations)boolTruePerformanceAnimation update rate optimization: distant or small characters update their animation less often.
Receive Decals (bReceiveDecals)boolFalsePerformanceCharacter parts receive decals. Off (default): the target rings and area markers on the ground (decals) do not paint the characters standing in them (D-065).
Min LODBias (MinLODBias)int320PerformanceMost detailed LOD character meshes may use (1 = never LOD0, for very weak targets). 0 = the mesh's own LOD screen sizes.
Visibility Based Anim Tick Option (VisibilityBasedAnimTickOption)EVisibilityBasedAnimTickOptionOnlyTickPoseWhenRenderedPerformanceWhen off-screen characters update their animation and bones.

RPG Saga Engine: Cinematics

Class URSECinematicSettings (module RSEEditor), Project Settings, Project, RPG Saga Engine. Cinematic from Screenplay (D-078, docs/product/cinematics.md): stages a dialog as a Level Sequence (cast, cameras with a shot grammar, timing, animation, the dialog driving the sequence line by line).

SettingTypeDefaultCategoryRestartDescription
Force Custom Anim Mode (bForceCustomAnimMode)boolFalseAnimationThe animation sections take over the whole body (Sequencer's own animation mode). Off = they play on the anim set's action slot of the character's Anim Blueprint, so idle and walking stay the Blueprint's (recommended).
Gesture Min Line Seconds (GestureMinLineSeconds)float3.000000AnimationShortest line that gets a gesture.
Gesture Probability (GestureProbability)float0.350000AnimationChance of a gesture on a long line.
Gestures (Gestures)TArray<TSoftObjectPtr<UAnimSequenceBase> >(0 entries)AnimationGestures played at the start of long lines (the speaker's own animations are preferred: its anim set's Talk). Empty = none.
Aperture (Aperture)float4.000000CameraAperture with depth of field on.
Constrain Aspect Ratio (bConstrainAspectRatio)boolFalseCameraThe cameras force their aspect ratio (black bars). Off = they fill the screen; the scene overlay draws its letterbox.
Depth Of Field (bDepthOfField)boolFalseCameraDepth of field (focus on the subject). Off = no blur at all: cheap, and the right choice for low-end hardware such as the Steam Deck.
Sensor Height (SensorHeight)float13.365000Camera
Sensor Width (SensorWidth)float23.760000CameraSensor of the cine cameras (default: 16:9 digital film).
Binding Tag Prefix (BindingTagPrefix)FStringCast.OutputPrefix of the generated binding tags (the scene data binds the real actors by them).
Frame Rate (FrameRate)int3230OutputDisplay rate of new sequences.
Generated Folder Name (GeneratedFolderName)FNameRSE GeneratedOutputSequencer folder of everything the tool makes. Regeneration replaces its content; bindings and tracks outside it are kept.
Marker Prefix (MarkerPrefix)FStringRSE.OutputPrefix of the generated marked frames (Dialog start, one per line, outro). Other markers are kept.
Output Folder (OutputFolder)FDirectoryPath(set per project)OutputFolder of the generated Level Sequences (LS_<Dialog>), under /Game.
Scene Data Prefix (SceneDataPrefix)FStringDA_Scene_Cine_OutputPrefix of the generated scene data (in the Scenes folder of Content Import -> Types).
Sequence Prefix (SequencePrefix)FStringLS_Cine_OutputPrefix of a generated sequence's name.
Close Up on Emotion (bCloseUpOnEmotion)boolTrueShotsEmotional lines are framed Close instead of over the shoulder.
Default Head Height (DefaultHeadHeight)float160.000000ShotsHead height used when a character has no mesh to measure (a placeholder).
Emotional Expressions (EmotionalExpressions)FGameplayTagContainer()ShotsExpressions that make a line emotional (reaction shots, close-ups).
Head Bones (HeadBones)TArray<FName>(4 entries)ShotsBones of the head, first found wins (the head height is measured on it).
Reaction Min Line Seconds (ReactionMinLineSeconds)float2.000000ShotsShortest line that gets a reaction shot (a short line keeps its speaker).
Reaction Probability (ReactionProbability)float0.600000ShotsChance of a reaction shot (the listener, at the end of the line) on emotional lines and questions. 0 = never.
Reaction Share (ReactionShare)float0.350000ShotsThe reaction's share of the line (its end).
Shot Presets (ShotPresets)TArray<FRSECinematicShotPreset>(6 entries)ShotsFramings of the shot grammar, one per shot.
Two Shot After Exchanges (TwoShotAfterExchanges)int323ShotsAfter this many back-and-forth lines between the same two speakers, short lines use a two-shot. 0 = never.
Two Shot Max Line Seconds (TwoShotMaxLineSeconds)float3.500000ShotsLongest line of a back-and-forth that is shown as a two-shot.
Character Radius (CharacterRadius)float35.000000StagingFree radius a character needs (the free-space check).
Ground Search Above (GroundSearchAbove)float300.000000StagingHow far above a spot the ground search starts, and how far below it goes.
Ground Search Below (GroundSearchBelow)float1000.000000Staging
Group Radius (GroupRadius)float130.000000StagingRadius of the triangle and the circle.
Line Up Spacing (LineUpSpacing)float110.000000StagingSpacing of a line-up.
Max Ground Step (MaxGroundStep)float60.000000StagingLargest height step between two cast spots (a formation over a ledge is rotated or tightened).
Nav Projection Distance (NavProjectionDistance)float100.000000StagingWith a navmesh in the level, spots are projected on it (within this distance) and spots off it are refused.
Pair Distance (PairDistance)float170.000000StagingDistance between two characters facing each other.
Placement Rotations (PlacementRotations)int3212StagingRotations of the formation tried around the anchor when a spot is blocked.
Placement Scales (PlacementScales)TArray<float>(4 entries)StagingSpacing scales tried after the rotations (a tighter or wider formation).
Animation Blend Seconds (AnimationBlendSeconds)float0.250000TimingBlend in and out of the animation sections.
Choice Hold Seconds (ChoiceHoldSeconds)float4.000000TimingThe hold of a choice (on whoever chooses).
Hold Seconds (HoldSeconds)float3.000000TimingThe hold after each line: it loops while the line waits for the player.
Intro Seconds (IntroSeconds)float2.500000TimingEstablishing wide before the first line.
Line Base Seconds (LineBaseSeconds)float0.800000TimingUnvoiced lines: added to the reading time (the eye finds the text).
Max Line Seconds (MaxLineSeconds)float9.000000Timing
Min Line Seconds (MinLineSeconds)float1.500000Timing
Outro Seconds (OutroSeconds)float1.500000TimingClosing wide after the dialog ends.
Reading Characters Per Second (ReadingCharactersPerSecond)float15.000000TimingUnvoiced lines: reading speed.
Turn Seconds (TurnSeconds)float0.500000TimingHow long turning toward a new speaker takes.
Voice Tail Seconds (VoiceTailSeconds)float0.300000TimingVoiced lines: added after the voice ends.
Walk Speed (WalkSpeed)float160.000000TimingWalking speed of [move:...] directions.

RPG Saga Engine: Classic Battle UI

Class URSEATBCommandUISettings (module RSE), Project Settings, Project, RPG Saga Engine. How the classic battle command menu tells the player who acts, with what and on whom (D-065): the acting unit's turn banner, the input guard when the menu changes hands, messages near the menu, the help line of the highlighted command, the target cursor and card, and the Wait / Active label.

SettingTypeDefaultCategoryRestartDescription
Block Hint (BlockHint)FTextNSLOCTEXT("RSEATBCommandUI", "BlockHint", "Block")Enemy ActionsKey hint while a block prompt runs (Input -> Block Action).
Block Prompt Menu Opacity (BlockPromptMenuOpacity)float0.450000Enemy ActionsOpacity of the command menu and the target list while a block prompt runs (they stay where they were and come back as they were; Enter still works in them, while a mouse click passes through them to the prompt). 1 = no dimming.
Back Help (BackHelp)FTextNSLOCTEXT("RSEATBCommandUI", "BackHelp", "Back to the commands.")Help
Show Help (bShowHelp)boolTrueHelpShow the help panel for the highlighted command (description, target, cost, element, charge).
Charge Format (ChargeFormat)FTextNSLOCTEXT("RSEATBCommandUI", "Charge", "Charges {Seconds}s before it acts")HelpCharge fact (ATB). Arguments: {Seconds}.
Cost Format (CostFormat)FTextNSLOCTEXT("RSEATBCommandUI", "Cost", "Cost: {Cost}")HelpCost fact. Arguments: {Cost} (the menu's cost text, e.g. "8 MP").
Element Format (ElementFormat)FTextNSLOCTEXT("RSEATBCommandUI", "Element", "Element: {Element}")HelpElement fact. Arguments: {Element}.
Fallen Target Format (FallenTargetFormat)FTextNSLOCTEXT("RSEATBCommandUI", "FallenTarget", "{Target} (fallen)")HelpA revive ability. Arguments: {Target} (the scope line above).
Flee Help (FleeHelp)FTextNSLOCTEXT("RSEATBCommandUI", "FleeHelp", "Try to escape from the battle ({Chance}% chance). A failed try costs the turn.")HelpHelp of Flee. Arguments: {Chance}. (Top-level commands take their help from the command menu layout.)
Help Placement (HelpPlacement)ERSECommandHelpPlacementAboveMenuHelpWhere the help panel sits: right above the command menu, or as a bar at the top of the screen.
Help Top Offset (HelpTopOffset)float52.000000HelpTop placement: the help bar sits this far below the top margin (under the enemy chips).
Help Width (HelpWidth)float560.000000HelpWidth of the help panel.
Item Count Format (ItemCountFormat)FTextNSLOCTEXT("RSEATBCommandUI", "ItemCount", "In the bag: {Count}")HelpItem fact. Arguments: {Count}.
Scope All Format (ScopeAllFormat)FTextNSLOCTEXT("RSEATBCommandUI", "ScopeAll", "Target: every {Side}")Help
Scope Row Format (ScopeRowFormat)FTextNSLOCTEXT("RSEATBCommandUI", "ScopeRow", "Target: one {Side} row")Help
Scope Self Text (ScopeSelfText)FTextNSLOCTEXT("RSEATBCommandUI", "ScopeSelf", "Target: self")HelpAbilities used on the user only.
Scope Single Format (ScopeSingleFormat)FTextNSLOCTEXT("RSEATBCommandUI", "ScopeSingle", "Target: one {Side}")HelpTarget facts. Arguments: {Side} (enemy / ally / self / anyone, below).
Side Allies (SideAllies)FTextNSLOCTEXT("RSEATBCommandUI", "SideAllies", "ally")Help
Side Anyone (SideAnyone)FTextNSLOCTEXT("RSEATBCommandUI", "SideAnyone", "unit")Help
Side Enemies (SideEnemies)FTextNSLOCTEXT("RSEATBCommandUI", "SideEnemies", "enemy")Help
Side Self (SideSelf)FTextNSLOCTEXT("RSEATBCommandUI", "SideSelf", "self")Help
Max Visible Rows (MaxVisibleRows)int327Long ListsMost rows the command menu and the target list show at once; longer lists scroll with the cursor (arrows above / below show there is more) and with the mouse wheel over the list. 0 = no limit.
More Above Mark (MoreAboveMark)FTextNSLOCTEXT("RSEATBCommandUI", "MoreAbove", "▲")Long ListsMarks above / below a scrolled list.
More Below Mark (MoreBelowMark)FTextNSLOCTEXT("RSEATBCommandUI", "MoreBelow", "▼")Long Lists
Command Title Format (CommandTitleFormat)FTextNSLOCTEXT("RSEATBCommandUI", "CommandTitle", "{Name} — Command")MenuTitle of the first command list. Arguments: {Name}.
List Glyph (ListGlyph)FTextINVTEXT("›")MenuMarks the commands that open a list (Skills, Magic...).
List Title Format (ListTitleFormat)FTextNSLOCTEXT("RSEATBCommandUI", "ListTitle", "{Name} — {List}")MenuTitle of a list (Skills, Magic, Items...). Arguments: {Name}, {List}.
Target Title Format (TargetTitleFormat)FTextNSLOCTEXT("RSEATBCommandUI", "TargetTitle", "{Name} — {Action}: choose a target")MenuTitle while a target is chosen. Arguments: {Name}, {Action}.
Acting State Format (ActingStateFormat)FTextNSLOCTEXT("RSEATBCommandUI", "ActingState", "{Action}!")MessagesParty row state while the unit's command is being shown (timed prompt, prelude). Arguments: {Action}.
Dropped Format (DroppedFormat)FTextNSLOCTEXT("RSEATBCommandUI", "Dropped", "{Name}: {Action} cancelled — {Reason}")MessagesA queued command that could no longer run. Arguments: {Name}, {Action}, {Reason}.
Error Color (ErrorColor)FRSEUIColor(Token="Negative",Alpha=1.000000,Chroma=1.000000,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))MessagesA command that cannot be given (not enough MP, invalid target...).
Info Color (InfoColor)FRSEUIColor(Token="Info",Alpha=1.000000,Lightness=0.079403,Chroma=0.651117,Hue=-15.902557,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))MessagesInformation (command queued, time mode switched).
Message Seconds (MessageSeconds)float2.000000MessagesSeconds a message stays near the menu (refused command, queued command, cancelled command, time mode).
Queued Format (QueuedFormat)FTextNSLOCTEXT("RSEATBCommandUI", "Queued", "{Name}: {Action} — queued, acts after the current action")MessagesAccepted while an action is being shown. Arguments: {Name}, {Action}.
Queued State Format (QueuedStateFormat)FTextNSLOCTEXT("RSEATBCommandUI", "QueuedState", "QUEUED {Action}")MessagesParty row state of a unit with a queued command. Arguments: {Action}.
Hit Cursor Font Size (HitCursorFontSize)int3230TargetGlyph size over the other units the aimed ability hits (row / all).
Target Card Offset (TargetCardOffset)FVector2D(X=36.000000,Y=-20.000000)TargetThe target card (name, HP, expected result) sits this far from the cursor (pixels, right / down).
Target Card Width (TargetCardWidth)float280.000000Target
Target Cursor Bob (TargetCursorBob)float6.000000TargetCursor bob: height in pixels and cycles per second (0 = still).
Target Cursor Bob Rate (TargetCursorBobRate)float1.500000Target
Target Cursor Color (TargetCursorColor)FRSEUIColor(Token="Warning",Alpha=1.000000,Lightness=0.066483,Chroma=1.192767,Hue=23.327459,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Target
Target Cursor Font Size (TargetCursorFontSize)int3244Target
Target Cursor Glyph (TargetCursorGlyph)FTextNSLOCTEXT("RSEATBCommandUI", "TargetCursor", "▼")TargetGlyph over the targeted unit.
All Allies Text (AllAlliesText)FTextNSLOCTEXT("RSEATBCommandUI", "AllAllies", "All allies")Target List
All Enemies Text (AllEnemiesText)FTextNSLOCTEXT("RSEATBCommandUI", "AllEnemies", "All enemies")Target ListGroup entries of row / all abilities.
Ally Side Text (AllySideText)FTextNSLOCTEXT("RSEATBCommandUI", "AllySide", "Allies")Target List
Back Row Text (BackRowText)FTextNSLOCTEXT("RSEATBCommandUI", "BackRow", "Back row")Target List
Hide Enemy Chips While Targeting (bHideEnemyChipsWhileTargeting)boolFalseTarget ListHide the enemy chips at the top while a target is chosen. Off by default: the chips are the HP overview and stay clickable; they use the same names and the same highlight as the list, so they never disagree with it.
Letter Duplicate Names (bLetterDuplicateNames)boolTrueTarget ListRSE style names (D-066): enemies sharing a character get letters in their battle order ("Raider A", "Raider B"), in the list, the chips, the log and the banners. A unique one keeps its name.
Show Target List (bShowTargetList)boolTrueTarget ListWhile a target is chosen, a list next to the command menu names what the command can be given on: each enemy (or ally, for heals and buffs), or the groups a row / all ability hits ("Front row", "All enemies"). Up / down moves the cursor in the world too; a click on a row, a unit or its chip picks it.
Duplicate Name Format (DuplicateNameFormat)FTextNSLOCTEXT("RSEATBCommandUI", "DuplicateName", "{Name} {Letter}")Target ListArguments: {Name}, {Letter}.
Duplicate Name Letters (DuplicateNameLetters)FStringABCDEFGHIJKLMNOPQRSTUVWXYZTarget ListThe letters, in order (more units than letters: numbers).
Enemy Side Text (EnemySideText)FTextNSLOCTEXT("RSEATBCommandUI", "EnemySide", "{Term.Enemies}")Target List
Everyone Text (EveryoneText)FTextNSLOCTEXT("RSEATBCommandUI", "Everyone", "Everyone")Target List
Front Row Text (FrontRowText)FTextNSLOCTEXT("RSEATBCommandUI", "FrontRow", "Front row")Target List
Row Side Format (RowSideFormat)FTextNSLOCTEXT("RSEATBCommandUI", "RowSide", "{Side}: {Row}")Target ListA row when both sides can be targeted. Arguments: {Side} (Enemy / Ally side, below), {Row}.
Target List Title Format (TargetListTitleFormat)FTextNSLOCTEXT("RSEATBCommandUI", "TargetListTitle", "{Action}: on whom?")Target ListTitle of the list. Arguments: {Action}.
Target List Width (TargetListWidth)float260.000000Target List
Active Label (ActiveLabel)FTextNSLOCTEXT("RSEATBCommandUI", "Active", "ACTIVE")Time Mode
Toggle Saves Option (bToggleSavesOption)boolTrueTime ModeSwitching in battle also stores the choice as the player's option (Options -> Battle time). Off: this battle only.
Time Mode Format (TimeModeFormat)FTextNSLOCTEXT("RSEATBCommandUI", "TimeMode", "TIME: {Mode}")Time ModeLabel of the time mode. Arguments: {Mode} (Wait / Active).
Time Running Text (TimeRunningText)FTextNSLOCTEXT("RSEATBCommandUI", "TimeRunning", "time keeps running")Time Mode
Time Stopped Text (TimeStoppedText)FTextNSLOCTEXT("RSEATBCommandUI", "TimeStopped", "time stops while you choose")Time ModeSecond line while time stands still / runs.
Toggled Format (ToggledFormat)FTextNSLOCTEXT("RSEATBCommandUI", "Toggled", "Battle time: {Mode}")Time ModeMessage after a switch. Arguments: {Mode}.
Toggle Hint (ToggleHint)FTextNSLOCTEXT("RSEATBCommandUI", "ToggleHint", "Wait / Active")Time ModeKey hint of the Wait / Active switch (Input -> ATB Time Mode Action).
Wait Label (WaitLabel)FTextNSLOCTEXT("RSEATBCommandUI", "Wait", "WAIT")Time Mode
Show Turn Banner (bShowTurnBanner)boolTrueTurnShow a banner ("Mira's turn") when the command menu opens for a party member.
Switch Input Guard Seconds (SwitchInputGuardSeconds)float0.250000TurnConfirm is ignored this long after the menu opens for another unit, so a press meant for the previous menu never picks a command for the new one.
Turn Banner Format (TurnBannerFormat)FTextNSLOCTEXT("RSEATBCommandUI", "TurnBanner", "{Name}\'s turn")TurnBanner text. Arguments: {Name}.
Turn Banner Seconds (TurnBannerSeconds)float1.200000TurnHow long the banner stays (it slides in and fades out within this time).
Turn Banner Slide (TurnBannerSlide)float120.000000TurnSlide distance of the banner as it comes in (pixels, from the left).

RPG Saga Engine: Co-op Flow

Class URSECoopFlowSettings (module RSE), Project Settings, Project, RPG Saga Engine. How world actions behave when they arrive as commands from any player (D-138, networking.md §6): how much the authority trusts a player's position and timing, and who leads the group out of a zone.

SettingTypeDefaultCategoryRestartDescription
Interact Reach Tolerance (InteractReachTolerance)float150.000000InteractionExtra distance the authority allows between a player's pawn and the object they interact with (or the exit they take), beyond the object's own range: the pawn the authority sees may lag behind the player's screen.
Leash Enabled (bLeashEnabled)boolTrueLeashPlayers may not roam farther than Leash Radius from the anchor (warning, then a pull back). Off = free roaming.
Leash Anchor (LeashAnchor)ERSELeashAnchorHostLeashWhat the guests are tied to: the host's explorer, or the center of every player's explorer.
Leash Check Interval (LeashCheckInterval)float0.500000LeashHow often the authority measures the distances (no Tick).
Leash Grace Seconds (LeashGraceSeconds)float4.000000LeashSeconds past the radius between the warning and the pull back (coming back in time cancels it).
Leash Policy Class (LeashPolicyClass)TSoftClassPtr<URSELeashPolicy>NoneLeashDecides the anchor, the radius and when the leash applies. Empty = URSELeashPolicy (the settings above).
Leash Radius (LeashRadius)float4000.000000LeashHow far a player may go from the anchor (a map's Co-op Map Settings actor may override it).
Leash Return Distance (LeashReturnDistance)float400.000000LeashThe pull back puts the player this far from the anchor, on the side they came from.
Leash Pulled Text (LeashPulledText)FTextNSLOCTEXT("RSECoopFlow", "LeashPulled", "You were brought back to the group.")Leash|TextsNotice after the pull back.
Leash Warning Detail (LeashWarningDetail)FTextNSLOCTEXT("RSECoopFlow", "LeashDetail", "Go back, or you are brought back in {Seconds} s.")Leash|Texts
Leash Warning Title (LeashWarningTitle)FTextNSLOCTEXT("RSECoopFlow", "LeashTitle", "Too far from the group")Leash|TextsNotice to the player past the radius ({Seconds} = seconds before the pull back).
Lockpick Min Seconds Per Pin (LockpickMinSecondsPerPin)float0.150000LockpickLockpick game played on a player's own machine: a reported success is believed only if the screen was open at least this long per pin (a plausibility check, not anti-cheat). 0 = any report is believed.
Notice Color (NoticeColor)FLinearColor(R=0.550000,G=0.800000,B=1.000000,A=1.000000)Notices
Notice Repeat Seconds (NoticeRepeatSeconds)float2.000000NoticesThe same notice is not repeated within this many seconds.
Refusal Notices (RefusalNotices)ERSECoopNoticeModeInSessionNoticesWhen a refused command's reason shows as a notice to the player who sent it.
Silent Refusal Types (SilentRefusalTypes)TArray<TSoftObjectPtr<UScriptStruct> >(1 entries)NoticesCommand types whose refusals never show (their own screens explain them, or they are routine).
Warning Notice Color (WarningNoticeColor)FLinearColor(R=1.000000,G=0.700000,B=0.300000,A=1.000000)Notices
Companion Took Over Text (CompanionTookOverText)FTextNSLOCTEXT("RSECoopFlow", "TookOver", "The companion AI takes over {Member}.")Notices|TextsThe companion AI drives {Member} again.
Host Saving Text (HostSavingText)FTextNSLOCTEXT("RSECoopFlow", "HostSaving", "The host is saving the game.")Notices|TextsThe host saves the game.
Player Joined Text (PlayerJoinedText)FTextNSLOCTEXT("RSECoopFlow", "Joined", "{Player} joined the game.")Notices|Texts{Player} joined.
Player Left Text (PlayerLeftText)FTextNSLOCTEXT("RSECoopFlow", "Left", "{Player} left the game.")Notices|Texts{Player} left.
Player Reconnected Text (PlayerReconnectedText)FTextNSLOCTEXT("RSECoopFlow", "Reconnected", "{Player} is back.")Notices|Texts{Player} came back.
Refusal Notice Title (RefusalNoticeTitle)FTextNSLOCTEXT("RSECoopFlow", "RefusalTitle", "Not now")Notices|TextsHeader of a refused action.
Session Notice Title (SessionNoticeTitle)FTextNSLOCTEXT("RSECoopFlow", "SessionTitle", "Co-op")Notices|TextsHeader of session notices (joined, left, saving).
Scene Mirror End Wait Seconds (SceneMirrorEndWaitSeconds)float10.000000ScenesA guest whose scene reached its end before the host's waits this long for the host's end (then returns on its own). Keeps both machines leaving the scene together.
Scene Skip Policy Class (SceneSkipPolicyClass)TSoftClassPtr<URSESceneSkipPolicy>NoneScenesDecides who may skip. Empty = URSESceneSkipPolicy (the rule above).
Scene Skip Rule (SceneSkipRule)ERSESceneSkipRuleHostOnlyScenesWho may skip a story scene in co-op (single player: the player).
Scene Skip Vote Share (SceneSkipVoteShare)float0.500000ScenesVote rule: the share of players that must ask to skip (0.5 = half; 1 = everyone).
Scene Skip Host Only Text (SceneSkipHostOnlyText)FTextNSLOCTEXT("RSECoopFlow", "SkipHostOnly", "Only the host can skip this scene.")Scenes|TextsA guest pressed skip but only the host may ({Host}).
Scene Skip Vote Text (SceneSkipVoteText)FTextNSLOCTEXT("RSECoopFlow", "SkipVote", "{Player} wants to skip the scene ({Votes} of {Needed}).")Scenes|TextsVote progress ({Player}, {Votes}, {Needed}).
Group Travel Countdown Seconds (GroupTravelCountdownSeconds)float3.000000Zone TravelThe countdown before the host pulls the whole group to the next zone (0 = at once).
Group Travel Policy Class (GroupTravelPolicyClass)TSubclassOf<URSEGroupTravelPolicy>/Script/CoreUObject.Class'/Script/RSE.RSEGroupTravelPolicy'Zone TravelDecides what a travel request does in a multiplayer session (D-124 §6.6: the host pulls everyone after a short countdown; a guest at an exit asks the host). Single player always travels at once.
Group Travel Asked Text (GroupTravelAskedText)FTextNSLOCTEXT("RSECoopFlow", "RequestAsked", "The host decides whether the group goes to {Destination}.")Zone Travel|TextsNotice to the guest who asked: the host is asked ({Destination}).
Group Travel Cancel Hint (GroupTravelCancelHint)FTextNSLOCTEXT("RSECoopFlow", "CountdownCancel", "Menu > Options > Stay here: cancel")Zone Travel|TextsThe host's countdown screen: how to cancel.
Group Travel Cancelled Text (GroupTravelCancelledText)FTextNSLOCTEXT("RSECoopFlow", "CountdownCancelled", "The host stays here for now.")Zone Travel|TextsNotice to everyone when the host cancels the countdown.
Group Travel Countdown Detail (GroupTravelCountdownDetail)FTextNSLOCTEXT("RSECoopFlow", "CountdownDetail", "The group travels in {Seconds} s.")Zone Travel|TextsCountdown screen: the line under it ({Seconds} = seconds left).
Group Travel Countdown Title (GroupTravelCountdownTitle)FTextNSLOCTEXT("RSECoopFlow", "CountdownTitle", "Leaving for {Destination}")Zone Travel|TextsCountdown screen: the title ({Destination} = the area's name or the map).
Group Travel Declined Text (GroupTravelDeclinedText)FTextNSLOCTEXT("RSECoopFlow", "RequestDeclined", "The host stays here for now.")Zone Travel|TextsNotice to the guest who asked: the host stays ({Destination}).
Group Travel Request No (GroupTravelRequestNo)FTextNSLOCTEXT("RSECoopFlow", "RequestNo", "Not now")Zone Travel|Texts
Group Travel Request Question (GroupTravelRequestQuestion)FTextNSLOCTEXT("RSECoopFlow", "RequestQuestion", "{Player} wants to go to {Destination}. Go now, together?")Zone Travel|TextsThe host's question when a guest walks into an exit ({Player}, {Destination}).
Group Travel Request Yes (GroupTravelRequestYes)FTextNSLOCTEXT("RSECoopFlow", "RequestYes", "Go together")Zone Travel|Texts

RPG Saga Engine: Co-op Network

Class URSENetSettings (module RSENet), Project Settings, Project, RPG Saga Engine. The co-op network layer (D-140, docs/design/networking.md §3.4–3.8, docs/product/coop.md): how the state sections are replicated, the limits on players' commands, who the players are while a session runs and how often world actors update.

SettingTypeDefaultCategoryRestartDescription
Action Claim Packets Per Second (ActionClaimPacketsPerSecond)int3260Action BattleAnti-abuse: claim packets a guest may send per second (more are dropped and logged; the battle limits claims per unit too).
Action Claim Resend Interval (ActionClaimResendInterval)float0.100000Action BattleA guest repeats unanswered claims this often (seconds) even when it found no new hit.
Action Claim Resend Seconds (ActionClaimResendSeconds)float1.000000Action BattleA guest's hit claims travel unreliably and redundantly: every packet repeats the claims the host has not answered yet, for at most this long (the host answers reliably and ignores repeats).
Action Keyframe Seconds (ActionKeyframeSeconds)float2.000000Action BattleA full snapshot of the state goes reliably this often (the deltas between are based on what each guest acknowledged).
Action Max Claims Per Packet (ActionMaxClaimsPerPacket)int3224Action BattleAt most this many claims in one packet (the oldest unanswered first).
Action Mirror Budget Bytes Per Second (ActionMirrorBudgetBytesPerSecond)int3212000Action BattleBytes per second (as sent, per guest) the action battle's state may use. The unreliable deltas wait when the budget is spent (the next one carries the changes); the reliable full snapshots and the events always go.
Action Mirror Burst Seconds (ActionMirrorBurstSeconds)float0.500000Action BattleSeconds of the budget a quiet moment may save up (a burst of changes after it).
Action Mirror History (ActionMirrorHistory)int3232Action BattleStates the host (and each guest) keeps as baselines for deltas.
Battle Chunk Bytes (BattleChunkBytes)int3216384BattleThe start snapshot travels in chunks of at most this many bytes (as sent).
Battle Chunk Window (BattleChunkWindow)int324BattleChunks a guest may have unacknowledged at once (the reliable channel never overflows).
Battle Max Events Per Packet (BattleMaxEventsPerPacket)int3296BattleAt most this many events per packet (a long AI turn goes in several packets, in order).
Battle Playback Report Interval (BattlePlaybackReportInterval)float0.100000BattleHow often a guest tells the host how far its presentation got (seconds; only when it changed).
Battle Stream Interval (BattleStreamInterval)float0.050000BattleHow often the host sends the battle's new events, notices and state to the guests (seconds).
Broadcast Result Types (BroadcastResultTypes)TArray<FSoftObjectPath>(0 entries)CommandsCommand types whose results every player receives (On Peer Command Result), not only the sender: for notices such as "Player 2 opened the gate".
Max Command Bytes (MaxCommandBytes)int324096CommandsA command larger than this (bytes, encoded) is refused; a larger packet disconnects the sender.
Max Commands Per Second (MaxCommandsPerSecond)int3230CommandsCommands a guest may send per second (burst up to the same number); more are refused, not applied.
Max Queued Commands (MaxQueuedCommands)int3232CommandsCommands a guest keeps while it is not connected to the host yet (its player state has not arrived); more are refused.
Log Traffic (bLogTraffic)boolFalseDiagnosticsLogs every section sent or received and every command packet (verbose). The CVar RSE.Net.LogTraffic does the same.
Enable Coop (bEnableCoop)boolTrueGeneralInstalls the co-op layer whenever this game runs a network session (listen server host or guest): the authority mode, the command transport, the replicated state and the players' identity. Off = the project replicates on its own.
Authority Policy Class (AuthorityPolicyClass)TSubclassOf<URSEAuthorityPolicy>/Script/CoreUObject.Class'/Script/RSENet.RSENetAuthorityPolicy'PlayersDecides authority and the multiplayer rules while a session runs.
Assign Member on Join (bAssignMemberOnJoin)boolTruePlayersA joining player takes a party member from the companion AI: the lobby's choice when free, else the first member no player controls (D-124 §3.7). Off = the game assigns members itself (Assign Party Member command).
Player Provider Class (PlayerProviderClass)TSubclassOf<URSEPlayerProvider>/Script/CoreUObject.Class'/Script/RSENet.RSENetPlayerProvider'PlayersLists the players while a session runs (slots from the replicated player states; stable across reconnects).
Player Pawns Always Relevant (bPlayerPawnsAlwaysRelevant)boolTrueRelevancyPlayers' explorers are sent to every player whatever the distance.
Class Relevancy (ClassRelevancy)TArray<FRSENetClassRelevancy>(3 entries)RelevancyPer class: cull distance, update rate and priority (roaming enemies, NPCs, companions). Applied on the host.
Player Pawn Priority (PlayerPawnPriority)float3.000000Relevancy
Player Pawn Update Frequency (PlayerPawnUpdateFrequency)float60.000000RelevancyUpdate rate and priority of the explorers players drive.
Compress Sections (bCompressSections)boolTrueState SectionsCompress the sections before sending (they are save bytes: they compress well).
Change Detection Interval (ChangeDetectionInterval)float0.500000State SectionsHow often the host compares every section's bytes to catch writes that forgot to mark their section (seconds; 0 = never). Costs one serialization per section each time.
Compression Format (CompressionFormat)FNameOodleState SectionsThe compression format (Oodle, Zlib, LZ4...).
Compression Min Bytes (CompressionMinBytes)int32256State SectionsSections smaller than this are sent uncompressed (bytes).
Max Section Bytes (MaxSectionBytes)int32262144State SectionsA section larger than this (bytes, as sent) is not replicated and is reported as an error: split the system's state or give it a delta of its own.
Min Section Resend Interval (MinSectionResendInterval)float0.200000State SectionsA section that keeps changing is sent at most this often (seconds); the latest state always goes out.
Section Send Interval (SectionSendInterval)float0.100000State SectionsHow often the host looks for changed state sections to send (seconds).

RPG Saga Engine: Co-op Rules

Class URSECoopRulesSettings (module RSECore), Project Settings, Project, RPG Saga Engine. The co-op rules that live in the game logic (D-142).

SettingTypeDefaultCategoryRestartDescription
Companion Order Policy Class (CompanionOrderPolicyClass)TSoftClassPtr<URSECompanionOrderPolicy>NoneCompanionsDecides who may order which companion. Empty = URSECompanionOrderPolicy (the rule above).
Companion Orders (CompanionOrders)ERSECompanionOrderRuleAnyPlayerCompanionsWho orders the companions the AI drives.
Default Encounter Conversion (DefaultEncounterConversion)ERSECoopBattleConversionFreeTacticsEncountersWhat Tactics / ATB encounters become in a session with more than one player (an encounter's own rule wins).
Encounter Policy Class (EncounterPolicyClass)TSoftClassPtr<URSECoopEncounterPolicy>NoneEncountersDecides each encounter's battle in co-op. Empty = URSECoopEncounterPolicy (the rules above).
Guest Equipment (GuestEquipment)ERSEGuestEquipmentRuleOwnCharacterEquipmentWhose equipment and Pacts a guest may change (read by the default Items -> Permission Policy Class, URSEInventoryPermissionPolicy::CanChangeEquipment).

RPG Saga Engine: Combat Formulas

Class URSECombatFormulaSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Combat formulas as data (D-054, docs/design/attributes.md): damage per kind, healing, hit and critical chances, the critical multiplier, defense and the element step.

SettingTypeDefaultCategoryRestartDescription
Critical Chance (CriticalChance)FRSEExpression(Source="BaseCriticalChance")FormulasCritical chance in percent.
Critical Multiplier (CriticalMultiplier)FRSEExpression(Source="CriticalMultiplier")FormulasDamage multiplier of a critical hit.
Defense Factor (DefenseFactor)FRSEExpression(Source="DefenseConstant / (DefenseConstant + max(0, Defense))")FormulasShare of damage that passes the defense ("DefenseConstant / (DefenseConstant + max(0, Defense))"). Read by the damage formulas as DefenseFactor.
Final Damage (FinalDamage)FRSEExpression(Source="max(MinDamage, Damage) * Affinity")FormulasLast step (the element multiplier hook): Damage after the critical, Affinity from the target's element affinity.
Fixed Damage (FixedDamage)FRSEExpression(Source="Power")FormulasFixed damage (items such as bombs): stats, defense, position and variance usually ignored.
Healing (Healing)FRSEExpression(Source="Power * Attacker.Magic * Variance")FormulasHealing of a Magic-scaled restore (spells), before rounding. Fixed and percent restores stay as authored.
Hit Chance (HitChance)FRSEExpression(Source="Attacker.Accuracy - Target.Evasion + HitBonus")FormulasChance to hit in percent, before the battle's MinHitChance / MaxHitChance bounds.
Magical Damage (MagicalDamage)FRSEExpression(Source="Power * Offense * DefenseFactor * Position * Variance")Formulas
Physical Damage (PhysicalDamage)FRSEExpression(Source="Power * Offense * DefenseFactor * Position * Variance")FormulasDamage of a physical hit before criticals, the minimum and the element.
Magical Defense Stat (MagicalDefenseStat)FGameplayTag(TagName="Stat.Spirit")Stats
Magical Offense Stat (MagicalOffenseStat)FGameplayTag(TagName="Stat.Magic")Stats
Physical Defense Stat (PhysicalDefenseStat)FGameplayTag(TagName="Stat.Defense")Stats
Physical Offense Stat (PhysicalOffenseStat)FGameplayTag(TagName="Stat.Attack")Stats--- Which attributes feed Offense / Defense ---

RPG Saga Engine: Combat Roles

Class URSECombatRoleSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Combat roles (D-093): the role list, where asset roles are stored, the suggestion thresholds and the Combat Area checks.

SettingTypeDefaultCategoryRestartDescription
Built in Assignments (BuiltInAssignments)TMap<FSoftObjectPath,FGameplayTag>(0 entries)AssignmentsRoles of the framework's own classes and meshes (a save point, a chest), read after the registries. Keys are asset or class paths (/Script/RSE.RSEChest).
Registries (Registries)TArray<TSoftObjectPtr<URSECombatRoleRegistry> >(1 entries)AssignmentsRegistries of asset roles, read in order (the first that has an asset wins). The configurator adds its own here.
Registry Folder (RegistryFolder)FDirectoryPath(set per project)AssignmentsFolder of the registry the configurator creates when the project has none (must be under /Game).
Registry Name (RegistryName)FStringDA_CombatRolesAssignmentsName of that registry asset.
Combat Area Min Free Ratio (CombatAreaMinFreeRatio)float0.600000Combat AreasA Combat Area warns when less than this share of its tiles can be walked.
Combat Area Min Free Tiles (CombatAreaMinFreeTiles)int3224Combat AreasA Combat Area warns when fewer tiles than this can be walked.
Default Role (DefaultRole)FGameplayTag()RolesRole of objects nothing assigns a role to. Empty = none (the grid bake and placement tools keep their own rules).
Roles (Roles)TArray<FRSECombatRoleDefinition>(10 entries)RolesEvery combat role. Add a role here (with a new CombatRole.* tag) to use it in the configurator.
Suggestions (Suggestions)FRSECombatRoleSuggestionRules(NeutralMaxHeight=30.000000,HalfCoverMinHeight=80.000000,FullCoverMinHeight=150.000000,OverheadMinBottom=180.000000,FullCoverMinWidth=35.000000,AvoidMaxSize=60....SuggestionsThresholds of the automatic suggestion.

RPG Saga Engine: Command Menu

Class URSECommandMenuSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Command menu of classic battles (D-065).

SettingTypeDefaultCategoryRestartDescription
Back Label (BackLabel)FTextNSLOCTEXT("RSECommandMenu", "Back", "Back")BehaviorLabel and help of the Back entry, and of Flee inside a list.
Remember Cursor (bRememberCursor)boolTrueBehaviorMemory cursor: each unit's menus open where its cursor was last (per list). Off: always on the first entry.
Show Back Entry (bShowBackEntry)boolTrueBehaviorLists end with a Back entry (for the mouse; Cancel always goes back).
Empty Groups (EmptyGroups)ERSEEmptyCommandGroupsHideBehaviorTop-level commands with nothing in them.
Flee Label (FleeLabel)FTextNSLOCTEXT("RSECommandMenu", "Flee", "Flee")Behavior
Default Layout (DefaultLayout)TSoftObjectPtr<URSECommandMenuLayout>NoneLayoutLayout for units whose class names none. Empty = Fallback Entries below.
Fallback Entries (FallbackEntries)TArray<FRSECommandMenuEntry>(5 entries)LayoutThe layout used without a Default Layout asset (Attack, Skills, Magic, Items, Actions).

RPG Saga Engine: Commands

Class URSECommandSettings (module RSECore), Project Settings, Project, RPG Saga Engine. The command bus (D-133).

SettingTypeDefaultCategoryRestartDescription
Log Refused Commands (bLogRefusedCommands)boolTrueDebugLogs every refused command (Rejected, No Handler, Invalid, Not Allowed) as a warning. RSE.Commands.Log 1 logs all.
Handler Classes (HandlerClasses)TArray<TSoftClassPtr<URSECommandHandler> >(0 entries)HandlersHandler classes created when the game starts (Blueprint or C++ children of RSE Command Handler): each one validates and applies its command type. The framework's own commands register themselves from code.
Permission Rules (PermissionRules)TArray<FRSECommandPermissionRule>(0 entries)PermissionsPer-project permission of command types (D-139), over the handlers' own: who may save, play cards, abandon a quest, change the session's rules... The most specific rule wins (the type, then its base commands).
Max Nested Depth (MaxNestedDepth)int328SafetyHow deep commands may submit commands while they apply (a handler that sends another command runs it at once). Deeper submissions are refused as Not Allowed: a loop in content stops instead of freezing the game.

RPG Saga Engine: Common UI

Class URSECommonUISettings (module RSECommonUI), Project Settings, Project, RPG Saga Engine. Project Settings -> RPG Saga Engine -> Common UI (D-176, docs/product/common-ui.md): how the Common UI host (off by default, D-181) puts RPG Saga screens on CommonUI layers and shows key prompt icons.

SettingTypeDefaultCategoryRestartDescription
Apply Menu Input Config (bApplyMenuInputConfig)boolTrueInputScreens that read their own keys ask CommonUI for the Menu input config while active (game input blocked, cursor free). Off: our screens set the input mode themselves, as without the plugin.
Bind Action Bar (bBindActionBar)boolTrueInputD-176 C2: a screen on a layer binds its main actions (Confirm, Back, and the tab actions of screens with tabs) as CommonUI actions shown in the action bar: any Common Bound Action Bar of your layout lists them with the icons of the controller in use. The bindings do not consume the keys (the screen still reads them; an input counts once per frame). Off: no bindings.
Silence Viewport Client Check (bSilenceViewportClientCheck)boolTrueInputCommonUI logs an error when the game viewport client is not a CommonGameViewportClient. Our layers work without it (our screens read their keys; CommonUI's back action needs it), and the plugin enables CommonUI in every project (D-181), so the check is turned off at startup. Off: CommonUI's default (the error per player when the viewport client is not a CommonGameViewportClient).
Keyboard Icons (bKeyboardIcons)boolFalseKey PromptsIcons for keyboard / mouse keys too (when a controller data for Mouse And Keyboard has them). Off: text caps on keyboard.
Use Common Input Key Prompts (bUseCommonInputKeyPrompts)boolFalseKey PromptsKey prompts use the CommonInput controller data for icons (gamepad glyphs instead of text caps). Off by default (D-181).
Controller Data (ControllerData)TArray<TSoftClassPtr<UCommonInputBaseControllerData> >(0 entries)Key PromptsController data asked first (your platform icon sets: Blueprints derived from Common Input Base Controller Data). Then the platform's controller data from Project Settings -> Common Input, then the generic glyphs.
Generic Controller Data (GenericControllerData)TSoftClassPtr<UCommonInputBaseControllerData>/Script/RSECommonUI.RSEGenericControllerDataKey PromptsThe last resort: generic glyphs without platform logos (face buttons as a diamond, shoulders, triggers, sticks, D-pad). Empty: text caps.
Generic Glyph Resolution (GenericGlyphResolution)int3264Key PromptsSize in pixels of the generated generic glyph textures.
Route Screens (bRouteScreens)boolFalseLayersScreens shown with Show Screen (options, save slots, shops, maps...) go onto the CommonUI layers. Off (the default, D-181): the viewport, as without Common UI.
Default Screen Layer (DefaultScreenLayer)ERSECommonUILayerMenuLayersThe layer of a screen not listed in Screen Layers.
Layer Transition Duration (LayerTransitionDuration)float0.000000LayersTransition of our layer stacks when a screen is pushed or popped, seconds (0 = instant).
Layout Class (LayoutClass)TSoftClassPtr<URSECommonUILayout>NoneLayersThe layout made for each local player when the project registers no stacks of its own (Register Layer Stack): a Widget Blueprint derived from RSE Common UI Layout may bind its own stacks (GameLayer, GameMenuLayer, MenuLayer, ModalLayer). Empty: ours.
Layout ZOrder (LayoutZOrder)int3250LayersViewport order of our layout (above the HUD; our viewport screens use 2 to 40).
Party Menu Host (PartyMenuHost)ERSECommonUIHostModeOffLayersWho hosts the party menu (see the values). Off by default (D-181): the framework's own hosts.
Party Menu Layer (PartyMenuLayer)ERSECommonUILayerGameMenuLayersThe layer of the party menu.
Screen Host Class (ScreenHostClass)TSoftClassPtr<URSECommonScreenHost>/Script/RSECommonUI.RSECommonScreenHostLayersThe activatable widget that wraps one RPG Saga screen (a Widget Blueprint derived from RSE Common Screen Host may add a frame or animations).
Screen Layers (ScreenLayers)TMap<TSoftClassPtr<URSEScreenWidget> ,ERSECommonUILayer>(1 entries)LayersLayers of particular screen classes (subclasses included; the most derived listed class wins).

RPG Saga Engine: Content Budgets

Class URSEContentBudgetSettings (module RSEEditor), Project Settings, Project, RPG Saga Engine. Content budgets (D-048): the RSE Configurator's validation (Validate All) warns about static / skeletal meshes, textures and, optionally, materials over the budget of their category.

SettingTypeDefaultCategoryRestartDescription
Enabled (bEnabled)boolTrueBudgetsMaster switch of the budget checks in the configurator.
Categories (Categories)TArray<FRSEContentBudgetCategory>(7 entries)Budgets
Excluded Folders (ExcludedFolders)TArray<FDirectoryPath>(2 entries)BudgetsNever checked (placeholders like /Game/Characters/Mannequins, imported samples...).
Included Folders (IncludedFolders)TArray<FDirectoryPath>(3 entries)BudgetsOnly assets under these folders are checked (e.g. /Game/MyRPG).
Check Material Statistics (bCheckMaterialStatistics)boolFalseMaterialsAlso compiles base materials in the checked folders to count their instructions and texture samples. Slow on first use (shader compilation), so off by default.
Max Materials Per Validation (MaxMaterialsPerValidation)int3250MaterialsUpper limit of materials compiled per validation.

RPG Saga Engine: Content Import

Class URSEContentImportSettings (module RSEEditor), Project Settings, Project, RPG Saga Engine. Content import/export (D-053): author DataAssets in spreadsheets (CSV) or JSON and import them without code.

SettingTypeDefaultCategoryRestartDescription
AIPack Examples (AIPackExamples)int323AI PackReal rows from the project used as examples in each prompt (0 = none).
AIPack Folder (AIPackFolder)FStringSaved/AIPackAI PackWhere Export AI Pack writes the prompt packs (one folder per type plus the extra packs). Relative to the project folder.
AIPack Max Listed Values (AIPackMaxListedValues)int32400AI PackLongest list of live values (tags, Ids) written into a prompt; longer lists are cut with "... and N more".
Forbidden Terms (ForbiddenTerms)TArray<FString>(8 entries)AI PackNames and terms generated content must never use (trademarks of other games...). Listed in every self-check.
Report Folder (ReportFolder)FStringSaved/ContentImportAI PackWhere every import writes its last report and, after errors, the fix prompt (LastReport.txt, FixPrompt.md). Relative to the project folder.
Default Source Folder (DefaultSourceFolder)FStringTemplates/Content/ExampleFoldersDefault source folder shown in the configurator. Relative to the project folder or absolute.
Example Folder (ExampleFolder)FStringTemplates/Content/ExampleFoldersFull export of the project's content as a working example. Relative to the project folder.
Export Folder (ExportFolder)FStringSaved/ContentExportFoldersDefault folder of Export in the configurator. Relative to the project folder.
Root Folder (RootFolder)FDirectoryPath(set per project)FoldersBase folder of new assets for types without their own Folder (e.g. /Game/Data -> /Game/Data/Abilities).
Templates Folder (TemplatesFolder)FStringTemplates/ContentFoldersEmpty template sheets (header, hints, one commented example row per type). Relative to the project folder.
Save After Apply (bSaveAfterApply)boolTrueImportApply saves the created and changed assets (only those). Off = they stay dirty in the editor.
Validate After Apply (bValidateAfterApply)boolTrueImportApply runs IsDataValid on the touched assets and reports the problems as warnings.
Localization Namespace Prefix (LocalizationNamespacePrefix)FStringFFContentImportLocalization namespace of imported texts = prefix + "." + type name; key = row Id + "." + field path.
Max Positional Fields (MaxPositionalFields)int323ImportSmall structs of plain values are written positionally ("Fire:Weak" instead of "(Element=Fire,Affinity=Weak)") when they have at most this many fields. 0 = always named. Both forms are always accepted on import.
New Tag Roots (NewTagRoots)TArray<FString>(20 entries)ImportTag roots under which imported content may name tags that do not exist yet (story flags, variables, class, status and speaker tags...): a dry run lists them as warnings, Apply adds them to New Tag Source first (D-068). Unknown tags under any other root stay errors (elements, stats, battle modes have meaning in code or settings).
New Tag Source (NewTagSource)FStringFF_Content.iniImportTag file (in Config/Tags) that receives the tags an import creates.
Types (Types)TArray<FRSEContentTypeDef>(48 entries)TypesThe content types (sheets). Order = order of export and of the report.

RPG Saga Engine: Dialog

Class URSEDialogSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Dialog rules (Project Settings -> RPG Saga Engine -> Dialog).

SettingTypeDefaultCategoryRestartDescription
Host May Control Any Dialog (bHostMayControlAnyDialog)boolTrueCo-opThe host may also advance and answer any player's dialog (a speaker who left or is away).
Control Policy Class (ControlPolicyClass)TSoftClassPtr<URSEDialogControlPolicy>NoneCo-opWho may advance a dialog and pick its options in co-op (a Blueprint or C++ child of RSE Dialog Control Policy). Empty = the built-in rules below. Single player is never affected.
Story Choice Decider (StoryChoiceDecider)ERSEDialogChoiceDeciderHostCo-opStory choices (choices of dialog assets whose Decider is Default): who picks.
System Choice Decider (SystemChoiceDecider)ERSEDialogChoiceDeciderSpeakerCo-opPuzzle and system prompts ("Use the key?", "Go to the harbor?", generated at run time): who picks.
Vote Timeout Seconds (VoteTimeoutSeconds)float20.000000Co-opA vote ends after this long with the votes cast so far (0 = waits for every player; the host can always end it).
Auto Advance After Voice Seconds (AutoAdvanceAfterVoiceSeconds)float0.500000FlowAuto-advance wait after a voiced line's audio ends.
Auto Advance Base Seconds (AutoAdvanceBaseSeconds)float1.000000FlowAuto-advance wait after a line is fully shown: base + per character.
Auto Advance Per Character Seconds (AutoAdvancePerCharacterSeconds)float0.030000Flow
Default Fast Forward (DefaultFastForward)ERSEDialogFastForwardModeReadLinesOnlyFlow
Max Call Depth (MaxCallDepth)int328FlowDeepest nesting of Jump nodes with bReturnAfter (sub-dialogs calling sub-dialogs).
Max Steps Without Input (MaxStepsWithoutInput)int32256FlowLoop guard: nodes the runner may pass through without player input before it aborts the dialog.
Backlog Size (BacklogSize)int32100SubsystemLines kept in the backlog (history screen).
Max Concurrent Barks (MaxConcurrentBarks)int324SubsystemBarks running at once; the oldest is dropped when a new one starts.
Default Characters Per Second (DefaultCharactersPerSecond)float40.000000TextTypewriter speed when the player has not chosen one.
Default Unknown Name (DefaultUnknownName)FTextNSLOCTEXT("RSEDialog", "UnknownSpeaker", "???")TextName shown for a speaker whose name the player has not learned yet and who has no UnknownName.
Leader Variable Name (LeaderVariableName)FNameLeaderTextText variable holding the party leader's name ({Leader}). None = not provided.
Text Speed Steps (TextSpeedSteps)TArray<float>(4 entries)TextSpeeds offered in the player's options (characters per second; 0 = instant).
Text Variables (TextVariables)TMap<FName,FGameplayTag>(0 entries)TextText variables backed by story variables: {Gold} in a line shows Narrative.Var.Gold. Key = variable name used in the text, value = Narrative.Var.* tag.

RPG Saga Engine: Dialog UI

Class URSEDialogUISettings (module RSE), Project Settings, Project, RPG Saga Engine. Look and controls of the dialog presentation (Project Settings -> RPG Saga Engine -> Dialog UI).

SettingTypeDefaultCategoryRestartDescription
Additional Cue Handlers (AdditionalCueHandlers)TArray<TSoftClassPtr<URSEDialogCueHandler> >(0 entries)ClassesExtra cue handlers (a handler for a cue class replaces the built-in one for that class and its subclasses).
Dialog Widget Class (DialogWidgetClass)TSoftClassPtr<URSEScreenWidget>/Script/RSE.RSEDialogWidgetClassesDialog screen: box, choices, backlog, barks (D-052). Empty = the built-in themed screen. A Widget Blueprint derived from RSEScreenWidget replaces it and receives a RSEDialogViewModel (docs/product/custom-ui.md).
Widget ZOrder (WidgetZOrder)int3250ClassesZ-order of the dialog widget in the viewport (above the battle HUD).
Coop Host Decides Text (CoopHostDecidesText)FTextNSLOCTEXT("RSEDialogUI", "CoopHostDecides", "The host decides.")Co-opStatus line of a choice the host makes.
Coop Speaker Decides Text (CoopSpeakerDecidesText)FTextNSLOCTEXT("RSEDialogUI", "CoopSpeakerDecides", "{Player} decides.")Co-opStatus line of a choice the speaker makes ({Player}).
Coop Speaking Text (CoopSpeakingText)FTextNSLOCTEXT("RSEDialogUI", "CoopSpeaking", "{Player} is speaking.")Co-opStatus line when another player speaks ({Player}).
Coop Status Color (CoopStatusColor)FRSEUIColor(Token="Info",Alpha=1.000000,Lightness=0.084389,Chroma=0.564952,Hue=-10.903101,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Co-op
Coop Vote Text (CoopVoteText)FTextNSLOCTEXT("RSEDialogUI", "CoopVote", "Vote: {Votes} of {Voters}")Co-opStatus line of a vote ({Votes}, {Voters}).
Coop Vote Timer Text (CoopVoteTimerText)FTextNSLOCTEXT("RSEDialogUI", "CoopVoteTimer", "Vote: {Votes} of {Voters} - {Seconds} s")Co-opStatus line of a vote with its timer ({Votes}, {Voters}, {Seconds}).
Auto on Color (AutoOnColor)FRSEUIColor(Token="Positive",Alpha=1.000000,Chroma=1.000000,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors
Backlog Background Color (BacklogBackgroundColor)FRSEUIColor(Token="Primary",Alpha=0.970000,Lightness=-0.434893,Chroma=0.431964,Hue=7.769177,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors
Bark Color (BarkColor)FRSEUIColor(Token="Text",Alpha=0.950000,Lightness=0.002652,Chroma=3.155339,Hue=165.510986,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors
Bark Text Color (BarkTextColor)FRSEUIColor(Token="Primary",Alpha=1.000000,Lightness=-0.190085,Chroma=0.150423,Hue=21.873074,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors
Box Border Color (BoxBorderColor)FRSEUIColor(Token="Primary",Alpha=0.900000,Lightness=0.209728,Chroma=0.457120,Hue=3.533296,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors
Box Color (BoxColor)FRSEUIColor(Token="Primary",Alpha=0.930000,Lightness=-0.412186,Chroma=0.525066,Hue=10.617354,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))ColorsDialog box fill: a gradient from BoxTopColor (top) to BoxColor (bottom).
Box Top Color (BoxTopColor)FRSEUIColor(Token="Primary",Alpha=0.920000,Lightness=-0.242851,Chroma=0.783509,Hue=8.252986,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors
Choice Chosen Color (ChoiceChosenColor)FRSEUIColor(Token="Neutral",Alpha=1.000000,Lightness=0.009067,Chroma=0.979660,Hue=0.020606,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))ColorsOptions marked "already asked".
Choice Disabled Color (ChoiceDisabledColor)FRSEUIColor(Token="Neutral",Alpha=1.000000,Lightness=-0.108759,Chroma=1.064321,Hue=5.894447,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors
Choice Selected Background (ChoiceSelectedBackground)FRSEUIColor(Token="Primary",Alpha=0.850000,Chroma=1.000000,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors
Choice Selected Color (ChoiceSelectedColor)FRSEUIColor(Token="Accent",Alpha=1.000000,Chroma=1.000000,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors
Choice Text Color (ChoiceTextColor)FRSEUIColor(Token="Text",Alpha=1.000000,Chroma=1.000000,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors
Emphasis Color (EmphasisColor)FRSEUIColor(Token="Accent",Alpha=1.000000,Lightness=0.024543,Chroma=0.667459,Hue=-0.452705,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors
Help Text Color (HelpTextColor)FRSEUIColor(Token="Neutral",Alpha=1.000000,Chroma=1.000000,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors
Hint Color (HintColor)FRSEUIColor(Token="Warning",Alpha=1.000000,Lightness=-0.023320,Chroma=0.520770,Hue=-23.612774,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors
Inactive Portrait Tint (InactivePortraitTint)FLinearColor(R=0.450000,G=0.450000,B=0.500000,A=1.000000)ColorsMultiplies the portrait of the speaker who is not talking (a darkening factor, not a style color: it stays a plain color).
Letterbox Color (LetterboxColor)FRSEUIColor(Token="Black",Alpha=1.000000,Chroma=1.000000,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors
Named Colors (NamedColors)TMap<FName,FRSEUIColor>(3 entries)Colors<color=Name> styles: the text names a style, the look lives here.
Name Plate Color (NamePlateColor)FRSEUIColor(Token="Primary",Alpha=0.970000,Lightness=-0.303408,Chroma=0.664660,Hue=7.087053,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors
Narrator Text Color (NarratorTextColor)FRSEUIColor(Token="Text",Alpha=1.000000,Lightness=-0.039856,Chroma=4.377486,Hue=-11.871398,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors
Placeholder Portrait Tint (PlaceholderPortraitTint)FLinearColor(R=0.350000,G=0.350000,B=0.350000,A=1.000000)ColorsPortrait placeholder when a speaker has no texture: the speaker's name color (a data color) times this factor (a plain color).
Shake Color (ShakeColor)FRSEUIColor(Token="Warning",Alpha=1.000000,Lightness=0.039194,Chroma=0.506467,Hue=-16.092417,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors<shake> / <wave> (drawn as a colored style for now; animated effects come later).
Shout Color (ShoutColor)FRSEUIColor(Token="Negative",Alpha=1.000000,Lightness=0.069764,Chroma=0.625954,Hue=9.481684,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors
Text Color (TextColor)FRSEUIColor(Token="Text",Alpha=1.000000,Lightness=0.006938,Chroma=0.986032,Hue=0.001201,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors
Wave Color (WaveColor)FRSEUIColor(Token="Info",Alpha=1.000000,Lightness=0.084389,Chroma=0.564952,Hue=-10.903101,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors
Whisper Color (WhisperColor)FRSEUIColor(Token="Neutral",Alpha=1.000000,Lightness=0.044332,Chroma=1.182665,Hue=3.650277,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors
Camera Cues Outside Cinematic (bCameraCuesOutsideCinematic)boolFalseCuesCamera cues also work outside Cinematic dialogs (the recommended default is Cinematic only).
Camera Shots (CameraShots)TMap<FGameplayTag,FRSEDialogCameraShot>(0 entries)CuesDialog.Shot.* -> framing. A camera cue with an unknown shot uses DefaultShot.
Default Shot (DefaultShot)FRSEDialogCameraShot(Distance=250.000000,TargetHeight=60.000000,CameraHeight=20.000000,YawOffset=25.000000,FieldOfView=50.000000,SpreadDistanceScale=1.200000)Cues
Emote Balloons (EmoteBalloons)TMap<FGameplayTag,FText>(0 entries)CuesEmote.* -> balloon glyph shown above the speaker ("!", "?", "..."). A speaker's emote set may override it.
Player Speaker Tags (PlayerSpeakerTags)FGameplayTagContainer()CuesSpeakers played by the possessed pawn (the party leader's speaker tags), for cues and barks.
Screen Fx (ScreenFx)TMap<FGameplayTag,FRSEDialogScreenFxStyle>(0 entries)CuesDialog.Fx.* -> what it does.
Advance Keys (AdvanceKeys)TArray<FKey>(4 entries)InputCompletes the line, then continues. Also confirms a choice.
Auto Advance Keys (AutoAdvanceKeys)TArray<FKey>(2 entries)Input
Backlog Keys (BacklogKeys)TArray<FKey>(2 entries)Input
Click to Advance (bClickToAdvance)boolTrueInputA mouse click on the dialog box advances.
Cancel Keys (CancelKeys)TArray<FKey>(3 entries)InputPicks the choice's cancel option; closes the backlog.
Down Keys (DownKeys)TArray<FKey>(4 entries)Input
Fast Forward Keys (FastForwardKeys)TArray<FKey>(2 entries)InputHeld: fast-forwards through lines already read (URSEDialogSettings::DefaultFastForward).
Skip Scene Keys (SkipSceneKeys)TArray<FKey>(2 entries)InputSkips a skippable scene (bSkippable) up to its next choice.
Up Keys (UpKeys)TArray<FKey>(4 entries)Input
Backlog Size (BacklogSize)FVector2D(X=900.000000,Y=560.000000)Layout
Balloon World Height (BalloonWorldHeight)float150.000000Layout
Bark Fallback Anchor (BarkFallbackAnchor)FVector2D(X=0.030000,Y=0.200000)LayoutBarks whose speaker has no actor in the world: normalized screen point where they stack.
Bark Max Distance (BarkMaxDistance)float2500.000000LayoutBarks farther than this from the camera are not shown.
Bark Max Width (BarkMaxWidth)float320.000000Layout
Bark World Height (BarkWorldHeight)float130.000000LayoutWorld height above the speaker's origin where barks and emote balloons appear.
Box Border Thickness (BoxBorderThickness)float2.000000Layout
Box Bottom Margin (BoxBottomMargin)float40.000000Layout
Box Min Height (BoxMinHeight)float130.000000Layout
Box Padding (BoxPadding)float18.000000Layout
Box Width Fraction (BoxWidthFraction)float0.700000LayoutWidth of the dialog box as a fraction of the screen.
Portraits in Cinematic (bPortraitsInCinematic)boolFalseLayoutPortraits in Cinematic dialogs (faces are on camera there).
Choice Width (ChoiceWidth)float560.000000Layout
Cinematic Box Min Height (CinematicBoxMinHeight)float96.000000Layout
Cinematic Box Width Fraction (CinematicBoxWidthFraction)float0.600000LayoutCinematic dialogs use a thinner box.
Inactive Portrait Scale (InactivePortraitScale)float0.900000LayoutThe portrait of the speaker who is not talking is scaled by this.
Letterbox Height Fraction (LetterboxHeightFraction)float0.110000LayoutLetterbox bar height as a fraction of the screen height (Cinematic).
Portrait Size (PortraitSize)FVector2D(X=180.000000,Y=180.000000)Layout
Media Panel Full Screen Padding (MediaPanelFullScreenPadding)FMargin()Layout|Media PanelFull-screen layout: space kept free around the clip (the dialog box stays readable below).
Media Panel Margin (MediaPanelMargin)FVector2D(X=48.000000,Y=48.000000)Layout|Media PanelSide layout: the panel's distance from the top screen corner opposite the speaker.
Media Panel Size (MediaPanelSize)FVector2D(X=560.000000,Y=315.000000)Layout|Media PanelSize of a line's media panel in the Side layout (D-075; 16:9 clips fit 560 x 315).
Balloon Font Size (BalloonFontSize)int3230Text
Bark Font Size (BarkFontSize)int3215Text
Reserve Unrevealed Text (bReserveUnrevealedText)boolTrueTextKeep unrevealed characters laid out (invisible) so words never jump lines while typing.
Choice Font Size (ChoiceFontSize)int3218Text
Dialog Font (DialogFont)TSoftObjectPtr<UObject>NoneTextFont asset (composite, with culture fallbacks). Empty = the UI theme's body font (UI Theme -> Fonts -> Body).
Emphasis Typeface (EmphasisTypeface)FNameItalicTextTypeface used for <em> and the narrator.
Hint Font Size (HintFontSize)int3213Text
Line Font Size (LineFontSize)int3220Text
Name Font Size (NameFontSize)int3218Text
Regular Typeface (RegularTypeface)FNameRegularText
Shout Size Scale (ShoutSizeScale)float1.200000Text<shout> text size relative to the line size.
Shout Typeface (ShoutTypeface)FNameBoldText
Title Card Font Size (TitleCardFontSize)int3234Text
Whisper Size Scale (WhisperSizeScale)float0.900000Text<whisper> text size relative to the line size.
Advance Indicator (AdvanceIndicator)FTextNSLOCTEXT("RSEDialogUI", "AdvanceIndicator", "▼")TextsIndicator while the line is complete and more follows / at the last line.
Auto Action Format (AutoActionFormat)FTextNSLOCTEXT("RSEDialogUI", "AutoAction", "Auto {AutoState}")TextsAuto-advance prompt. Argument: {AutoState} (AutoOnText / AutoOffText).
Auto Off Text (AutoOffText)FTextNSLOCTEXT("RSEDialogUI", "AutoOff", "off")Texts
Auto on Text (AutoOnText)FTextNSLOCTEXT("RSEDialogUI", "AutoOn", "ON")Texts
Backlog Choice Format (BacklogChoiceFormat)FTextNSLOCTEXT("RSEDialogUI", "BacklogChoiceFormat", "» {Option}")TextsA chosen option in the backlog. Argument: {Option}.
Backlog Title (BacklogTitle)FTextNSLOCTEXT("RSEDialogUI", "BacklogTitle", "Log")Texts
Chosen Marker (ChosenMarker)FTextNSLOCTEXT("RSEDialogUI", "ChosenMarker", "✓")Texts
Continue Action Text (ContinueActionText)FTextNSLOCTEXT("RSEDialogUI", "ContinueAction", "Continue")TextsKey prompts of the help bar under the box (the keys are those of the active device).
Fast Action Text (FastActionText)FTextNSLOCTEXT("RSEDialogUI", "FastAction", "Fast")Texts
Key Separator (KeySeparator)FTextNSLOCTEXT("RSEDialogUI", "KeySeparator", " / ")TextsSeparator between the keyboard and gamepad key names in the help bar.
Locked Marker (LockedMarker)FTextNSLOCTEXT("RSEDialogUI", "LockedMarker", "✕ ")Texts
Log Action Text (LogActionText)FTextNSLOCTEXT("RSEDialogUI", "LogAction", "Log")Texts
Media Panel Skip Hint (MediaPanelSkipHint)FTextNSLOCTEXT("RSEDialogUI", "MediaSkipHint", "Confirm: skip")TextsHint under a clip the line waits for.
Selected Marker (SelectedMarker)FTextNSLOCTEXT("RSEDialogUI", "SelectedMarker", "▶ ")Texts
Skip Action Text (SkipActionText)FTextNSLOCTEXT("RSEDialogUI", "SkipAction", "Skip scene")TextsShown only when the scene can be skipped.
Unselected Marker (UnselectedMarker)FTextNSLOCTEXT("RSEDialogUI", "UnselectedMarker", " ")Texts
Balloon Pop Seconds (BalloonPopSeconds)float0.150000TimingPop-in scale time of an emote balloon.
Balloon Seconds (BalloonSeconds)float1.400000Timing
Bark Min Seconds (BarkMinSeconds)float2.500000TimingBarks stay at least this long.
Blip Every Characters (BlipEveryCharacters)int323TimingOne blip every N revealed characters (unvoiced lines with a speaker blip sound).
Camera Return Blend Seconds (CameraReturnBlendSeconds)float0.500000TimingBlend back to the gameplay camera after a Cinematic dialog.
Close Seconds (CloseSeconds)float0.150000Timing
Fast Forward Line Seconds (FastForwardLineSeconds)float0.080000TimingTime each read line stays while fast-forwarding.
Indicator Pulse Seconds (IndicatorPulseSeconds)float0.800000TimingPulse period of the advance indicator.
Letterbox Seconds (LetterboxSeconds)float0.400000Timing
Open Seconds (OpenSeconds)float0.150000TimingBox open / close animation.
Title Card Fade Seconds (TitleCardFadeSeconds)float0.500000TimingTitle card of a Cinematic scene: fade in + hold + fade out. The first line waits for it.
Title Card Hold Seconds (TitleCardHoldSeconds)float1.800000Timing

RPG Saga Engine: Difficulty

Class URSEDifficultySettings (module RSECore), Project Settings, Project, RPG Saga Engine. Adaptive difficulty (CLAUDE.md 2.8, D-007).

SettingTypeDefaultCategoryRestartDescription
Dead Zone (DeadZone)float0.050000AdjustmentAverage scores within 0.5 +- DeadZone change nothing (the player is on par).
Gain (Gain)float0.200000AdjustmentIntelligence change per point of average score away from 0.5 ("on par"), before the step limits.
Max Step Down (MaxStepDown)float0.030000AdjustmentLargest drop per battle. Smaller than the rise on purpose (D-007: slow decrease, anti-exploit).
Max Step Up (MaxStepUp)float0.050000AdjustmentLargest rise per battle.
Min Battles to Adjust (MinBattlesToAdjust)int323AdjustmentNo adjustment until the window holds at least this many battles (one lucky battle changes nothing).
Window Size (WindowSize)int325AdjustmentBattles remembered per mode; the adjustment follows their weighted average score.
Record Escapes (bRecordEscapes)boolFalseDefeatWhether escaping an ATB battle is recorded. Off: escapes are ignored (the player may just skip a fight).
Defeat Score (DefeatScore)float0.000000DefeatScore of a defeat.
Escape Score (EscapeScore)float0.350000DefeatScore of an escape when recorded.
Retry Weight Falloff (RetryWeightFalloff)float0.500000DefeatWeight of a defeat in the average is RetryWeightFalloff ^ retries: repeated quick losses count less, so losing on purpose cannot drag the AI down (D-007 anti-exploit).
Enabled (bEnabled)boolTrueGeneralOff: intelligence never changes and each encounter uses its own Intelligence value.
Max Intelligence (MaxIntelligence)float1.000000Limits
Min Intelligence (MinIntelligence)float0.150000LimitsGlobal bounds of the adaptive value. Encounters narrow them further (MinIntelligence / MaxIntelligence).
ATB (ATB)FRSEDifficultyModeTuning(StartIntelligence=0.500000,TargetTurnsPerEnemy=4.000000,WorstTurnsPerEnemy=10.000000)Modes
Tactics (Tactics)FRSEDifficultyModeTuning(StartIntelligence=0.500000,TargetTurnsPerEnemy=4.000000,WorstTurnsPerEnemy=10.000000)Modes
Damage Weight (DamageWeight)float1.000000ScoreWeight of damage taken in a victory's score.
Fallen Weight (FallenWeight)float1.000000ScoreWeight of fallen player units in a victory's score.
Retry Penalty (RetryPenalty)float0.100000ScoreScore lost per retry before a victory (a win after several defeats was hard).
Target Damage Taken Share (TargetDamageTakenShare)float0.350000ScoreDamage taken, as a share of the party's total max HP, that counts as "on par" (score 0.5).
Target Fallen Share (TargetFallenShare)float0.100000ScoreShare of player units that fell (at least once) that counts as "on par".
Tempo Weight (TempoWeight)float1.000000ScoreWeight of tempo (player turns per opposing unit) in a victory's score.
Worst Damage Taken Share (WorstDamageTakenShare)float1.000000ScoreDamage taken share that counts as a full struggle (score 0). Must exceed the target.
Worst Fallen Share (WorstFallenShare)float0.750000ScoreShare of fallen player units that counts as a full struggle. Must exceed the target.

RPG Saga Engine: Economy

Class URSEEconomySettings (module RSECore), Project Settings, Project, RPG Saga Engine. Economy rules (D-042, docs/design/economy.md): the currency, selling, inns and the money cap.

SettingTypeDefaultCategoryRestartDescription
Battle Money Cap (BattleMoneyCap)FRuntimeFloatCurve(EditorCurveData=(Keys=((Time=1.000000,Value=600.000000),(Time=10.000000,Value=1000.000000),(Time=24.000000,Value=2500.000000),(Time=38.000000,Value=5000.000000...Battle MoneyMost money one battle gives (Y) for the level of its strongest defeated enemy (X). Linear between the keys, flat beyond the ends. The defaults sit above the starter campaign's boss rewards of each zone.
Cap Battle Money (bCapBattleMoney)boolTrueBattle MoneyOne battle never gives more money than Battle Money Cap allows for its strongest defeated enemy's level. Loot tables are shared between zones: a late boss's table on an early enemy would otherwise pay a fortune.
Currency Name (CurrencyName)FTextNSLOCTEXT("RSEEconomy", "CurrencyName", "Crowns")CurrencyName of the one currency, in menus ("Crowns").
Currency Symbol (CurrencySymbol)FTextNSLOCTEXT("RSEEconomy", "CurrencySymbol", "cr")CurrencyShort symbol shown after amounts ("cr").
Max Money (MaxMoney)int329999999CurrencyThe party never holds more than this; extra money is lost.
Money Format (MoneyFormat)FTextNSLOCTEXT("RSEEconomy", "MoneyFormat", "{Amount} {Symbol}")CurrencyHow an amount is written. {Amount} = the number, {Symbol} = CurrencySymbol, {Name} = CurrencyName.
Starting Money (StartingMoney)int32200CurrencyMoney of a new game (and of saves made before the economy existed).
Inn Revives KO (bInnRevivesKO)boolTrueInnsResting also revives fallen members. Off = KO members stay KO (a revive item or save point is needed).
Default Inn Cost (DefaultInnCost)int3250InnsPrice of a night when the Rest At Inn effect does not set one.
Buy Price Multiplier (BuyPriceMultiplier)float1.000000ShopsBuy prices of every shop are multiplied by this (chapter inflation, a rules profile's "hard" economy).
Sell Ratio (SellRatio)float0.500000ShopsSell price = buy price x this, rounded down, unless the item sets its own sell price.

RPG Saga Engine: Economy UI

Class URSEEconomyUISettings (module RSE), Project Settings, Project, RPG Saga Engine. Presentation of the economy (D-042): the shop screen, chests, the inn fade and the money shown in menus.

SettingTypeDefaultCategoryRestartDescription
Chest Empty Text (ChestEmptyText)FTextNSLOCTEXT("RSEEconomyUI", "ChestEmpty", "It\'s empty.")ChestOpened again, or opened with nothing inside.
Chest Full Text (ChestFullText)FTextNSLOCTEXT("RSEEconomyUI", "ChestFull", "You cannot carry any more.")Chest
Chest Item Format (ChestItemFormat)FTextNSLOCTEXT("RSEEconomyUI", "ChestItemFormat", "Found {Item} ×{Count}.")ChestPickup line per item: {Item}, {Count}.
Chest Key Used Format (ChestKeyUsedFormat)FTextNSLOCTEXT("RSEEconomyUI", "ChestKeyUsedFormat", "Used the {Item}.")ChestThe key was used up: {Item}.
Chest Locked Text (ChestLockedText)FTextNSLOCTEXT("RSEEconomyUI", "ChestLocked", "It\'s locked.")ChestLocked and the chest sets no lines of its own.
Chest Money Format (ChestMoneyFormat)FTextNSLOCTEXT("RSEEconomyUI", "ChestMoneyFormat", "Found {Money}.")ChestPickup line for money: {Money}.
Chest Open Seconds (ChestOpenSeconds)float0.600000ChestSeconds the lid takes to open.
Chest Placeholder Mesh (ChestPlaceholderMesh)TSoftObjectPtr<UStaticMesh>/Engine/BasicShapes/Cube.CubeChestPlaceholder chest body when the chest has no mesh (engine cube by default).
Chest Prompt Text (ChestPromptText)FTextNSLOCTEXT("RSEEconomyUI", "ChestPrompt", "Open")ChestPrompt of a chest without its own PromptText.
Inn Fade Color (InnFadeColor)FLinearColor(R=0.000000,G=0.000000,B=0.000000,A=1.000000)Inn
Inn Fade in Seconds (InnFadeInSeconds)float0.800000Inn
Inn Fade Out Seconds (InnFadeOutSeconds)float0.800000Inn--- Inn ---
Inn Hold Seconds (InnHoldSeconds)float1.200000InnBlack screen between the fades.
Party Menu Money Format (PartyMenuMoneyFormat)FTextNSLOCTEXT("RSEEconomyUI", "PartyMenuMoneyFormat", "{Money}")MenusParty menu header: {Money} (formatted with the currency).
Results Money Format (ResultsMoneyFormat)FTextNSLOCTEXT("RSEEconomyUI", "ResultsMoneyFormat", "{Term.Money}: +{Money}")MenusResults screen line: {Money}.
Quantity Big Step (QuantityBigStep)int3210ShopQuantity step of Left / Right in the quantity selector (Up / Down step by 1).
Shop Backdrop Color (ShopBackdropColor)FRSEUIColor(Token="Primary",Alpha=0.700000,Lightness=-0.526921,Chroma=0.679858,Hue=0.163523,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Shop
Shop Height (ShopHeight)float600.000000Shop
Shop List Width (ShopListWidth)float460.000000ShopWidth of the item list; the details take the rest.
Shop Widget Class (ShopWidgetClass)TSoftClassPtr<URSEScreenWidget>NoneShopShop screen (D-052). Empty = the built-in themed screen. A Widget Blueprint derived from RSEScreenWidget replaces it and receives a RSEShopViewModel (docs/product/custom-ui.md).
Shop Width (ShopWidth)float1000.000000Shop
Shop ZOrder (ShopZOrder)int3255ShopZ-order in the viewport (above the HUDs and the party menu).
All Category Text (AllCategoryText)FTextNSLOCTEXT("RSEEconomyUI", "AllCategory", "All")Shop|Text
Bought Format (BoughtFormat)FTextNSLOCTEXT("RSEEconomyUI", "BoughtFormat", "Bought {Item} ×{Count} for {Money}.")Shop|TextAfter a purchase: {Item}, {Count}, {Money} (the total).
Buy Action Text (BuyActionText)FTextNSLOCTEXT("RSEEconomyUI", "BuyAction", "Buy")Shop|Text
Buy Tab Text (BuyTabText)FTextNSLOCTEXT("RSEEconomyUI", "BuyTab", "Buy")Shop|Text
Cannot Equip Text (CannotEquipText)FTextNSLOCTEXT("RSEEconomyUI", "CannotEquip", "Cannot equip")Shop|TextComparison line of a member that cannot wear the item.
Category Action Text (CategoryActionText)FTextNSLOCTEXT("RSEEconomyUI", "CategoryAction", "Category")Shop|Text
Compare Header (CompareHeader)FTextNSLOCTEXT("RSEEconomyUI", "CompareHeader", "{Term.Party}")Shop|TextEquipment comparison heading.
Consumables Category Text (ConsumablesCategoryText)FTextNSLOCTEXT("RSEEconomyUI", "ConsumablesCategory", "{Term.Items}")Shop|Text
Documents Category Text (DocumentsCategoryText)FTextNSLOCTEXT("RSEEconomyUI", "DocumentsCategory", "Documents")Shop|Text
Equipment Category Text (EquipmentCategoryText)FTextNSLOCTEXT("RSEEconomyUI", "EquipmentCategory", "{Term.Equipment}")Shop|Text
Inventory Full Text (InventoryFullText)FTextNSLOCTEXT("RSEEconomyUI", "InventoryFull", "You cannot carry any more of that.")Shop|Text
Key Items Category Text (KeyItemsCategoryText)FTextNSLOCTEXT("RSEEconomyUI", "KeyItemsCategory", "{Term.KeyItems}")Shop|Text
Leave Action Text (LeaveActionText)FTextNSLOCTEXT("RSEEconomyUI", "LeaveAction", "Leave")Shop|Text
No Change Text (NoChangeText)FTextNSLOCTEXT("RSEEconomyUI", "NoChange", "No change")Shop|TextComparison line when nothing changes.
Not Enough Money Text (NotEnoughMoneyText)FTextNSLOCTEXT("RSEEconomyUI", "NotEnoughMoney", "Not enough money.")Shop|Text
Nothing for Sale Text (NothingForSaleText)FTextNSLOCTEXT("RSEEconomyUI", "NothingForSale", "Nothing for sale right now.")Shop|Text
Nothing to Sell Text (NothingToSellText)FTextNSLOCTEXT("RSEEconomyUI", "NothingToSell", "Nothing to sell.")Shop|Text
Owned Format (OwnedFormat)FTextNSLOCTEXT("RSEEconomyUI", "OwnedFormat", "Owned: {Count}")Shop|TextDetails: how many the party holds. {Count}.
Quantity Action Text (QuantityActionText)FTextNSLOCTEXT("RSEEconomyUI", "QuantityAction", "Quantity")Shop|Text
Quantity Format (QuantityFormat)FTextNSLOCTEXT("RSEEconomyUI", "QuantityFormat", "Quantity: ◀ {Count} ▶")Shop|TextQuantity selector: {Count}.
Sell Action Text (SellActionText)FTextNSLOCTEXT("RSEEconomyUI", "SellAction", "Sell")Shop|Text
Sell Tab Text (SellTabText)FTextNSLOCTEXT("RSEEconomyUI", "SellTab", "Sell")Shop|Text
Sold Format (SoldFormat)FTextNSLOCTEXT("RSEEconomyUI", "SoldFormat", "Sold {Item} ×{Count} for {Money}.")Shop|TextAfter a sale: {Item}, {Count}, {Money}.
Sold Out Text (SoldOutText)FTextNSLOCTEXT("RSEEconomyUI", "SoldOut", "Sold out")Shop|Text
Stock Format (StockFormat)FTextNSLOCTEXT("RSEEconomyUI", "StockFormat", "In stock: {Count}")Shop|TextDetails: stock left of a limited entry. {Count}.
Switch Tab Action Text (SwitchTabActionText)FTextNSLOCTEXT("RSEEconomyUI", "SwitchTabAction", "Buy / Sell")Shop|Text
Total Format (TotalFormat)FTextNSLOCTEXT("RSEEconomyUI", "TotalFormat", "Total: {Money}")Shop|TextQuantity selector: {Money} = the total.

RPG Saga Engine: Encounters

Class URSEEncounterSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Random encounters v2 (D-063, docs/design/random-encounters.md): generated groups, encounter rate effects, the player's battle frequency option, contact initiative and the grace periods of visible enemies.

SettingTypeDefaultCategoryRestartDescription
Allow Back Attack (bAllowBackAttack)boolTrueContactA chasing enemy that touches the party from behind starts a Back Attack (the enemies' gauges start filled).
Allow Preemptive (bAllowPreemptive)boolTrueContactTouching an unaware enemy from behind starts a Preemptive battle (the party's ATB gauges start filled).
Behind Half Angle (BehindHalfAngle)float60.000000ContactHalf angle of the "behind" cone of a pawn (0 = exactly behind, 90 = the whole back half).
Flee Grace Seconds (FleeGraceSeconds)float6.000000ContactAfter the party flees a visible group, the group ignores the party for this long (no immediate re-contact).
Initiative Gauge Fraction (InitiativeGaugeFraction)float1.000000ContactATB gauge (share of full) of the side that has the initiative; 1 = ready at once.
Post Battle Grace Seconds (PostBattleGraceSeconds)float2.000000ContactAfter any battle, no visible enemy may start a battle for this long.
Surprised Gauge Fraction (SurprisedGaugeFraction)float0.000000ContactATB gauge (share of full) of the surprised side.
Frequency Affects Visible Enemies (bFrequencyAffectsVisibleEnemies)boolTrueFrequencyThe frequency option also changes how many visible enemy groups spawners place.
Default Frequency Index (DefaultFrequencyIndex)int321FrequencyThe level a new player starts with (index into Frequency Levels).
Frequency Levels (FrequencyLevels)TArray<FRSEEncounterFrequencyLevel>(3 entries)FrequencyThe choices of the "Battle frequency" option, in menu order.
Default Enemy Team (DefaultEnemyTeam)FGameplayTag(TagName="Team.Enemy")Generated GroupsEnemy side of generated groups whose pool leaves it empty (global).
Default Player Team (DefaultPlayerTeam)FGameplayTag(TagName="Team.Player")Generated GroupsPlayer side of generated groups whose pool leaves it empty (global).
Elite Chance Multiplier (EliteChanceMultiplier)float1.000000Generated GroupsMultiplies every pool's elite chance (0 = no elite groups).
Max Group Size (MaxGroupSize)int326Generated GroupsMost enemies a generated group may have, whatever its pool says (the ATB stage has a limited number of slots).
Multiply Different Sources (bMultiplyDifferentSources)boolFalseRate EffectsEffects of different sources multiply each other. Off: a new effect replaces every active one (classic Repel / Lure).
Rate Scales Enemy Detection (bRateScalesEnemyDetection)boolTrueRate EffectsVisible enemies see and hear less while the rate is below 1 (detection radius x rate; 0 = they never notice the party).
Max Active Effects (MaxActiveEffects)int324Rate EffectsMost rate effects active at once (the oldest ones end first).
Max Rate Multiplier (MaxRateMultiplier)float5.000000Rate EffectsThe total multiplier (effects x traits x player frequency) never goes above this.
Same Source Stacking (SameSourceStacking)ERSEEncounterRateStackingRefreshRate EffectsWhat a rate effect does to an active one of the same source (same item or ability).
Trait Rate Multipliers (TraitRateMultipliers)TMap<FGameplayTag,float>(2 entries)Rate EffectsPassive traits (Trait.* tags granted by the equipment of the party's battle formation, their statuses or Pacts) that multiply the encounter rate, e.g. Trait.Encounter.Half -> 0.5. Each trait counts once, however many members have it.
World Step Length (WorldStepLength)float100.000000Rate EffectsDistance walked that counts as one step for rate effect durations and step-based respawns, everywhere in the world (global).

RPG Saga Engine: Encounters (World)

Class URSEEncounterPresentationSettings (module RSE), Project Settings, Project, RPG Saga Engine. Visible enemies in the world (D-063, docs/design/random-encounters.md): update rates, sleeping far from the player, the placeholder body, the alert above the leader and the debug colors.

SettingTypeDefaultCategoryRestartDescription
Alert Color (AlertColor)FLinearColor(R=1.000000,G=0.850000,B=0.100000,A=1.000000)Alert
Alert Height (AlertHeight)float40.000000AlertHeight of the alert above the top of the capsule.
Alert Text Size (AlertTextSize)float60.000000AlertWorld size of the alert text.
Default Alert Text (DefaultAlertText)FTextNSLOCTEXT("RSEEncounterPresentation", "Alert", "!")AlertAlert text when a behavior sets none.
Capsule Half Height (CapsuleHalfHeight)float88.000000Body
Capsule Radius (CapsuleRadius)float34.000000Body--- Body ---
Follower Catch Up (FollowerCatchUp)float1.100000BodyFollowers walk this much faster than their leader, to keep up after turns.
Follower Spacing (FollowerSpacing)float140.000000BodyFollowers keep this distance behind the leader.
Max Followers (MaxFollowers)int322BodyMost followers shown behind a leader (the rest of the group is only in the battle).
Placeholder Mesh (PlaceholderMesh)TSoftObjectPtr<UStaticMesh>/Engine/BasicShapes/Cylinder.CylinderBodyShown while the enemy has no animated appearance (its character's Appearance, D-046).
Placeholder Scale (PlaceholderScale)FVector(X=0.600000,Y=0.600000,Z=1.700000)Body
Turn Rate (TurnRate)float540.000000BodyHow fast enemies turn toward where they walk.
Debug Chase Color (DebugChaseColor)FColor(B=40,G=60,R=255,A=255)Debug
Debug Hearing Color (DebugHearingColor)FColor(B=255,G=180,R=80,A=255)Debug
Debug Segments (DebugSegments)int3224DebugSegments of the debug circles and cones.
Debug Sight Color (DebugSightColor)FColor(B=40,G=200,R=255,A=255)Debug--- Debug (RSE.Encounter.Debug) ---
Acceptance Radius (AcceptanceRadius)float50.000000UpdatesDistance at which a move counts as arrived.
Activation Check Interval (ActivationCheckInterval)float1.000000UpdatesHow often spawners check the explorer's distance to wake or put their groups to sleep.
Activation Radius (ActivationRadius)float5000.000000UpdatesGroups farther than this from the explorer sleep: no thinking, no movement (Steam Deck budget). 0 = never sleep.
Use Navigation (bUseNavigation)boolTrueUpdatesMoves use the navigation mesh when the map has one; without it (or off) enemies walk straight to their target.
Step Sample Interval (StepSampleInterval)float0.250000UpdatesHow often the world step counter (rate effect durations, step respawns) samples the explorer.
Think Interval (ThinkInterval)float0.200000UpdatesHow often a visible enemy decides what to do (detection, chase, give up). No per-frame tick.

RPG Saga Engine: Exploration

Class URSEExplorationSettings (module RSE), Project Settings, Project, RPG Saga Engine. Exploration (D-026, D-113): input assets, movement, the exploration camera (tactical or third person) and the hand-off to battles.

SettingTypeDefaultCategoryRestartDescription
ATBEnd Check Interval (ATBEndCheckInterval)float0.100000Battle TransitionHow often a running ATB battle is checked for the player leaving it.
Battle Start During Story (BattleStartDuringStory)ERSEBattleStartDuringStoryWaitBattle TransitionD-120: what a battle start does while a story scene or a blocking dialog is on screen. Every start path asks the battle start gate (encounter triggers, roaming contact, Free Tactics detection, the Start Battle effect, dev commands).
Hide Explorer During Tactics (bHideExplorerDuringTactics)boolTrueBattle TransitionHide the explorer (and its collision) during Tactics battles, so it does not stand on the grid.
Return on Interact (bReturnOnInteract)boolTrueBattle TransitionInteract skips the wait after a Tactics battle.
Camera Blend Time (CameraBlendTime)float0.600000Battle TransitionBlend between the exploration camera and the tactical camera, both ways.
Tactics Camera Pawn Class (TacticsCameraPawnClass)TSoftClassPtr<ARSETacticsCameraPawn>/Script/RSE.RSETacticsCameraPawnBattle TransitionCamera pawn possessed during Tactics battles started from exploration.
Tactics Return Delay (TacticsReturnDelay)float2.500000Battle TransitionSeconds after a Tactics battle's result is shown before returning to exploration. 0 = wait for Interact.
Clear Battle Area (bClearBattleArea)boolTrueBattle Transition|Clear Battle AreaBattles on the live map clear their area while they run: the explorer, the visible group that started the battle and the chosen actors on the stage or in the battle camera's view are hidden (no collision, no movement) and come back afterwards. A defeated group despawns as usual (D-063).
Hide Explorer During Classic (bHideExplorerDuringClassic)boolTrueBattle Transition|Clear Battle AreaHide the explorer during classic (ATB / turn-based) battles: the party stands on the stage instead.
Hide NPCs (bHideNPCs)boolTrueBattle Transition|Clear Battle AreaHide NPCs in the battle area or the battle camera's view.
Hide Roaming Enemies (bHideRoamingEnemies)boolTrueBattle Transition|Clear Battle AreaHide other visible enemies in the battle area or the battle camera's view.
Hide Source Group (bHideSourceGroup)boolTrueBattle Transition|Clear Battle AreaHide the whole visible group whose contact started the battle, wherever it stands.
Clear Delay (ClearDelay)float0.150000Battle Transition|Clear Battle AreaSeconds after the battle starts before the area is cleared: the camera blend leaves the explorer first. 0 = at once.
Clear Radius (ClearRadius)float800.000000Battle Transition|Clear Battle AreaAdded to the room the battle's formation needs: candidates closer than that to the battle's center are hidden.
Clear View Distance (ClearViewDistance)float6000.000000Battle Transition|Clear Battle AreaCandidates the battle camera sees closer than this are hidden too (0 = only the area).
Clear View Margin (ClearViewMargin)float8.000000Battle Transition|Clear Battle AreaThe camera's view is widened by this on every side (an actor at the frame's edge still shows).
Extra Classes to Hide (ExtraClassesToHide)TArray<TSoftClassPtr<AActor> >(0 entries)Battle Transition|Clear Battle AreaOther actor classes hidden the same way (animals, props that move, your own actors).
Keep Visible Tag (KeepVisibleTag)FNameRSE.KeepInBattleBattle Transition|Clear Battle AreaActors with this tag are never hidden (a guard that watches the fight, a scripted witness). None = no exception.
Camera Style (CameraStyle)ERSEExplorationCameraStyleTacticalCameraD-113: the party RPG camera (Tactical: high, tactical angle, zoom, rotation around the party, occluders fade) or the classic third person camera (D-026, the values below). A level may override it (RSE Exploration Camera actor); Interior Volumes still use their close profiles.
Tactical Camera (TacticalCamera)FRSETacticalCameraSettings(MinDistance=700.000000,MaxDistance=2600.000000,StartDistance=1600.000000,ZoomStep=220.000000,bZoomStepIsRelative=True,ZoomSmoothSpeed=8.000000,PitchAtMinDistan...Camera|TacticalD-113: the tactical camera (Camera Style = Tactical).
Camera Collision (bCameraCollision)boolTrueCamera|Third PersonThird person: the camera is pulled in front of walls (its collision probe). The tactical camera never collides.
Enable Camera Lag (bEnableCameraLag)boolTrueCamera|Third Person
Invert Look Y (bInvertLookY)boolFalseCamera|Third Person
Camera Distance (CameraDistance)float480.000000Camera|Third PersonDistance from the character to the camera (third person; also the start of an interior profile's blend).
Camera Lag Speed (CameraLagSpeed)float10.000000Camera|Third PersonHigher follows the character more tightly.
Camera Probe Size (CameraProbeSize)float12.000000Camera|Third PersonRadius of the probe that pulls the camera in front of walls.
Camera Rotation Lag Speed (CameraRotationLagSpeed)float0.000000Camera|Third Person0 = the camera turns instantly with the input.
Camera Target Offset (CameraTargetOffset)FVector(X=0.000000,Y=0.000000,Z=60.000000)Camera|Third PersonPoint the camera looks at, relative to the character's origin (height above the capsule center).
Default Pitch (DefaultPitch)float-15.000000Camera|Third PersonCamera pitch when exploration starts (negative looks down).
Field Of View (FieldOfView)float70.000000Camera|Third Person
Look Sensitivity (LookSensitivity)FVector2D(X=1.000000,Y=1.000000)Camera|Third PersonDegrees per unit of Look input (mouse counts or scaled stick), X = yaw, Y = pitch.
Max Pitch (MaxPitch)float15.000000Camera|Third Person
Min Pitch (MinPitch)float-60.000000Camera|Third Person
Recover from Falls (bRecoverFromFalls)boolTrueFall RecoveryA safety net for gaps in a level's collision: an explorer (the leader or a visible party member) that falls for too long, ends up under the terrain, below the level's Kill Z or outside its map bounds is put back where it last stood on solid ground. Nothing happens during battles, and only where the explorer really lost its footing.
Recover from Under Terrain (bRecoverFromUnderTerrain)boolTrueFall RecoveryAn explorer with a landscape above its feet (it slipped under the terrain) is put back.
Fall Check Interval (FallCheckInterval)float0.500000Fall RecoveryHow often the explorers are checked (a timer, no tick).
Kill ZMargin (KillZMargin)float5000.000000Fall RecoveryPut back an explorer this close above the level's Kill Z (before the engine destroys it).
Map Bounds Margin (MapBoundsMargin)float2000.000000Fall RecoveryPut back an explorer outside the map's bounds (an RSE Map Bounds Volume): beyond its sides or this far below its floor.
Max Fall Seconds (MaxFallSeconds)float3.000000Fall RecoveryFalling longer than this counts as falling out of the level (a jump or a ledge takes far less).
Recovery Lift (RecoveryLift)float30.000000Fall RecoveryThe explorer comes back this high above the spot it last stood on.
Block Pawn Input Under Screens (bBlockPawnInputUnderScreens)boolTrueInputD-152, a safety net under the input contexts and the focus: while a menu or another modal screen of its player is open (URSEModalScreenSubsystem, per local player), the explorer ignores movement, camera and action input, so the character never walks under an open map or menu. Other local players keep moving.
Hide Cursor While Exploring (bHideCursorWhileExploring)boolTrueInputHide the mouse cursor while exploring, so the mouse turns the camera (shown again in battles and menus). The tactical camera with Mouse Rotation "While Dragging" keeps the cursor visible (the drag turns the view).
Distract Action (DistractAction)TSoftObjectPtr<UInputAction>/RPGSagaEngine/Input/IA_Distract.IA_DistractInputAims and throws a distraction (D-109): hold to aim with the camera, release to throw (Exploration RPG settings).
Exploration Mapping Context (ExplorationMappingContext)TSoftObjectPtr<UInputMappingContext>/RPGSagaEngine/Input/IMC_Exploration.IMC_ExplorationInputMapping context active while exploring. The tactics context is removed meanwhile (both use WASD).
Exploration Mapping Priority (ExplorationMappingPriority)int320Input
Interact Action (InteractAction)TSoftObjectPtr<UInputAction>/RPGSagaEngine/Input/IA_Interact.IA_InteractInputExamine / talk (Phase 7) and "continue" after a battle.
Look Action (LookAction)TSoftObjectPtr<UInputAction>/RPGSagaEngine/Input/IA_ExploreLook.IA_ExploreLookInputAxis2D: X = yaw, Y = pitch (positive looks up). Gamepad mappings should scale by delta time.
Menu Check Interval (MenuCheckInterval)float0.100000InputHow often exploration checks whether the party menu opened or closed (to swap input contexts).
Move Action (MoveAction)TSoftObjectPtr<UInputAction>/RPGSagaEngine/Input/IA_ExploreMove.IA_ExploreMoveInputAxis2D: X = right, Y = forward, relative to the camera.
Party Command Action (PartyCommandAction)TSoftObjectPtr<UInputAction>/RPGSagaEngine/Input/IA_PartyCommand.IA_PartyCommandInputOpens the radial menu of delegated party commands (D-097).
Run Action (RunAction)TSoftObjectPtr<UInputAction>/RPGSagaEngine/Input/IA_ExploreRun.IA_ExploreRunInputHeld: switches between walking and running (see bRunByDefault).
Sneak Action (SneakAction)TSoftObjectPtr<UInputAction>/RPGSagaEngine/Input/IA_ExploreSneak.IA_ExploreSneakInputToggles sneaking (D-097): a slow walk the visible enemies notice much later (Stealth settings).
Switch Leader Action (SwitchLeaderAction)TSoftObjectPtr<UInputAction>/RPGSagaEngine/Input/IA_SwitchLeader.IA_SwitchLeaderInputAxis1D or button: the next (positive) / previous party member becomes the leader (D-097, the visible party).
Invert Camera Tilt (bInvertCameraTilt)boolFalseInput|CameraD-129: the project's default for the player's Invert Camera Tilt option (up looks down). The player's choice wins (Options).
Camera Drag Action (CameraDragAction)TSoftObjectPtr<UInputAction>/RPGSagaEngine/Input/IA_ExploreCameraDrag.IA_ExploreCameraDragInput|CameraD-113, tactical camera: held, the mouse turns the view (right or middle mouse button; LB: the right stick pans).
Camera Gamepad Speed (CameraGamepadSpeed)float1.000000Input|CameraD-150: the project's default for the player's Camera speed (gamepad) option: multiplies Tactical Camera -> Rotate Speed.
Camera Mouse Speed (CameraMouseSpeed)float1.000000Input|CameraD-150: the project's default for the player's Camera speed (mouse) option: multiplies Tactical Camera -> Mouse Rotate Sensitivity (1 = as set). The player's choice wins (Options -> Controls).
Camera Pan Action (CameraPanAction)TSoftObjectPtr<UInputAction>/RPGSagaEngine/Input/IA_ExploreCameraPan.IA_ExploreCameraPanInput|CameraD-113, tactical camera: Axis2D, pans the view away from the leader (arrow keys).
Camera Rotate Action (CameraRotateAction)TSoftObjectPtr<UInputAction>/RPGSagaEngine/Input/IA_ExploreCameraRotate.IA_ExploreCameraRotateInput|CameraD-113, tactical camera: Axis1D, turns the view (positive = right; Q / R, the right stick): -1..1 at Rotate Speed.
Camera Speed Option Range (CameraSpeedOptionRange)FVector2D(X=0.250000,Y=2.000000)Input|CameraD-150: the range the player's camera speed options offer (Options -> Controls), and their step.
Camera Speed Option Step (CameraSpeedOptionStep)float0.050000Input|Camera
Camera Tilt Action (CameraTiltAction)TSoftObjectPtr<UInputAction>/RPGSagaEngine/Input/IA_ExploreCameraTilt.IA_ExploreCameraTiltInput|CameraD-129, tactical camera: Axis1D, tilts the view a little (positive = up, toward the horizon; Page Up / Page Down, the right stick up / down): -1..1 at Tactical Camera -> Tilt Speed. The mouse tilts while Camera Drag is held (vertical movement).
Camera Tilt Reset Action (CameraTiltResetAction)TSoftObjectPtr<UInputAction>/RPGSagaEngine/Input/IA_ExploreCameraTiltReset.IA_ExploreCameraTiltResetInput|CameraD-129, tactical camera: puts the tilt back to the zoom's angle (Home; LB + right stick click). A double click of Camera Drag does too.
Camera Zoom Action (CameraZoomAction)TSoftObjectPtr<UInputAction>/RPGSagaEngine/Input/IA_ExploreCameraZoom.IA_ExploreCameraZoomInput|CameraD-113, tactical camera: Axis1D, the mouse wheel (positive zooms in; notches: a trigger or stick mapping scales by delta time). D-129: RT / LT on the gamepad.
Run by Default (bRunByDefault)boolTrueMovementRSE style: run unless the Run action is held (then walk). False: walk unless Run is held.
Run Speed (RunSpeed)float550.000000Movement
Turn Rate (TurnRate)float720.000000MovementHow fast the character turns toward its movement direction.
Walk Speed (WalkSpeed)float220.000000Movement--- Movement ---
Placeholder Mesh (PlaceholderMesh)TSoftObjectPtr<UStaticMesh>/Engine/BasicShapes/Cylinder.CylinderMovement|PlaceholderPlaceholder body until real characters exist (e.g. /Engine/BasicShapes/Cylinder). Empty = none.
Placeholder Mesh Scale (PlaceholderMeshScale)FVector(X=0.700000,Y=0.700000,Z=1.800000)Movement|PlaceholderScale of the placeholder mesh (the engine basic shapes are 100 cm).
Random Encounter Sample Interval (RandomEncounterSampleInterval)float0.200000Random EncountersHow often random encounter areas measure the distance walked.

RPG Saga Engine: Exploration RPG

Class URSEExploreRPGSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Exploration RPG rules (D-109): skills, traps, locks, stealing, dialog battles, distractions and fallen members.

SettingTypeDefaultCategoryRestartDescription
Choice Opening (ChoiceOpening)ERSEFreeOpeningPlayerSurpriseDialog Battles"From Context" battles started by a dialog choice (the player strikes first).
NPCBattle Encounter (NPCBattleEncounter)TSoftObjectPtr<URSEEncounterData>/RPGSagaEngine/Data/Explore/DA_Encounter_NPCFight.DA_Encounter_NPCFightDialog BattlesThe encounter a Start Battle effect without one uses when only NPCs fight (teams, objectives, rewards; a Free Tactics encounter without enemies: the NPCs are its enemies).
Scene Radius (SceneRadius)float1500.000000Dialog BattlesScene NPCs: combatant NPCs this close to the party join a dialog battle that asks for the scene (cm).
Speaker Line Opening (SpeakerLineOpening)ERSEFreeOpeningEnemySurpriseDialog Battles"From Context" battles started by a speaker's line or node (the speaker's side strikes first).
Alerted Ignore Distractions (bAlertedIgnoreDistractions)boolTrueDistractionsEnemies already chasing the party ignore distractions.
Distractions (bDistractions)boolTrueDistractionsThe party may throw a distraction (the Distract action).
Cooldown (Cooldown)float4.000000DistractionsSeconds before the next throw.
Investigate Seconds (InvestigateSeconds)float6.000000DistractionsSeconds an enemy looks around at the point before it goes back.
Noise Radius (NoiseRadius)float1200.000000DistractionsVisible enemies within this distance of the landing point hear it and come to look (cm).
Throw Item (ThrowItem)TSoftObjectPtr<URSEItemData>NoneDistractionsEach throw uses one of this item (a stone, a bottle). Empty = free.
Throw Range (ThrowRange)float1500.000000DistractionsFarthest throw from the leader (cm).
After Battle (AfterBattle)ERSEFallenAfterBattleGetUpFallen MembersAfter a won or fled battle, the fallen get up (Get Up) or stay down until revived.
Help Up Without Item (bHelpUpWithoutItem)boolFalseFallen MembersStay Down: a standing member may help a fallen one up without any item or spell ("Help up"), with Help Up HP. Off = only a revive item, a revive spell, an inn or a rest.
Carry Distance (CarryDistance)float2500.000000Fallen MembersStay Down: the party carries a fallen member it walked this far away from (cm): the body stops lying there. 0 = never.
Get Up HP (GetUpHP)int321Fallen MembersGet Up: HP they get up with (at least this many).
Get Up HPShare (GetUpHPShare)float0.000000Fallen MembersGet Up: share of their max HP they get up with (the larger of the two counts; 0 = only Get Up HP).
Help Up HP (HelpUpHP)int321Fallen Members
Base Pins (BasePins)int322LocksMinigame: pins for a lock of difficulty 0; one more pin per Difficulty Per Pin (at most Max Pins).
Difficulty Per Pin (DifficultyPerPin)float15.000000Locks
Lockpick Mode (LockpickMode)ERSELockpickModeMinigameLocksPicking a lock by hand: the small game, or a chance from the best member's score.
Max Pins (MaxPins)int325Locks
Max Sweet Spot (MaxSweetSpot)float0.400000Locks
Min Sweet Spot (MinSweetSpot)float0.070000LocksMinigame: narrowest and widest sweet spot.
Misses Allowed (MissesAllowed)int322LocksMinigame: misses allowed before the attempt fails (a failure breaks a pick if the lock says so).
Sweep Seconds (SweepSeconds)float1.400000LocksMinigame: seconds for the marker to cross the bar once (it goes back and forth).
Sweet Spot Per Point (SweetSpotPerPoint)float0.006000LocksMinigame: sweet spot width gained per point of score above the difficulty (lost below).
Sweet Spot Width (SweetSpotWidth)float0.180000LocksMinigame: width of the sweet spot (share of the bar) when the member's score equals the difficulty.
Visible Members Perceive (bVisibleMembersPerceive)boolTruePerceptionThe visible party members check too (off = only the leader looks).
Perception Interval (PerceptionInterval)float0.300000PerceptionSeconds between the passive perception checks while exploring (a timer, no Tick).
Perception Radius (PerceptionRadius)float600.000000PerceptionA member notices hidden traps within this distance of itself (cm).
Search Bonus (SearchBonus)float15.000000PerceptionThe delegated command "Search here" adds this to the searcher's perception around the point.
Search Radius (SearchRadius)float800.000000Perception... within this distance of the searched point (cm).
Search Seconds (SearchSeconds)float20.000000Perception... for this many seconds after the search.
Sneak Perception Bonus (SneakPerceptionBonus)float5.000000PerceptionSneaking members pay more attention: this is added to their perception.
Chance at Equal Score (ChanceAtEqualScore)float0.600000SkillsChance of an attempt whose score equals the difficulty (disarming, auto lockpicking, stealing).
Chance Per Point (ChancePerPoint)float0.030000SkillsChance gained per point of score above the difficulty (lost per point below).
Disarm (Disarm)FRSEExploreSkillRule(StatWeights=(((TagName="Stat.Accuracy"), 0.250000),((TagName="Stat.Speed"), 0.250000)),PerLevel=1.000000,TagBonuses=(((TagName="Class.Archer"), 4.000000),((Tag...SkillsDisarming traps.
Lockpick (Lockpick)FRSEExploreSkillRule(StatWeights=(((TagName="Stat.Accuracy"), 0.200000),((TagName="Stat.Speed"), 0.300000)),PerLevel=1.000000,TagBonuses=(((TagName="Class.Archer"), 3.000000),((Tag...SkillsPicking locks.
Max Chance (MaxChance)float0.950000SkillsHighest chance of any attempt (1 = a master never fails).
Min Chance (MinChance)float0.050000SkillsLowest chance of any attempt the member may make.
Perception (Perception)FRSEExploreSkillRule(StatWeights=(((TagName="Stat.Accuracy"), 0.300000),((TagName="Stat.Speed"), 0.200000)),PerLevel=1.000000,TagBonuses=(((TagName="Class.Archer"), 6.000000),((Tag...SkillsSpotting hidden traps.
Pickpocket (Pickpocket)FRSEExploreSkillRule(StatWeights=(((TagName="Stat.Speed"), 0.400000),((TagName="Stat.Evasion"), 0.200000)),PerLevel=1.000000,TagBonuses=(((TagName="Class.Archer"), 2.000000),((TagN...SkillsStealing from NPCs.
Attempts Per NPC (AttemptsPerNPC)int323StealingAttempts on the same NPC allowed per game day after a failure that was not noticed (0 = no limit).
Behind Angle (BehindAngle)float110.000000StealingThe thief must be behind the NPC: the angle between the NPC's facing and the direction to the thief is at least this.
Steal Requires Sneaking (bStealRequiresSneaking)boolTrueStealingThe thief must be sneaking.
Busy Activities (BusyActivities)FGameplayTagContainer(GameplayTags=((TagName="NPC.Activity.Work"),(TagName="NPC.Activity.Chat"),(TagName="NPC.Activity.Eat")))StealingActivities during which an NPC counts as busy (NPC.Activity.*).
Busy Bonus (BusyBonus)float5.000000StealingScore bonus when the NPC is busy (working, talking with someone else: an activity in Busy Activities).
Caught on Failure (CaughtOnFailure)float0.700000StealingChance that a failed attempt is noticed (0 = a failure is only a failure).
Steal Reach (StealReach)float180.000000StealingFarthest a thief may stand from the NPC (cm).
Found Traps Spare Party in Battle (bFoundTrapsSparePartyInBattle)boolTrueTrapsIn Free Tactics, traps the party has found go off only for the enemies (the party steps around them).
Traps Can KO (bTrapsCanKO)boolFalseTrapsTraps can knock party members out in exploration (off = they leave at least 1 HP).
Traps in Free Tactics (bTrapsInFreeTactics)boolTrueTrapsTraps that were not found yet also go off in Free Tactics battles on the live map.

RPG Saga Engine: Exploration RPG (Presentation)

Class URSEExploreRPGUISettings (module RSE), Project Settings, Project, RPG Saga Engine. Presentation of the exploration RPG actions (D-109): how traps, locks, stealing, distractions and fallen members look and what the notifications say.

SettingTypeDefaultCategoryRestartDescription
Aim Hint (AimHint)FTextNSLOCTEXT("RSEExploreRPG", "AimHint", "Aim with the camera, release to throw.")DistractionsHint while aiming.
Aim Marker Material (AimMarkerMaterial)TSoftObjectPtr<UMaterialInterface>/RPGSagaEngine/Materials/Explore/M_RSE_ExploreMarker.M_RSE_ExploreMarkerDistractions
Aim Marker Mesh (AimMarkerMesh)TSoftObjectPtr<UStaticMesh>/Engine/BasicShapes/Cylinder.CylinderDistractionsMesh of the landing marker while aiming. Empty = /Engine basic cylinder, flattened.
Toggle Aim (bToggleAim)boolFalseDistractionsPress the Distract action once to aim and again to throw (off = hold to aim, release to throw).
Investigate Mark (InvestigateMark)FTextNSLOCTEXT("RSEExploreRPG", "InvestigateMark", "?")DistractionsOver an enemy that comes to look.
Nothing to Throw Text (NothingToThrowText)FTextNSLOCTEXT("RSEExploreRPG", "NothingToThrow", "Nothing to throw.")Distractions"Nothing to throw." (Throw Item missing).
Throw Arc Height (ThrowArcHeight)float250.000000DistractionsHeight of the arc (cm).
Throw Flight Seconds (ThrowFlightSeconds)float0.700000DistractionsSeconds the throw flies.
Thrown Mesh (ThrownMesh)TSoftObjectPtr<UStaticMesh>/Engine/BasicShapes/Sphere.SphereDistractionsThe thrown thing (a small stone). Empty = /Engine basic sphere.
Thrown Scale (ThrownScale)float0.120000Distractions
Carried Text (CarriedText)FTextNSLOCTEXT("RSEExploreRPG", "Carried", "The party carries {Name}.")Fallen Members"The party carries {Name}."
Got Up Text (GotUpText)FTextNSLOCTEXT("RSEExploreRPG", "GotUp", "{Name} is back on their feet.")Fallen Members"{Name} is back on their feet."
Needs Revive Text (NeedsReviveText)FTextNSLOCTEXT("RSEExploreRPG", "NeedsRevive", "{Name} needs a revive item or spell.")Fallen Members"{Name} needs a revive item or spell."
Revive Prompt (RevivePrompt)FTextNSLOCTEXT("RSEExploreRPG", "RevivePrompt", "Revive {Name}")Fallen MembersPrompt at a fallen member: "Revive {Name}".
Key Used Text (KeyUsedText)FTextNSLOCTEXT("RSEExploreRPG", "KeyUsed", "Opened with the {Key}.")Locks"Opened with the {Key}."
Lockable Placeholder Mesh (LockablePlaceholderMesh)TSoftObjectPtr<UStaticMesh>/Engine/BasicShapes/Cube.CubeLocksBody and lid of a lockable without meshes of its own (a box). Empty = /Engine basic cube.
Locked Text (LockedText)FTextNSLOCTEXT("RSEExploreRPG", "Locked", "It\'s locked.")Locks"It's locked." (nobody may pick it, no key).
Lockpick Help (LockpickHelp)FTextNSLOCTEXT("RSEExploreRPG", "LockpickHelp", "Press Confirm (or click) while the marker is in the green spot to set each pin. Back gives up.")LocksLine under the bar: how to play.
Lockpick Title (LockpickTitle)FTextNSLOCTEXT("RSEExploreRPG", "LockpickTitle", "Locked")LocksTitle of the lockpick screen when the lock has no Display Name.
Lockpick Widget Class (LockpickWidgetClass)TSoftClassPtr<URSEScreenWidget>NoneLocksLockpick screen (D-052). Empty = the built-in screen. A Widget Blueprint derived from RSEScreenWidget replaces it and receives a RSELockpickViewModel (docs/product/custom-ui.md).
Lockpick ZOrder (LockpickZOrder)int3255Locks
Open Seconds (OpenSeconds)float0.600000LocksSeconds the lid / door takes to open.
Pick Broke Text (PickBrokeText)FTextNSLOCTEXT("RSEExploreRPG", "PickBroke", "The {Item} broke.")Locks"The {Item} broke."
Picked Text (PickedText)FTextNSLOCTEXT("RSEExploreRPG", "Picked", "{Member} picked the lock.")Locks"{Member} picked the lock."
Pick Failed Text (PickFailedText)FTextNSLOCTEXT("RSEExploreRPG", "PickFailed", "{Member} could not pick the lock.")Locks"{Member} could not pick the lock."
Unlock Prompt (UnlockPrompt)FTextNSLOCTEXT("RSEExploreRPG", "UnlockPrompt", "Unlock")LocksPrompt on a locked door or chest: "Unlock".
Caught Text (CaughtText)FTextNSLOCTEXT("RSEExploreRPG", "Caught", "{Name}: Thief!")Stealing"{Name}: Thief!"
Nothing Left Text (NothingLeftText)FTextNSLOCTEXT("RSEExploreRPG", "NothingLeft", "Nothing left to take.")Stealing"Nothing left to take."
Steal Failed Text (StealFailedText)FTextNSLOCTEXT("RSEExploreRPG", "StealFailed", "Not this time... nobody noticed.")Stealing"Not this time..." (nobody noticed).
Steal Prompt (StealPrompt)FTextNSLOCTEXT("RSEExploreRPG", "StealPrompt", "Steal")StealingPrompt behind an NPC while sneaking: "Steal".
Stolen Money Text (StolenMoneyText)FTextNSLOCTEXT("RSEExploreRPG", "StolenMoney", "{Member} lifted {Money} coins.")Stealing"{Member} lifted {Money} coins."
Stolen Text (StolenText)FTextNSLOCTEXT("RSEExploreRPG", "Stolen", "{Member} lifted {Item}.")Stealing"{Member} lifted {Item}."
Default Trap Mesh (DefaultTrapMesh)TSoftObjectPtr<UStaticMesh>/Engine/BasicShapes/Cylinder.CylinderTrapsMesh of traps without one (a flat plate). Empty = /Engine basic cylinder.
Disarmed Text (DisarmedText)FTextNSLOCTEXT("RSEExploreRPG", "Disarmed", "{Member} disarmed the {Trap}.")Traps"{Member} disarmed the {Trap}."
Disarm Failed Text (DisarmFailedText)FTextNSLOCTEXT("RSEExploreRPG", "DisarmFailed", "{Member} could not disarm the {Trap}.")Traps"{Member} could not disarm it." (the trap did not go off).
Disarm Prompt (DisarmPrompt)FTextNSLOCTEXT("RSEExploreRPG", "DisarmPrompt", "Disarm {Trap}")TrapsPrompt on a spotted trap: "Disarm {Trap}".
Spotted Text (SpottedText)FTextNSLOCTEXT("RSEExploreRPG", "Spotted", "{Member} spotted a trap: {Trap}.")Traps"{Member} spotted a {Trap}."
Sprung Mesh Seconds (SprungMeshSeconds)float0.000000TrapsSeconds a trap's mesh shows after it went off unseen (0 = it stays).
Trap Damage Text (TrapDamageText)FTextNSLOCTEXT("RSEExploreRPG", "TrapDamage", "{Member} takes {Damage} damage.")Traps"{Member} takes {Damage} damage."
Trap Marker Color (TrapMarkerColor)FLinearColor(R=1.000000,G=0.250000,B=0.150000,A=1.000000)Traps
Trap Marker Material (TrapMarkerMaterial)TSoftObjectPtr<UMaterialInterface>/RPGSagaEngine/Materials/Explore/M_RSE_ExploreMarker.M_RSE_ExploreMarkerTrapsMaterial of the marker (a bright translucent red works best). Empty = the mesh's own.
Trap Marker Mesh (TrapMarkerMesh)TSoftObjectPtr<UStaticMesh>/Engine/BasicShapes/Cylinder.CylinderTrapsThe marker over a spotted trap (a ring on the ground). Empty = /Engine basic cylinder, flattened.
Trap Marker Text (TrapMarkerText)FTextNSLOCTEXT("RSEExploreRPG", "TrapMarker", "!")TrapsText floating over a spotted trap.
Trap Meshes (TrapMeshes)TMap<FGameplayTag,TSoftObjectPtr<UStaticMesh> >(0 entries)TrapsMesh of a trap by its Kind (Trap.PressurePlate -> a flat plate). A trap actor's own mesh wins. Missing = Default Trap Mesh.
Triggered Text (TriggeredText)FTextNSLOCTEXT("RSEExploreRPG", "Triggered", "{Trap}!")Traps"{Trap}!" when a trap goes off and the trap has no text of its own.

RPG Saga Engine: Features

Class URSEFeatureSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Feature toggles (D-165).

SettingTypeDefaultCategoryRestartDescription
Action Combat (bActionCombat)boolTrueBattleReal-time action battles (D-171). Off: action encounters refuse to start.
Grid Tactics (bGridTactics)boolTrueBattleTactics battles on a tile grid. Off: grid encounters refuse to start.
Live Tactics (bLiveTactics)boolTrueBattleFree (live) Tactics on the live map. Off: its subsystem is not created and its encounters refuse to start.
ATB / Turn-Based (bTurnBased)boolTrueBattleClassic battles on a stage (ATB, turn-based, CTB). Off: classic encounters refuse to start and the ATB options row is hidden.
Economy (bEconomy)boolTrueCharacters and ItemsCurrency, shops, inns and the economy screens.
Growth / Progression (bGrowth)boolTrueCharacters and ItemsProgression systems (points, the Growth Board) and the Growth page.
Inventory (bInventory)boolTrueCharacters and ItemsInventory rules, the Items and Equipment pages and the inventory options.
Adaptive Difficulty (bAdaptiveDifficulty)boolTrueExtrasThe adaptive AI parameter that follows the player's results. Off: the AI keeps the fixed intelligence of its profile.
Bestiary (bBestiary)boolTrueExtrasThe bestiary (entries, the Bestiary page, the enemy HP option).
Cards (bCards)boolTrueExtrasThe card minigame.
Tutorials (bTutorials)boolTrueExtrasContextual tutorials, the Help page and the tutorials option.
Online and Co-op (bOnline)boolTrueOnlineOnline sessions, lobbies and the co-op transport. Off: the online subsystems are not created.
Dialog (bDialog)boolTrueStoryDialog runner and dialog screens. Off: dialogs do not run; quest givers cannot talk.
Quests (bQuests)boolTrueStoryQuests, the quest tracker and the Journal page.
Story Scenes (bScenes)boolTrueStoryStory scenes (Level Sequences played by the story).
Living NPCs (bLivingNPCs)boolTrueWorldLiving NPCs: routines, barks and their world subsystems.
Map and Minimap (bMapMinimap)boolTrueWorldArea maps, the minimap and the compass, the Map page and their options.
Puzzles (bPuzzles)boolTrueWorldPuzzles (state and screens).
Stealth (bStealth)boolTrueWorldStealth detection and ambushes.
Time and Weather (bTimeWeather)boolTrueWorldTime of day and weather, the clock HUD and the night lights.

RPG Saga Engine: Free Tactics

Class URSEFreeTacticsSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Free Tactics (D-091, docs/design/free-tactics.md): turn-based battles with free movement in meters on the live map.

SettingTypeDefaultCategoryRestartDescription
AICandidate Positions (AICandidatePositions)int3240AICandidate positions the AI samples in its reachable area per decision (plus rings around the targets).
AICover Weight (AICoverWeight)float4.000000AIValue of ending in partial cover from the enemies (full cover counts double), times the profile's danger awareness.
AICrowding Weight (AICrowdingWeight)float6.000000AID-127: value lost per meter a position cuts into an ally's personal space (0 = units may stand shoulder to shoulder).
AIHeight Weight (AIHeightWeight)float2.000000AIValue per meter of height above the nearest enemy (capped at the height damage bonus), times danger awareness.
AIJump Min Saving (AIJumpMinSaving)float2.000000AID-121: a jump to a place walking also reaches is considered only when it saves at least this much movement (meters).
AIJump Samples (AIJumpSamples)int3224AID-121: points the AI tries for a jump (Free Tactics Field -> Jumping) on three rings up to its jump reach. A jump is considered where walking does not go or costs more (see AI Jump Min Saving). 0 = the AI never jumps.
AIMin Move Distance (AIMinMoveDistance)float0.500000AIThe AI does not consider moves shorter than this (meters).
AIOpportunity Risk Weight (AIOpportunityRiskWeight)float1.000000AID-127: positions weigh the opportunity attacks walking there would provoke: their expected damage times this, the profile's danger weight (at least a quarter) and its danger awareness. 0 = the AI walks out of reach regardless.
AIOverwatch Risk Weight (AIOverwatchRiskWeight)float1.000000AID-146: positions weigh the enemy Overwatch reactions walking there would provoke (expected damage times this, the profile's danger weight, at least a quarter, and its danger awareness). 0 = the AI ignores enemy watches.
AIOverwatch Weight (AIOverwatchWeight)float1.000000AID-146: value of going on Overwatch for an AI unit, per point of the damage its watch reaction is expected to do, times the profile's damage weight. Only offered when it is sensible: the unit has nothing to attack from where it stands or could walk to this turn, and an enemy could step into its watch next turn (a ranged unit without a good target, a guard at a choke). 0 = the AI never uses Overwatch.
AIPersonal Space (AIPersonalSpace)float1.000000AID-127: room the AI keeps between a unit and its allies (meters, edge to edge), plus Personal Space Per Radius times the two units' radii together (big units keep more room). Positions inside it lose AI Crowding Weight per meter.
AIPersonal Space Per Radius (AIPersonalSpacePerRadius)float0.500000AID-127: extra personal space per meter of the two units' radii together.
AIReposition Min Distance (AIRepositionMinDistance)float1.500000AID-156: after acting, the movement left is used only for a reposition at least this far (meters): into cover, out of reach.
AIReposition Min Gain (AIRepositionMinGain)float2.000000AID-156: ...and only when it is worth at least this much more than staying (the AI's position score: cover, danger, distance).
AIRing Samples Per Target (AIRingSamplesPerTarget)int328AIPoints sampled on the ring around each potential target at the unit's best attack range.
AISingle Move (bAISingleMove)boolTrueAID-156: an AI unit walks once, in one continuous move, to the spot it chose with its follow-up in mind (spacing, cover, Overwatch, the reach of its abilities): after a walk that arrived it acts or ends its turn, never takes a small corrective step. A walk stopped short (an Overwatch, a slip, a trap) is planned again. Off = every step weighs moving again (before D-156).
Back Arc (BackArc)float90.000000CombatAttacks from within this arc behind the target hit its back (full angle, degrees).
Areas Include Unit Radius (bAreasIncludeUnitRadius)boolTrueCombatArea abilities also catch units whose footprint only overlaps the area (off = the unit's center must be inside).
Front Arc (FrontArc)float120.000000CombatAttacks from within this arc around the target's facing are frontal (full angle, degrees). Side and back multipliers are in Battle.
Height Advantage Threshold (HeightAdvantageThreshold)float0.500000CombatHeight advantage below this difference does not count (uneven ground).
Height Damage Max (HeightDamageMax)float1.300000Combat
Height Damage Min (HeightDamageMin)float0.700000Combat
Height Damage Per Meter (HeightDamagePerMeter)float0.100000CombatDamage change per meter the attacker stands above (+) or below (-) the target.
Height Hit Bonus Max (HeightHitBonusMax)float15.000000Combat
Height Hit Bonus Per Meter (HeightHitBonusPerMeter)float5.000000CombatHit chance change (percent points) per meter of height advantage.
Cover Distance (CoverDistance)float1.500000CoverPartial cover counts only for blockers this close to the target (a low wall far away does not protect it).
Cover Provider (CoverProvider)TSoftClassPtr<URSECoverProvider>NoneCoverDecides the cover a blocker gives and whether it blocks sight. Empty = the built-in rules below (the blocker's own cover, else its height). A project (or the asset combat roles) may plug in its own class.
Full Cover Min Height (FullCoverMinHeight)float1.500000CoverBuilt-in rule: a blocker at least this high above the ground blocks sight (full cover).
Partial Cover Damage Multiplier (PartialCoverDamageMultiplier)float1.000000CoverDamage multiplier against a target in partial cover.
Partial Cover Hit Penalty (PartialCoverHitPenalty)float20.000000CoverHit chance lost (percent points) against a target in partial cover.
Partial Cover Min Height (PartialCoverMinHeight)float0.800000CoverBuilt-in rule: a blocker at least this high (and below full) gives partial cover. Lower obstacles give none.
AIDoor Open Value (AIDoorOpenValue)float6.000000DoorsThe AI opens a closed door in reach when that opens a way to its enemies; this is the option's value. 0 = never.
Doors in Battle (bDoorsInBattle)boolTrueDoorsUnits can open and close doors during a battle (a door command). Off = doors stay as the battle found them.
Door Action Cost (DoorActionCost)ERSEFreeActionCostBonusActionDoorsSeparate budgets: what opening or closing a door costs (an action, a bonus action or nothing).
Door Action Point Cost (DoorActionPointCost)int321DoorsShared budget: Action Points a door costs.
Door Reach (DoorReach)float1.000000DoorsA unit reaches a door this close (meters, from its edge to the nearest part of the doorway).
Fleeing (bFleeing)boolTrueFleeingThe party's units can run away with the Flee command (the encounter's Can Flee must allow it too). A unit that flees leaves the battle; when every standing party member got away, the battle ends as an escape. Off = no running away from Free Tactics battles.
Flee Provokes Opportunity Attacks (bFleeProvokesOpportunityAttacks)boolTrueFleeingThe Flee command's own walk provokes opportunity attacks like any move (off = fleeing disengages safely).
Escape Hidden Radius (EscapeHiddenRadius)float3.000000FleeingAn enemy that cannot see the unit (walls, full cover) stops it from fleeing only this close (meters, edge to edge).
Escape Radius (EscapeRadius)float8.000000FleeingFlee needs this much room (meters, edge to edge): no enemy that sees the unit may stand closer. The unit can walk out first (a Move, or the Flee command's own walk), and a unit engaged in melee is always inside it.
Escape Rounds (EscapeRounds)int320FleeingRounds a fleeing unit must then stay out of every enemy's Escape Radius before it leaves (checked at the start of each round; an enemy coming close starts the count again, an action cancels the escape). 0 = it leaves at once.
Pursuit Leash Radius (PursuitLeashRadius)float20.000000FleeingPursuit limit of the AI: an enemy never moves farther than this from where it entered the battle (it may still walk back), so it gives up the chase of a party that runs. 0 = no limit. The party's own units are never limited.
Join at Next Round (bJoinAtNextRound)boolTrueJoiningEnemies who notice the battle while it runs join at the start of the next round (off = at once, at the next turn).
Call for Help Radius (CallForHelpRadius)float12.000000JoiningEnemies within this distance of those who noticed the party are called in: they join the battle from the start ("call for help"). The others keep patrolling. 0 = only the group that noticed the party.
Party Join Radius (PartyJoinRadius)float20.000000JoiningParty members within this distance of the leader enter the battle from where they stand; the others stay out of it.
Any Angle Paths (bAnyAnglePaths)boolTrueNavigationAny-angle paths (straight lines across open ground) instead of 8-direction steps. Off = classic grid A*.
Climb Cost Per Meter (ClimbCostPerMeter)float1.000000NavigationExtra movement cost per meter climbed (1 = climbing one meter costs as much as walking one more meter).
Layer Snap Tolerance (LayerSnapTolerance)float1.000000NavigationSeveral floors (D-110): a point belongs to the highest floor at most this far above its height. Keep it above the step height and below the height between two floors.
Max Search Cells (MaxSearchCells)int32200000NavigationSearch guard: most cells a path or reach search may expand (0 = no limit).
Max Step Down (MaxStepDown)float1.000000NavigationDeepest drop a unit walks down between two neighbouring cells.
Max Step Up (MaxStepUp)float0.500000NavigationHighest step a unit walks up between two neighbouring cells (stairs, curbs).
Snapshot Cell Size (SnapshotCellSize)float0.250000NavigationCell size of the navigation snapshot captured from the battle area. Smaller = finer paths, more memory and time.
Surprise Opener Acts First (bSurpriseOpenerActsFirst)boolTrueOpeningsIndividual order: the side that opens with a surprise starts with full Charge Time, so it acts first (fastest first).
Surprise Rounds (bSurpriseRounds)boolTrueOpeningsSurprise rounds: when one side attacks the other unseen (the party sneaks up, or an ambush), the surprised units lose their first turn. Off = every battle opens normally.
Surprise Bonus Side (SurpriseBonusSide)ERSESurpriseBonusSidePartyOpeningsD-151: which side's surprise earns the opener's bonus below (its first turn in round 1).
Surprise Opener Bonus Actions (SurpriseOpenerBonusActions)int320OpeningsD-151: extra actions of each opener unit in its first turn (Separate Budgets).
Surprise Opener Bonus AP (SurpriseOpenerBonusAP)int321OpeningsD-151: extra Action Points of each opener unit in its first turn (the shared budget; in Separate Budgets they add movement).
Surprise Opener Bonus Movement (SurpriseOpenerBonusMovement)float0.000000OpeningsD-151: extra movement of each opener unit in its first turn (meters).
Built in Opportunity Attack (bBuiltInOpportunityAttack)boolTrueOpportunity AttacksUnits without their own Left Melee Range reaction still strike with their basic attack.
Opportunity Attacks (bOpportunityAttacks)boolFalseOpportunity AttacksLeaving an enemy's melee reach triggers its opportunity attack reactions (Left Melee Range). D-146: off by default in the live mode; reactions then come only from Overwatch abilities (an ability's Free Tactics Rules -> Overwatch). On = the D-091 / D-127 rule (every setting below).
Built in Opportunity Rule (BuiltInOpportunityRule)ERSEBuiltInOpportunityRuleMeleeFightersOpportunity AttacksD-127: who gets the built-in opportunity attack. The traits Trait.Reaction.OpportunityAttack and Trait.Reaction.NoOpportunityAttack (class, character, equipment or status) decide for their unit whatever this says.
Max Opportunity Attacks Per Move (MaxOpportunityAttacksPerMove)int321Opportunity AttacksD-127: one move provokes at most this many opportunity attacks (the nearest units first), so walking past a group costs one strike, not one per enemy. 0 = every unit left behind strikes.
Melee Reach Max (MeleeReachMax)float2.000000Opportunity AttacksAn ability reaching at most this far (meters, edge to edge) is a melee ability: its range is the unit's melee reach.
Opportunity Attacks Per Turn (OpportunityAttacksPerTurn)int321Opportunity AttacksBuilt-in opportunity attacks per unit between two of its own turns (0 = unlimited).
Opportunity Power Multiplier (OpportunityPowerMultiplier)float1.000000Opportunity AttacksPower multiplier of the built-in opportunity attack.
Aim Height (AimHeight)float1.000000SpaceHeight above a target's ground that attacks aim at (its chest): where line of sight ends.
Default Unit Radius (DefaultUnitRadius)float0.400000SpaceFootprint radius of a unit whose spawn does not set one.
Destination Max Shift (DestinationMaxShift)float0.750000SpaceD-127: farthest a move order's point is shifted to keep Destination Min Gap (meters).
Destination Min Gap (DestinationMinGap)float0.400000SpaceD-127: a move order keeps this much room (meters, edge to edge) from the other units: a point picked right next to an ally moves the least it needs to (at most Destination Max Shift). 0 = the exact point.
Eye Height (EyeHeight)float1.500000SpaceHeight of a unit's eyes above its ground: where line of sight starts.
Max Start Nudge (MaxStartNudge)float1.500000SpaceD-115: a unit that starts a battle where it cannot stand (touching another unit, its footprint against a wall) is moved to the nearest free spot within this distance; farther than that it stays where it is. Battles on the live map start in place: nobody is pulled somewhere else (the presentation slides the few centimeters, it never teleports). 0 = never moved.
Meters Per Tile (MetersPerTile)float1.500000SpaceMeters per grid tile: converts Tactics rules (ranges, areas) and tile positions (encounters, simulator) to meters.
Start Min Gap (StartMinGap)float0.300000SpaceD-127: units that start a battle closer than this to another unit (meters, edge to edge) slide apart to the nearest spot that keeps it, within Max Start Nudge (a short slide, never a teleport). 0 = they start exactly where they stand.
Unit Height (UnitHeight)float1.800000SpaceHow tall a unit is (D-110): units whose feet are this far apart in height stand on different floors and do not block each other, a door or an opportunity attack does not reach across floors.
AISummon Placement Samples (AISummonPlacementSamples)int3224SummonsPoints the AI tries around itself when it places a summon (rings toward the enemy; the valid one nearest the enemy wins).
Summon Placement Needs Sight (bSummonPlacementNeedsSight)boolTrueSummonsThe summoner must see the point (from its eyes to the summon's chest).
Summons at Chosen Point (bSummonsAtChosenPoint)boolTrueSummonsSummons (a Pact's creature, Summon Units) are placed at a point the summoner picks on the ground, within Summon Placement Range. Off = next to the summoner, as on the grid.
Default Summon Radius (DefaultSummonRadius)float0.000000SummonsA summoned unit's footprint radius when its Pact or effect sets none (0 = Default Unit Radius).
Summon Placement Range (SummonPlacementRange)float6.000000SummonsHow far from the summoner's edge the summon may appear (meters, to the summon's center).
Action Model (ActionModel)ERSEFreeActionModelSeparateBudgetsTurns--- Turns ---
Actions Per Turn (ActionsPerTurn)int321TurnsSeparate budgets: actions per turn (abilities whose Action Cost is Action).
Items Use Bonus Action (bItemsUseBonusAction)boolTrueTurnsSeparate budgets: using a consumable costs a bonus action instead of an action.
Bonus Actions Per Turn (BonusActionsPerTurn)int321TurnsSeparate budgets: bonus actions per turn (abilities whose Action Cost is Bonus Action).
Derived Bonus Action Max Cost (DerivedBonusActionMaxCost)int320TurnsSeparate budgets, abilities without their own Free Tactics rules: those whose Tactics Action Point cost is at most this become bonus actions (-1 = none; 0 = only free abilities). Consumables follow Items Use Bonus Action.
Meters Per AP (MetersPerAP)float1.500000TurnsMeters of movement per Action Point (shared budget), and per point of the Action Points stat (separate budgets, From Action Points).
Movement Meters (MovementMeters)float9.000000TurnsSeparate budgets, Fixed: movement allowance per turn.
Movement Source (MovementSource)ERSEFreeMovementSourceFixedTurnsSeparate budgets: where the movement allowance comes from.
Team Order (TeamOrder)ERSEFreeTeamOrderPlayerFirstTurns
Turn Order (TurnOrder)ERSEFreeTurnOrderIndividualCTTurns
Turn Share Action (TurnShareAction)float0.600000TurnsSeparate budgets: share of the turn (for the Charge Time spent at its end) that using the action, a bonus action and the whole movement stand for. The Charge Time spent follows Battle -> Turn CT Cost (nothing used .. everything used).
Turn Share Bonus Action (TurnShareBonusAction)float0.200000Turns
Turn Share Movement (TurnShareMovement)float0.200000Turns

RPG Saga Engine: Free Tactics (Co-op)

Class URSEFreeTacticsCoopSettings (module RSE), Project Settings, Project, RPG Saga Engine. Free Tactics in co-op (D-141, docs/design/networking.md §3.6, docs/product/coop.md): who commands which unit, how long a turn may wait for a player, how far players are pulled into a battle that starts away from them, and how guests present the host's battle.

SettingTypeDefaultCategoryRestartDescription
Actor Binding Wait Seconds (ActorBindingWaitSeconds)float1.000000GuestsA unit that joins on a guest's screen waits this long for the host's world actor to arrive (a reinforcement running in) before the guest shows a stand-in of its own.
Pull in Far Players (bPullInFarPlayers)boolTrueJoiningPlayers whose explorer is farther than the party's join radius (Free Tactics -> Party Join Radius) when the battle starts are brought next to the leader (with a short fade on their screen) instead of staying out of it.
Reconnect Retakes Unit at Once (bReconnectRetakesUnitAtOnce)boolFalseJoiningA player who reconnects during a battle gets their unit back at once (it was the AI's meanwhile). Off = they watch until the battle ends, then take a member (D-124 §6.3).
Pull in Fade Seconds (PullInFadeSeconds)float0.350000JoiningThe fade of a player brought into the battle (seconds, out then in).
Catch Up Backlog (CatchUpBacklog)int3224PacingA guest that falls this many events behind the host plays the backlog faster (Catch Up Playback Rate).
Catch Up Playback Rate (CatchUpPlaybackRate)float2.000000Pacing
Guest Playback Wait Max (GuestPlaybackWaitMax)float4.000000PacingThe host's battle goes on (the AI acts, the next turn starts) only once every guest has shown the events so far, or after this many seconds (a slow or stalled guest never holds the battle longer). 0 = never wait for guests.
Companion Units (CompanionUnits)ERSEFreeCoopCompanionUnitsAITurnsParty units that no player plays (the companions): the AI, or the host.
Turn Timeout Action (TurnTimeoutAction)ERSEFreeTurnTimeoutActionHostTakesOverTurns
Turn Timeout Seconds (TurnTimeoutSeconds)float45.000000TurnsSeconds a guest's turn waits for their command before Turn Timeout Action applies (0 = forever). Counted while the battle waits only for that player (not during animations).

RPG Saga Engine: Free Tactics (Presentation)

Class URSEFreeTacticsPresentationSettings (module RSE), Project Settings, Project, RPG Saga Engine. How Free Tactics battles on the live map look and feel (D-097, docs/design/free-tactics.md): the seamless entry, the tactical camera, the ground overlay (movement area, ability areas, path), the pacing, and the exit.

SettingTypeDefaultCategoryRestartDescription
Area Participant Margin (AreaParticipantMargin)float8.000000Battle Area
Area Size (AreaSize)float44.000000Battle AreaSize of the area captured around the battle (meters, square): units cannot walk out of it; escapes happen inside it.
Grow Area to Participants (bGrowAreaToParticipants)boolTrueBattle AreaD-113: the captured area grows past Area Size (up to Max Area Size) so that every unit of the battle stands inside it with Area Participant Margin to spare: nobody starts at, or is pulled in from, beyond the area's edge. Units never leave the area.
Hide World Labels (bHideWorldLabels)boolTrueBattle AreaHide the world labels (Text Render components) around the battle while it lasts: they face the exploration camera.
Max Area Size (MaxAreaSize)float120.000000Battle Area
Action Camera (ActionCamera)ERSEFreeActionCameraOffCameraD-113, the camera during actions. Off (default): the tactical camera stays, no close-up cuts. Subtle Reframe: it glides to keep the actor and the target on screen at the current zoom. Cinematic: the actions' camera shots (the classic modes' close shots stay available there whatever this says).
Action Camera Shake (bActionCameraShake)boolFalseCameraD-113: actions may shake the camera (hits, explosions). Off: the view never jolts (Cinematic shakes as its shots say).
Focus Actions (bFocusActions)boolTrueCameraSubtle Reframe and Cinematic: the camera glides to each action's target while it plays.
Focus Active Unit (bFocusActiveUnit)boolTrueCameraThe camera glides to the unit whose turn starts.
Hide Occluders (bHideOccluders)boolTrueCameraObjects between the camera and the active unit or the cursor fade (opted-in materials) or hide (the rest): walls, trees, roofs. The camera never collides with them. How: Project Settings -> RPG Saga Engine -> Camera Occlusion (D-113).
Inherit Exploration Zoom (bInheritExplorationZoom)boolFalseCameraD-113: the battle camera starts from the exploration camera's angle and zoom (it is the same camera, taking over) and glides to its own angle; on: it also keeps the exploration zoom (clamped), instead of gliding to Camera Start Distance.
Keep Exploration Tilt (bKeepExplorationTilt)boolTrueCameraD-129: the battle camera keeps the tilt the player gave the exploration camera (degrees around Camera Pitch, within the exploration's tilt limits). Off: it glides to Camera Pitch. Inside interiors the interior's pitch wins.
Camera Field Of View (CameraFieldOfView)float55.000000CameraD-113: the camera's field of view (degrees; the exploration camera's tactical view uses 55). 0 = the exploration camera's.
Camera Focus Height (CameraFocusHeight)float100.000000CameraThe camera orbits a point this high above the ground it looks at (a unit's chest): its probe never starts in the ground.
Camera Interp Speed (CameraInterpSpeed)float6.000000CameraHow quickly the camera glides to its target (focus, yaw, zoom).
Camera Max Distance (CameraMaxDistance)float4200.000000Camera
Camera Min Distance (CameraMinDistance)float900.000000Camera
Camera Min Height Above Terrain (CameraMinHeightAboveTerrain)float150.000000CameraD-113: the camera never goes below the terrain (landscapes, Camera Occlusion -> Ground Tags); at least this high (cm).
Camera Motion Blur (CameraMotionBlur)float0.000000CameraD-113: motion blur of the battle camera (0 = none: it stays sharp while it glides; 1 = the engine's).
Camera Pan Speed (CameraPanSpeed)float1400.000000CameraPan speed (cm/s at the start distance; faster zoomed out).
Camera Pawn Class (CameraPawnClass)TSoftClassPtr<APawn>NoneCameraTactical camera pawn (a subclass of ARSEFreeTacticsCameraPawn). Empty = the built-in one.
Camera Pitch (CameraPitch)float54.000000CameraDownward angle of the camera (degrees below the horizon).
Camera Rotate Step (CameraRotateStep)float45.000000CameraDegrees per rotate press (keys, shoulder buttons).
Camera Start Distance (CameraStartDistance)float2300.000000Camera
Camera Zoom Step (CameraZoomStep)float180.000000CameraDistance change per zoom step.
Ability Effect Scale (AbilityEffectScale)float1.600000EffectsD-120: multiplies the size of ability effects in Free Tactics (look timelines, projectiles, impacts, cast and status effects of the battle feel). The live battle camera sits farther than the Tactics one, so the packs' effects, made for close-ups, need to be bigger to read.
Seamless Camera Hand Off (bSeamlessCameraHandOff)boolTrueEntryD-127: the battle starts on exactly the picture the player saw: the view is frozen while control passes from the explorer to the battle camera, and the battle camera takes over from that very view (location, angle, field of view), so nothing jumps (before, the explorer's camera swung behind the leader for the length of the blend). Off = the D-113 hand-over.
Camera Blend Seconds (CameraBlendSeconds)float0.900000EntrySeconds the camera takes to move from the explorer to the tactical view.
Decal Warm Up Delay (DecalWarmUpDelay)float1.000000EntryD-127: seconds after the map starts before the warm-up (the player's camera exists by then).
Decal Warm Up Seconds (DecalWarmUpSeconds)float0.500000EntryD-127: seconds the battle's ground decal materials (the entry ring, the surfaces, the movement overlay) are drawn once, invisibly small, soon after a map starts. A decal material's first draw in a session fell back to the engine's default decal material for a frame (a pale wash over the whole battle area at the first battle start). 0 = off.
Enemy Surprise Text (EnemySurpriseText)FTextNSLOCTEXT("RSEFreeTacticsPresentation", "EnemySurprise", "Ambush!")Entry
Entry Slow Motion (EntrySlowMotion)float0.250000EntryTime runs this slow the moment a battle starts, then eases back to normal (a seamless "freeze"). 1 = no slow motion.
Entry Slow Motion Seconds (EntrySlowMotionSeconds)float0.800000EntryReal seconds the slow motion takes to ease back to normal.
Entry Sound (EntrySound)TSoftObjectPtr<USoundBase>NoneEntrySound when a battle starts (optional).
Normal Opening Text (NormalOpeningText)FTextEntryBanner of each opening (empty = none): "Ambush!", "Surprise attack!". {Name} = the encounter's name.
Player Surprise Text (PlayerSurpriseText)FTextNSLOCTEXT("RSEFreeTacticsPresentation", "PlayerSurprise", "Surprise attack!")Entry
Unit Look Wait Seconds (UnitLookWaitSeconds)float5.000000EntryD-141 addendum: when the battle starts, the looks of its units that are still loading (stand-ins spawned for enemies without a world actor, a pawn whose look is not in yet) load ahead of everything else, and the first turn waits for them up to this many real seconds (under the entry), so no unit fights as a placeholder. A look that takes longer still shows the moment it is in. 0 = no wait (the looks still load first).
Corpse Mode (CorpseMode)ERSEFreeCorpseModeFadeExit
Corpse Seconds (CorpseSeconds)float12.000000ExitFade: seconds before fallen enemies disappear.
Escape Text (EscapeText)FTextNSLOCTEXT("RSEFreeTacticsPresentation", "Escaped", "You got away.")ExitBanner after an escape (empty = none).
Result Banner Seconds (ResultBannerSeconds)float3.000000ExitSeconds the victory banner stays.
Results Mode (ResultsMode)ERSEFreeResultsModeFeedExitHow a victory shows (D-128: the reward feed by default; Project Settings -> Reward Feed).
Area Color (AreaColor)FRSEUIColor(Token="Negative",Alpha=0.450000,Lightness=-0.007488,Chroma=1.143559,Hue=21.617987,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Ground OverlayWhere an ability would hit (friendly abilities use Area Support Color).
Area Support Color (AreaSupportColor)FRSEUIColor(Token="Positive",Alpha=0.450000,Lightness=-0.005095,Chroma=1.046268,Hue=2.276912,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Ground Overlay
Move Edge Color (MoveEdgeColor)FRSEUIColor(Token="Info",Alpha=0.850000,Lightness=0.031412,Chroma=1.025162,Hue=-12.566440,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Ground OverlayEdge of the movement area.
Move Fill Color (MoveFillColor)FRSEUIColor(Token="Info",Alpha=0.180000,Lightness=-0.056104,Chroma=1.581283,Hue=-1.063226,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Ground OverlayFilled and Cells styles: inside of the movement area.
Overlay Cell Size (OverlayCellSize)float0.500000Ground OverlayCell size of the overlay (meters): a multiple of Free Tactics -> Snapshot Cell Size; smaller = smoother edges, more upload.
Overlay Edge Boost (OverlayEdgeBoost)float2.500000Ground OverlayFilled style: opacity multiplier of the range and area outlines (the movement edge has its own color).
Overlay Edge Width (OverlayEdgeWidth)float0.120000Ground OverlayFilled style: width of the outline inside each area (0 = no outline; the mask goes from 0.5 at the edge to 1 inside).
Overlay Glow (OverlayGlow)float1.200000Ground OverlayEmissive strength of the overlay (reads in shadow).
Overlay Height Tolerance (OverlayHeightTolerance)float35.000000Ground OverlayGround more than this above or below a cell is not painted (walls, props).
Overlay Material (OverlayMaterial)TSoftObjectPtr<UMaterialInterface>/RPGSagaEngine/Materials/Battle/M_RSE_FreeOverlay.M_RSE_FreeOverlayGround OverlayDeferred decal material of the ground overlay; it must match Overlay Style (see there).
Overlay Smoothing (OverlaySmoothing)int322Ground OverlaySubtle and Filled styles: how far the edges are softened (overlay cells; 0 = the cell outline, only straightened).
Overlay Sort Order (OverlaySortOrder)int325Ground Overlay
Overlay Style (OverlayStyle)ERSEFreeOverlayStyleSubtleGround OverlayHow the overlay looks. Subtle (D-113, default): a thin soft outline around the movement area, an almost invisible fill, lighter ability areas (Subtle Look). Filled: filled areas with a clear outline (the colors below). Both read a blurred mask (Overlay Material = M_RSE_FreeOverlay). Cells: solid squares of Overlay Cell Size (Overlay Material is the Tactics grid decal, M_RSE_GridDecal, D-088).
Range Color (RangeColor)FRSEUIColor(Token="Warning",Alpha=0.220000,Lightness=0.069987,Chroma=0.969670,Hue=21.024740,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Ground OverlayThe ability's range (where it can be aimed from here).
Subtle Look (SubtleLook)FRSEFreeOverlaySubtleLook(MoveOutlineColor=(Token="Info",Alpha=0.800000,Lightness=0.088866,Chroma=0.532645,Hue=-11.446269,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000)),MoveFil...Ground Overlay|SubtleThe Subtle style's colors, outline width and softness.
AIReach Cells Per Frame (AIReachCellsPerFrame)int32800PacingD-111: before an AI decision, the unit's movement circle is computed this many cells per frame (spread over a few frames instead of one ~15 ms frame on a 9 m circle; a Steam Deck is ~3.5x slower). 0 = all at once.
AIThink Delay (AIThinkDelay)float0.450000PacingPause before each AI decision, so the player can follow.
End Pause (EndPause)float0.800000PacingSeconds of the pause after the last hit before the battle ends.
Event Pause (EventPause)float0.300000PacingPause after an event without a timeline (a turn lost, a unit joining).
Unit Walk Speed (UnitWalkSpeed)float380.000000PacingWalking speed of units along their paths (cm/s).
Confirm Hazardous Moves (bConfirmHazardousMoves)boolTrueRoute HazardsAsk the player before a walk that crosses (or ends in) a dangerous surface, or a jump that lands in one (Free Tactics Field -> Route Hazards decides when). The project's default; every player may turn it off in Options ("Confirm dangerous moves").
Hazard Cancel Text (HazardCancelText)FTextNSLOCTEXT("RSEFreeTacticsPresentation", "HazardNo", "Pick another path")Route Hazards
Hazard Continue Text (HazardContinueText)FTextNSLOCTEXT("RSEFreeTacticsPresentation", "HazardYes", "Yes")Route Hazards
Hazard Prompt Title (HazardPromptTitle)FTextNSLOCTEXT("RSEFreeTacticsPresentation", "HazardTitle", "Danger")Route HazardsThe warning's title and its two answers.
Disabled Menu Row Opacity (DisabledMenuRowOpacity)float0.600000UIOpacity of a command menu row that cannot be used now (the action or bonus action is spent, not enough points), on top of the disabled text color and the reason in its cost column (D-106).
HUDWidget Class (HUDWidgetClass)TSoftClassPtr<URSEScreenWidget>NoneUIThe Free Tactics battle HUD (turn order, commands, forecast). Empty = the built-in one.
Sneaking Text (SneakingText)FTextNSLOCTEXT("RSEFreeTacticsPresentation", "Sneaking", "Sneaking")UIThe explorer's sneak indicator (shown while sneaking).
Turn Order Count (TurnOrderCount)int328UIUnits shown in the turn order bar.
Detection Alert Color (DetectionAlertColor)FRSEUIColor(Token="Negative",Alpha=1.000000,Lightness=-0.067218,Chroma=1.455528,Hue=8.830938,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))UI|Detection Meter
Detection Back Color (DetectionBackColor)FRSEUIColor(Token="Black",Alpha=0.550000,Chroma=1.000000,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))UI|Detection Meter
Detection Meter Color (DetectionMeterColor)FRSEUIColor(Token="Warning",Alpha=1.000000,Lightness=0.053951,Chroma=1.144979,Hue=19.771044,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))UI|Detection Meter
Detection Meter Height (DetectionMeterHeight)float60.000000UI|Detection MeterHeight of the meter above the enemy's head (cm).
Detection Meter Size (DetectionMeterSize)FVector2D(X=64.000000,Y=9.000000)UI|Detection MeterDetection meter above visible enemies (D-097): size on screen (pixels) and colors.

RPG Saga Engine: Free Tactics Capture

Class URSEFreeTacticsCaptureSettings (module RSE), Project Settings, Project, RPG Saga Engine. How the world is read into a Free Tactics navigation snapshot (D-091).

SettingTypeDefaultCategoryRestartDescription
Only Pawn Blocking Surfaces (bOnlyPawnBlockingSurfaces)boolTrueCaptureOnly surfaces that block pawns count (grass, ivy and other walk-through decoration are skipped).
Use Combat Roles (bUseCombatRoles)boolTrueCaptureThe capture follows combat roles (D-093, D-097): decoration and clutter are looked through, rough ground costs its role's multiplier, standable objects are ground, and blockers get their role's cover (full, half, none for obstacles).
Floor Tag (FloorTag)FNameRSE.FloorCaptureActor or component tag of surfaces that are always floor, however narrow (D-110): stair steps, a plank bridge. The combat role Standable does the same through the asset.
Ground Min Surface Size (GroundMinSurfaceSize)float400.000000CaptureA surface at least this wide (its bounds' shorter side) is ground: floors, landscape, platforms. Narrower ones are objects.
Ignore Tag (IgnoreTag)FNameRSE.FreeTacticsIgnoreCaptureActors or components with this tag are ignored (actor or component tag).
Max Floors (MaxFloors)int324CaptureMost floors a cell may hold (D-110): the ground, upper floors, balconies, a bridge over a path, a roof. 1 = only the top floor of each cell is read (a plain heightfield). Separate floors need separate collision (one slab per actor or component): the capture looks under a surface by ignoring the object it hit.
Max Layers (MaxLayers)int324CaptureMost surfaces read per floor of a cell (the floor plus objects stacked on it).
Min Opening Height (MinOpeningHeight)float30.000000CaptureA gap at least this tall between two stacked objects is an opening (D-110): a window between a sill and a lintel, a door under its lintel. Sight passes through it; what floats above it (the lintel, a balcony) is the ceiling of the floor below.
Min Walkable Normal Z (MinWalkableNormalZ)float0.700000CaptureSurfaces steeper than this (normal Z below it) are not walkable.
Required Headroom (RequiredHeadroom)float180.000000CaptureFree space a unit needs above the ground (a table or a low beam makes the cell unwalkable).
Trace Channel (TraceChannel)TEnumAsByte<ECollisionChannel>ECC_VisibilityCaptureChannel of the vertical traces.
Trace Depth Below (TraceDepthBelow)float1500.000000Capture
Trace Height Above (TraceHeightAbove)float1500.000000CaptureTraces start this far above the area's plane and end this far below it.
Window Tag (WindowTag)FNameRSE.WindowCaptureActor or component tag of windows (D-110): the object blocks movement but not sight (a glass pane, bars). A gap in a wall (a low wall under a lintel with room above the floor) is a window without any tag.

RPG Saga Engine: Free Tactics Field

Class URSEFreeTacticsFieldSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Free Tactics Field (D-108): surfaces and their interactions, destructible objects, positional effects in meters, jumping, falling and the AI's use of them.

SettingTypeDefaultCategoryRestartDescription
AIExplosive Weight (AIExplosiveWeight)float1.000000AIWeight of shooting an explosive object: the blast's expected damage on enemies, minus on allies.
AISurface Combo Weight (AISurfaceComboWeight)float1.000000AIWeight of what an ability's surfaces and elements would do to units (combos: igniting oil under enemies).
AISurface Danger Weight (AISurfaceDangerWeight)float1.000000AIWeight of the damage harmful surfaces would do to the unit where it would stand (times its danger awareness).
Jumping (bJumping)boolTrueJumpingUnits can jump (a movement option: up ledges, over gaps and low obstacles).
Jump Provokes Opportunity Attacks (bJumpProvokesOpportunityAttacks)boolFalseJumpingJumping out of an enemy's reach provokes its opportunity attack (off: a jump disengages, as in many party tactics games).
Jump Arc Height (JumpArcHeight)float1.000000JumpingHow high the arc rises above the higher end (meters): obstacles lower than the arc are jumped over.
Jump Base Distance (JumpBaseDistance)float3.000000JumpingLongest jump (meters) before the unit's Jump stat: reach = base + per point x Jump.
Jump Base Height (JumpBaseHeight)float1.250000JumpingHighest ledge (meters) a unit jumps up to, before its Jump stat: base + per point x Jump.
Jump Cost (JumpCost)ERSEFreeJumpCostMovementJumpingWhat a jump costs in the separate budgets model (the shared budget pays Action Points for the movement).
Jump Distance Per Jump Stat (JumpDistancePerJumpStat)float0.500000Jumping
Jump Height Per Jump Stat (JumpHeightPerJumpStat)float0.250000Jumping
Jump Min Distance (JumpMinDistance)float1.000000JumpingShortest jump (meters): anything nearer is a walk.
Jump Movement Multiplier (JumpMovementMultiplier)float1.500000JumpingMovement a jump costs per meter of its length.
Destructible Objects (bDestructibleObjects)boolTrueObjectsWorld objects whose combat role is Destructible (and objects placed by abilities) can be targeted and broken.
Target Objects (bTargetObjects)boolTrueObjectsAbilities aimed at an explosive may target it directly (off: only area abilities and pushes break objects).
Min Explosion Radius (MinExplosionRadius)float2.000000ObjectsBlast radius (meters) of an exploding object whose data sets none: its Explosion Radius tiles x Meters Per Tile, at least this.
Spawned Object Height (SpawnedObjectHeight)float1.000000Objects
Spawned Object Radius (SpawnedObjectRadius)float0.450000ObjectsFootprint radius and height of an object placed by an ability (Spawn Object) when its data sets none.
Fall Damage (bFallDamage)boolTruePositionalFalls (pushed off a ledge, a jump down) hurt.
Fall Damage Curve (FallDamageCurve)FRuntimeFloatCurve(EditorCurveData=(Keys=((Time=2.000000),(Time=3.000000,Value=10.000000),(Time=6.000000,Value=35.000000),(Time=10.000000,Value=80.000000),(Time=15.000000,Value=1...PositionalFall damage: meters dropped (X) -> percent of the unit's max HP (Y). Drops below the first key's X do nothing. Default: harmless up to 2 m, 10% at 3 m, 35% at 6 m, 80% at 10 m, 100% at 15 m.
Push Max Climb (PushMaxClimb)float0.350000PositionalA push stops at a rise higher than this (meters): it hits it like a wall.
Hazard Aware Routes (bHazardAwareRoutes)boolTrueRoute HazardsPaths go around dangerous surfaces when the movement left allows it (the walk shown, the walk taken and the AI's routes): each meter inside a surface weighs its Route Avoid Cost on top of its movement cost. A route that still crosses one (not enough movement to go around, or no way around) is shown in Hazard Color and the player is asked first. Off = the shortest path, as before D-156.
Warn Destination in Hazard (bWarnDestinationInHazard)boolTrueRoute HazardsThe player is warned when the chosen destination itself lies in a dangerous surface (the walk ends there).
Warn Landing in Hazard (bWarnLandingInHazard)boolTrueRoute HazardsThe player is warned when a jump lands, or an ability carries the user (Leap, Dash, Teleport), into a dangerous surface.
Harmful Avoid Cost (HarmfulAvoidCost)float8.000000Route HazardsRoute Avoid Cost of a surface that hurts (damage or a harmful status) and has none of its own (meters of detour per meter inside).
Slippery Avoid Cost (SlipperyAvoidCost)float2.000000Route HazardsRoute Avoid Cost of a surface that only makes units slip (ice, oil) and has none of its own.
Enter Effects on Create (bEnterEffectsOnCreate)boolTrueSurfacesUnits standing where a surface appears (or changes) get its enter effects at once (lightning electrifies water under them).
Surfaces (bSurfaces)boolTrueSurfacesSurfaces work in Free Tactics battles (Create Zone effects lay them; off = Create Zone uses its classic fallback).
Contact Margin (ContactMargin)float0.150000SurfacesA unit is in a surface when its center is inside, grown by this margin (meters).
Default Slip Chance (DefaultSlipChance)float50.000000SurfacesSlippery tile zones without their own chance (bSlippery): chance to slip (percent).
Default Slip Status (DefaultSlipStatus)TSoftObjectPtr<URSEStatusData>/RPGSagaEngine/Data/Statuses/DA_Status_Prone.DA_Status_ProneSurfacesStatus of a unit that slips when the surface names none (prone).
Element Hit Radius (ElementHitRadius)float0.750000SurfacesRadius an element hit from a single-target ability reaches on the ground (it can ignite oil or electrify water there).
Height Tolerance (HeightTolerance)float1.000000SurfacesA surface covers the ground within this height of where it was laid (meters): fire on the road does not burn the wall top above it.
Interactions (Interactions)TArray<FRSESurfaceInteraction>(18 entries)SurfacesWhat happens when a surface meets a trigger: another surface, an element, the weather. The first matching row wins (a row for Zone.Fire also matches Zone.Fire.Big). The plugin ships fire + oil, lightning + water, fire + ice / water, cold + water, rain on fire.
Max Chain Reactions (MaxChainReactions)int324SurfacesSurfaces changed by a surface change react in turn (burning oil lights the next puddle) up to this many times.
Max Surfaces (MaxSurfaces)int3264SurfacesMost surfaces at once (the oldest go first).
Point Surface Radius (PointSurfaceRadius)float1.250000SurfacesRadius of a surface laid by a single-target ability (or on the aimed point only, Use Ability Area off).
Slide Meters (SlideMeters)float1.500000SurfacesA unit pushed onto a slippery surface slides this much further (meters).

RPG Saga Engine: Free Tactics Field (Presentation)

Class URSEFreeTacticsFieldPresentationSettings (module RSE), Project Settings, Project, RPG Saga Engine. How the Free Tactics field looks (D-108): surface decals and their light effects, breaking and exploding objects, the tactical clarity overlay (cover icons, the forecast from a destination, the line of fire, tooltips) and the camera cutaway.

SettingTypeDefaultCategoryRestartDescription
Cutaway (bCutaway)boolTrueCamera CutawayRoofs, upper floors and tree canopies that hide the active unit or the cursor are hidden while they do.
Cutaway Ceiling (CutawayCeiling)float3000.000000Camera CutawayHow far above the focus to look for overhead parts (cm).
Cutaway Min Height (CutawayMinHeight)float200.000000Camera CutawayOnly parts starting this high above the focus are cut (upper floors, roofs; not the walls around it).
Cutaway Probe Radius (CutawayProbeRadius)float80.000000Camera CutawayRadius of the cutaway probes (cm).
Cutaway Tags (CutawayTags)TArray<FName>(1 entries)Camera CutawayActor or component tags that mark something the camera may cut away (roles with Cutaway set count too).
Cover Icons (bCoverIcons)boolFalseClarityCover icons (full / half shield) all along the movement area where the unit would be in cover. D-113: off by default; the shields show only at the hovered destination (Destination Preview), on the side of each threat.
Destination Preview (bDestinationPreview)boolTrueClarityWhile a destination is hovered: each enemy's hit chance from there and the unit's cover against it.
Line Of Fire (bLineOfFire)boolTrueClarityThe line of fire while aiming (clear, covered, blocked), and from a hovered destination to the enemies it could hit.
Tooltips (bTooltips)boolTrueClarityHovering a surface or an object shows what it is and does.
Cover Icon Opacity (CoverIconOpacity)float0.700000ClarityOpacity of the cover icons along the movement area (D-113; the hovered destination's icon is always opaque).
Cover Icon Size (CoverIconSize)float12.000000ClaritySize of a cover icon along the movement area on screen (pixels; D-113: small and discreet).
Cover Icon Spacing (CoverIconSpacing)float1.750000ClaritySpacing of the cover icons (meters) and the most shown.
Destination Cover Icon Size (DestinationCoverIconSize)float22.000000ClaritySize of the cover icons at the hovered destination (pixels).
Destination Enemy Chips (DestinationEnemyChips)ERSEFreeEnemyChipsFocusedClarityD-120: which enemies show their chip (hit chance, "Exposed to it") over their head while a destination is hovered. Focused: only the enemy under the cursor, the aimed one, or the one last hovered this turn (the shields at the destination and the lines of fire still show every threat).
Destination Shield Merge Angle (DestinationShieldMergeAngle)float40.000000Clarity...and enemies within this angle of each other share one shield (the weaker cover wins).
Destination Shield Offset (DestinationShieldOffset)float110.000000ClarityD-113: at the hovered destination one shield stands on the side of each threat it has cover from (full / half), this far from the destination toward the enemy (cm)...
Exposed Text (ExposedText)FTextNSLOCTEXT("RSEFreeTacticsField", "Exposed", "Exposed to it")Clarity
Flanked Color (FlankedColor)FRSEUIColor(Token="Negative",Alpha=1.000000,Lightness=-0.022824,Chroma=1.155754,Hue=7.402624,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))ClarityA spot some enemy sees with no cover in the way.
Font Size (FontSize)int3213ClarityFont size of the clarity texts (pixels).
Full Cover Color (FullCoverColor)FRSEUIColor(Token="Info",Alpha=1.000000,Lightness=-0.025899,Chroma=1.312299,Hue=1.460616,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Clarity
Full Cover Text (FullCoverText)FTextNSLOCTEXT("RSEFreeTacticsField", "Hidden", "Hidden from it")Clarity
Half Cover Color (HalfCoverColor)FRSEUIColor(Token="Warning",Alpha=1.000000,Lightness=0.053951,Chroma=1.144979,Hue=19.771044,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Clarity
Half Cover Text (HalfCoverText)FTextNSLOCTEXT("RSEFreeTacticsField", "HalfCover", "Half cover from it")Clarity
Hit Chance Format (HitChanceFormat)FTextNSLOCTEXT("RSEFreeTacticsField", "HitChip", "{Hit}% hit, {Crit}% crit")ClarityTexts (localized): the chip over an enemy ("{Hit}% hit, {Crit}% crit"), the cover names, the jump label, a surface's rounds.
Line Blocked Color (LineBlockedColor)FRSEUIColor(Token="Negative",Alpha=0.900000,Lightness=-0.041562,Chroma=1.260038,Hue=0.818512,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Clarity
Line Clear Color (LineClearColor)FRSEUIColor(Token="Positive",Alpha=0.900000,Chroma=1.000000,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Clarity
Line Cover Color (LineCoverColor)FRSEUIColor(Token="Warning",Alpha=0.900000,Lightness=0.053951,Chroma=1.144979,Hue=19.771044,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Clarity
Line Thickness (LineThickness)float2.500000Clarity
Max Cover Icons (MaxCoverIcons)int3240Clarity
Rounds Left Format (RoundsLeftFormat)FTextNSLOCTEXT("RSEFreeTacticsField", "RoundsLeft", "{Name} ({Rounds} rounds left)")Clarity
Top Margin (TopMargin)float90.000000ClarityScreen band (pixels, from the top) kept free for the turn order bar: enemy chips and tooltips stay below it (an enemy off screen keeps its chip at the screen's edge).
Break Effect (BreakEffect)TSoftObjectPtr<UNiagaraSystem>/RPGSagaEngine/Visual/Field/NS_RSE_ObjectBreak.NS_RSE_ObjectBreakObjectsEffect when a destructible object breaks (its field visual's End Effect wins).
Debris Mesh (DebrisMesh)TSoftObjectPtr<UStaticMesh>/Engine/BasicShapes/Cube.CubeObjectsMesh of a debris piece (a small cube by default) and its size (cm).
Debris Pieces (DebrisPieces)int328ObjectsDebris pieces thrown by a breaking object (0 = none) and how long they last.
Debris Seconds (DebrisSeconds)float1.600000Objects
Debris Size (DebrisSize)float14.000000Objects
Explosion Effect (ExplosionEffect)TSoftObjectPtr<UNiagaraSystem>/RPGSagaEngine/Visual/Field/NS_RSE_Explosion.NS_RSE_ExplosionObjectsEffect when an object explodes (its field visual's End Effect wins).
Explosion Sound (ExplosionSound)TSoftObjectPtr<USoundBase>NoneObjectsSound of an explosion (optional).
Placed Object Mesh (PlacedObjectMesh)TSoftObjectPtr<UStaticMesh>/Engine/BasicShapes/Cylinder.CylinderObjectsMesh of an object placed by an ability when its field visual names none (the engine cylinder by default).
Loop Effect Spacing (LoopEffectSpacing)float2.000000SurfacesLoop effects (the surface visual's Loop Effect: embers, sparks, bubbles) are spawned on a lattice of this spacing.
Max Loop Effects (MaxLoopEffects)int3224SurfacesMost loop effect components at once (Steam Deck budget). 0 = none.
Surface Cell Size (SurfaceCellSize)float0.250000SurfacesTexel size of the surface texture (meters; a multiple of the snapshot cell). Smaller = rounder edges, more upload.
Surface Glow (SurfaceGlow)float3.000000SurfacesEmissive strength of glowing surfaces (fire, electricity).
Surface Material (SurfaceMaterial)TSoftObjectPtr<UMaterialInterface>/RPGSagaEngine/Materials/Battle/M_RSE_FreeSurfaces.M_RSE_FreeSurfacesSurfacesDeferred decal material of the surfaces (M_RSE_FreeSurfaces): one decal over the battle area reads a color texture.
Surface Opacity (SurfaceOpacity)float1.000000SurfacesOpacity of the surface decals (times each surface's Color alpha).
Surface Smoothing (SurfaceSmoothing)int322SurfacesHow far the surface edges are softened (texels).
Surface Sort Order (SurfaceSortOrder)int323Surfaces

RPG Saga Engine: Free Tactics Targeting

Class URSEFreeTacticsTargetingSettings (module RSE), Project Settings, Project, RPG Saga Engine. D-146: single-target aiming, the ability previews of the battle menus and the dotted walk line in the live mode.

SettingTypeDefaultCategoryRestartDescription
Style (Style)TSoftObjectPtr<URSETargetingStyle>/RPGSagaEngine/Data/Presentation/DA_RSE_TargetingStyle.DA_RSE_TargetingStyleLookThe look (null = the built-in defaults of URSETargetingStyle).
Click Away Confirms (bClickAwayConfirms)boolFalsePickingA click away from every unit confirms the chosen target anyway (off: it says to click a target or press Confirm).
Focus Offscreen Targets (bFocusOffscreenTargets)boolTruePickingThe camera glides to a target chosen with Next / Previous only when it is off screen.
Unit Picking (bUnitPicking)boolTruePickingSingle-target abilities pick a unit (rings, Next / Previous target) instead of aiming at the ground under the cursor.
Cycle Order (CycleOrder)ERSEFreeTargetCycleOrderDistancePickingThe order Next / Previous target (Tab, arrows, D-pad) walks the valid targets in.
Hostile Auto Pick (HostileAutoPick)ERSEFreeHostileAutoPickNearestPickingThe enemy an attack highlights first.
Pick Radius (PickRadius)float110.000000PickingThe mouse picks the unit whose body is nearest the cursor on screen within this many pixels (at 1080 lines; scaled with the screen), not only the one under it.
Support Auto Pick (SupportAutoPick)ERSEFreeSupportAutoPickMostNeedingPickingThe ally a support ability highlights first.
Legacy Line Of Fire (bLegacyLineOfFire)boolFalsePreviewsThe straight line of fire from the unit to the cursor while aiming (before D-146; the arc and the rings replace it).
Menu Hover Preview (bMenuHoverPreview)boolTruePreviewsHovering or highlighting an ability in a battle menu shows its reach around the active unit and the targets in reach.
Show Enemy Watches (bShowEnemyWatches)boolTruePreviewsThe watch range of enemies on Overwatch shows while you choose where to walk.
Path Preview (PathPreview)ERSEFreePathPreviewWhenNotBrowsingPreviewsWhen the dotted line of a walk shows.

RPG Saga Engine: GAS Export

Class URSEGASExportSettings (module RSEGASEditor), Project Settings, Project, RPG Saga Engine. Defaults of the Export to GAS tool (G3, docs/product/gas-interop.md): where the generated Gameplay Effects and Abilities go, which maps they read, and how battle turns become seconds.

SettingTypeDefaultCategoryRestartDescription
Ability Map (AbilityMap)TSoftObjectPtr<URSEGASAbilityMap>NoneMapping
Attribute Map (AttributeMap)TSoftObjectPtr<URSEGASAttributeMap>NoneMappingThe attribute map the export reads when the run names none. Empty = the sample attribute set's rows.
Seconds Per Turn (SecondsPerTurn)float3.000000MappingA battle turn in seconds: status durations and periods (GAS has no turns).
Status Map (StatusMap)TSoftObjectPtr<URSEGASStatusMap>NoneMapping
Ability Folder (AbilityFolder)FStringAbilitiesOutputSub-folders of the output folder.
Ability Prefix (AbilityPrefix)FStringGA_Output
Effect Folder (EffectFolder)FStringEffectsOutput
Effect Prefix (EffectPrefix)FStringGE_Output
Output Folder (OutputFolder)FDirectoryPath(set per project)OutputFolder of the generated assets: Abilities, Effects and Statuses sub-folders. A folder of the project.
Status Folder (StatusFolder)FStringStatusesOutput
Ability Tag Root (AbilityTagRoot)FStringAbility.RSETagsGameplay tag root of the generated abilities' own tags (Ability.RSE.<Name>), when no Ability Map row gives them.
Cooldown Tag Root (CooldownTagRoot)FStringCooldown.RSETagsGameplay tag root of the generated cooldown effects' tags (Cooldown.RSE.<Name>).
Tag Source (TagSource)FNameNoneTagsThe Gameplay Tag list the missing tags are added to (empty = the project's default list).

RPG Saga Engine: Game Flow

Class URSEGameFlowSettings (module RSE), Project Settings, Project, RPG Saga Engine. Front-end flow (D-026): which maps the main menu and a new game use, the menu's texts, input keys, layout and transitions.

SettingTypeDefaultCategoryRestartDescription
Show Continue (bShowContinue)boolTrueFlowOffer Continue (load the most recent save) at the top of the menu when a save exists.
Show Title Screen (bShowTitleScreen)boolTrueFlowShow a "press any key" title screen before the menu.
Fade Color (FadeColor)FRSEUIColor(Token="Black",Alpha=1.000000,Chroma=1.000000,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Flow
Fade in Duration (FadeInDuration)float0.600000FlowFade from black when the main menu opens. 0 = no fade.
Fade Out Duration (FadeOutDuration)float0.500000FlowFade to black before a map change or quitting. 0 = immediate.
Screen Keys Toggle (bScreenKeysToggle)boolTrueInputD-116: a screen opened by a key closes with the same key (the area map with M / View, the party menu and its journal with the menu key); Back (Esc / B) always closes too. Off = those keys only open.
Menu Back Keys (MenuBackKeys)TArray<FKey>(3 entries)InputReturns from the menu to the title screen.
Menu Confirm Keys (MenuConfirmKeys)TArray<FKey>(3 entries)Input
Menu Down Keys (MenuDownKeys)TArray<FKey>(4 entries)Input
Menu Left Keys (MenuLeftKeys)TArray<FKey>(4 entries)InputChanges the value of an option row (options screen, D-038).
Menu Next Tab Keys (MenuNextTabKeys)TArray<FKey>(3 entries)Input
Menu Prev Tab Keys (MenuPrevTabKeys)TArray<FKey>(3 entries)InputPrevious / next tab of tabbed menu screens (options).
Menu Right Keys (MenuRightKeys)TArray<FKey>(4 entries)Input
Menu Up Keys (MenuUpKeys)TArray<FKey>(4 entries)Input--- Input (the main menu reads keys directly: it has no pawn and no mapping context) ---
Background Color (BackgroundColor)FRSEUIColor(Token="Primary",Alpha=1.000000,Lightness=-0.448875,Chroma=0.275618,Hue=10.644761,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))LayoutBottom of the full-screen background gradient. Lower the alpha to show the map's scene behind it.
Background Glow Colors (BackgroundGlowColors)TArray<FRSEUIColor>(2 entries)LayoutSoft lights drifting slowly behind the title (none = a still background).
Background Glow Drift (BackgroundGlowDrift)float140.000000LayoutHow far the lights drift from their place.
Background Glow Size (BackgroundGlowSize)float1100.000000LayoutDiameter of the drifting lights.
Background Top Color (BackgroundTopColor)FRSEUIColor(Token="Primary",Alpha=1.000000,Lightness=-0.286595,Chroma=0.658696,Hue=8.438069,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))LayoutTop of the full-screen background gradient.
Menu Vertical Anchor (MenuVerticalAnchor)float0.650000LayoutNormalized screen height of the menu's (and the "press any key" text's) center.
Menu Width (MenuWidth)float380.000000Layout
Title Font Size (TitleFontSize)int320LayoutTitle size; 0 = the theme's Display font size (UI Theme -> Fonts -> Display).
Title Vertical Anchor (TitleVerticalAnchor)float0.300000LayoutNormalized screen height of the title's center.
Vignette Opacity (VignetteOpacity)float0.850000LayoutDarkening toward the screen corners (0 = none).
Main Menu Map (MainMenuMap)TSoftObjectPtr<UWorld>(set per project)MapsMap with the main menu (game mode ARSEFrontEndGameMode). Also the project's Game Default Map.
New Game Map (NewGameMap)TSoftObjectPtr<UWorld>(set per project)MapsMap opened by New Game, after the party is reset.
Menu Extensions (MenuExtensions)TArray<TSoftClassPtr<URSEMenuExtension> >(0 entries)MenusEntries a project adds to the main menu and the in-game menu (D-142): each class is a URSEMenuExtension child (C++ or Blueprint). Modules add theirs from code (RSEOnline: Host Game, Join Game, Invite).
Main Menu Widget Class (MainMenuWidgetClass)TSoftClassPtr<URSEScreenWidget>NoneScreensTitle screen and main menu (D-052). Empty = the built-in themed screen. A Widget Blueprint derived from RSEScreenWidget replaces it and receives a RSEMainMenuViewModel (docs/product/custom-ui.md).
Continue Label (ContinueLabel)FTextNSLOCTEXT("RSEGameFlowSettings", "Continue", "Continue")Texts
Game Title (GameTitle)FTextNSLOCTEXT("RSEDemo", "DemoTitle", "RPG Saga Engine Demo")TextsThe title on the main menu. Empty = the project's name.
Load Label (LoadLabel)FTextNSLOCTEXT("RSEGameFlowSettings", "Load", "Load")Texts
Load Unavailable Detail (LoadUnavailableDetail)FTextNSLOCTEXT("RSEGameFlowSettings", "LoadNoSaves", "No saved games")TextsDetail next to Load when there is no save to load.
Menu Hint Text (MenuHintText)FTextTextsHint line under the menu; hidden when empty.
New Game Label (NewGameLabel)FTextNSLOCTEXT("RSEGameFlowSettings", "NewGame", "New Game")Texts
New Game Map Missing Text (NewGameMapMissingText)FTextNSLOCTEXT("RSEGameFlowSettings", "NewGameMapMissing", "No new game map is set (Project Settings -> RPG Saga Engine -> Game Flow).")TextsShown when New Game is chosen but NewGameMap is not set.
Options Label (OptionsLabel)FTextNSLOCTEXT("RSEGameFlowSettings", "Options", "Options")TextsOpens the options screen (D-038). Empty = no Options entry.
Press Any Key Text (PressAnyKeyText)FTextNSLOCTEXT("RSEGameFlowSettings", "PressAnyKey", "Press any key")Texts
Quit Label (QuitLabel)FTextNSLOCTEXT("RSEGameFlowSettings", "Quit", "Quit")Texts
Subtitle (Subtitle)FTextTextsLine under the title; hidden when empty.
Version Text (VersionText)FTextTextsShown in the bottom-right corner; hidden when empty.

RPG Saga Engine: Game Foundation

Class URSEFoundationSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Game Foundation and archetype tools (D-095).

SettingTypeDefaultCategoryRestartDescription
Report Settings References (bReportSettingsReferences)boolTrueChange SafetyAlso report framework settings (Pacts, Bestiary, Progression Designer...) that name a tag the foundation drops.
Managed Tag Roots (ManagedTagRoots)TArray<FString>(7 entries)Change SafetyTag roots the foundation defines. Content tags under them that the foundation does not list are reported as broken references before applying (change safety).
Library Folders (LibraryFolders)TArray<FString>(2 entries)LibraryFolders searched for foundation presets and archetypes (the plugin's first).
Applied Foundation (AppliedFoundation)TSoftObjectPtr<URSEGameFoundation>NoneProjectThe foundation the project was last set up from (written by Apply Foundation To Project; shown by the Studio).
New Tag Source (NewTagSource)FStringRSE_Foundation_Project.iniProjectTag file (Config/Tags/<name>) that receives tags a foundation needs and the project does not have yet.
Project Foundation Folder (ProjectFoundationFolder)FString(set per project)ProjectFolder in /Game where applying a foundation writes the project's attribute registry and command menu layout.
Starter Content Folder (StarterContentFolder)FString(set per project)ProjectFolder in /Game that receives a preset's starter content (one subfolder per preset, D-100).
Starter Enemy Intelligence (StarterEnemyIntelligence)float-1.000000Starter BalanceAI intelligence of the starter enemies; negative = as a new game resolves it (the encounter's adaptive start value).
Starter Grid Size (StarterGridSize)int3212Starter BalanceSide length of the generated Tactics grid.
Starter Player Intelligence (StarterPlayerIntelligence)float0.500000Starter BalanceAI intelligence playing the starter party.
Starter Runs (StarterRuns)int3240Starter BalanceBattles per starter encounter (seeds 1..N).
Starter Win Rate Max (StarterWinRateMax)float0.850000Starter Balance
Starter Win Rate Min (StarterWinRateMin)float0.600000Starter BalanceTarget band of the starter party's win rate at each battle's party level.
Test Accuracy (TestAccuracy)float95.000000Test BattleHit chance style attributes (named Accuracy in the registry) start here so hits land.
Test Action Points (TestActionPoints)float6.000000Test BattleAction Points and Jump of the test units (Tactics).
Test Grid Size (TestGridSize)int328Test BattleSide length of the generated Tactics grid.
Test Intelligence (TestIntelligence)float0.600000Test BattleAI intelligence of both sides.
Test Jump (TestJump)float2.000000Test Battle
Test Life Value (TestLifeValue)float120.000000Test BattleBase value of the life resource's maximum attribute (e.g. Max HP).
Test Resource Value (TestResourceValue)float40.000000Test BattleBase value of other resources' maximum attributes (Max MP, Max Energy...).
Test Runs (TestRuns)int324Test BattleBattles per mode (different seeds).
Test Skill Cost (TestSkillCost)float6.000000Test Battle
Test Skill Power (TestSkillPower)float1.500000Test BattlePower of the test skill (magical, the foundation's first element) and its cost in the first spendable resource.
Test Speed (TestSpeed)float10.000000Test BattleSpeed of the test units (the side's units get +1 each, so turns do not tie).
Test Stat Value (TestStatValue)float14.000000Test BattleBase value of every other plain attribute (offense, defense, accuracy...).
Test Units Per Side (TestUnitsPerSide)int323Test BattleUnits per side.

RPG Saga Engine: Game Terms

Class URSEGameTermsSettings (module RSECore), Project Settings, Project, RPG Saga Engine. The game's vocabulary (D-095, Game Foundation step 1): what the game calls things ("Party", "Class", "Magic", "Gold") and the player-facing names of tags (elements, equipment kinds, item and ability categories).

SettingTypeDefaultCategoryRestartDescription
Tag Names (TagNames)TMap<FGameplayTag,FText>(0 entries)TermsPlayer-facing names of tags (Element.Fire -> "Fire", Equip.Type.Weapon.Firearm -> "Firearm").
Terms (Terms)TMap<FName,FText>(0 entries)TermsWords by id (Party, Class, Level, Experience, Abilities, Magic, Items, Equipment, Money...).

RPG Saga Engine: Generated Art

Class URSEArtSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Where the generated art of read-only content is found (D-075).

SettingTypeDefaultCategoryRestartDescription
Libraries (Libraries)TArray<TSoftObjectPtr<URSEArtLibrary> >(1 entries)Generated ArtArt libraries read after an asset's own Portrait / Icon field, in order. The Portrait & Icon Studio adds its library here when it creates one. Empty = only the assets' own fields.

RPG Saga Engine: Grid

Class URSEGridSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Global rules of the tactical grid.

SettingTypeDefaultCategoryRestartDescription
Height Step Size (HeightStepSize)float50.000000DimensionsHeight of one height step, in cm. Tile heights are stored as whole steps. Global only.
Tile Size (TileSize)float100.000000DimensionsEdge length of one tile, in cm. Global only (levels are built for it).
Cost Rules (CostRules)FRSEGridCostRules(ClimbCostPerStep=1,bLevitateIgnoresTerrainCost=True)MovementHeight costs (climbing, dropping) and levitation rules, for every unit and terrain.
Default Terrain (DefaultTerrain)FGameplayTag(TagName="Terrain.Ground")TerrainTerrain assigned to tiles that have no explicit terrain (when grids are built). Global only.
Fallback Terrain Rules (FallbackTerrainRules)FRSETerrainRules(MoveCost=1)TerrainRules for terrains missing from TerrainRules.
Terrain Rules (TerrainRules)TMap<FGameplayTag,FRSETerrainRules>(8 entries)TerrainMovement rules per terrain type. Terrains not listed use FallbackTerrainRules.

RPG Saga Engine: Growth UI

Class URSEGrowthUISettings (module RSE), Project Settings, Project, RPG Saga Engine. The progression screens (D-144): the Growth page of the party menu (points or board), the teacher screen, the results lines and the New Game question.

SettingTypeDefaultCategoryRestartDescription
Available Glow Scale (AvailableGlowScale)float1.350000BoardGlow ring around nodes that can be unlocked now, in node sizes.
Available Node Kind Tint (AvailableNodeKindTint)float0.600000Board
Board Token Colors (BoardTokenColors)FRSEGrowthBoardTokenColors(ReferenceStyle="/RPGSagaEngine/UI/Styles/DA_UIStyle_Classic.DA_UIStyle_Classic",HueFollow=1.000000,ChromaFollow=1.000000,LightnessFollow=0.350000,MaxChromaRati...BoardP65: how board style assets with Color Mode "Follow UI Style" (the default) follow the UI style: the token each color follows, the reference style their colors were made for (Classic), and how strongly they follow.
Show Board Title (bShowBoardTitle)boolTrueBoardThe board's name and the selected member's points drawn in the board's top corner.
Show Controls Hint (bShowControlsHint)boolTrueBoardThe pan / zoom controls (Board Controls Hint) drawn in the board's bottom corner.
Show Gate Labels (bShowGateLabels)boolFalseBoardLabels of gates are shown only for the selected or hovered node (their details say what opens them).
Show Help Button (bShowHelpButton)boolTrueBoardD-154: a small Help button in the member strip that shows the legend of node kinds over the board.
Show Hub Labels (bShowHubLabels)boolFalseBoardLabels of crossings (hubs) are shown only for the selected or hovered node.
Show Legend (bShowLegend)boolFalseBoardThe legend of node kinds always drawn in the board's corner. D-154: off (each kind's purpose is in the node card; the strip's Help button shows the legend on demand).
Center Light Steps (CenterLightSteps)int3228BoardRings of the soft light behind the board's center (more = smoother).
Circle Segments (CircleSegments)int3228BoardSegments of a round node (smoothness).
Current Glow Scale (CurrentGlowScale)float2.200000BoardThe glow around the character's current node, in node sizes.
Default Kind Icons (DefaultKindIcons)TMap<ERSEGrowthNodeKind,TSoftObjectPtr<UTexture2D> >(4 entries)BoardNode icons per kind for boards whose style names none (the plugin's glyphs by default). Ability and passive nodes show their ability's icon first.
Edge Thickness (EdgeThickness)float3.000000Board
Fallback Look (FallbackLook)int320BoardWhich fallback look (index).
Fallback Looks (FallbackLooks)TArray<FRSEGrowthBoardLook>(3 entries)BoardBuilt-in looks of boards without a style asset (Progression Systems -> Default Board Style empty too). Original designs: a night sky, roots and a circuit.
Fit Padding (FitPadding)float0.700000BoardRoom around the whole board when the view is fitted (board units).
Fit Readable Zoom (FitReadableZoom)float0.360000BoardA board that fits the view only below this zoom opens at this zoom instead, centered on its open part (the nodes that are open or can be opened); the whole board is one press away (right stick click). 0 = always the whole board.
Follow Speed (FollowSpeed)float10.000000BoardHow fast the view glides to the cursor node (0 = jump).
Glow Steps (GlowSteps)int325BoardRings of a soft glow (more = smoother, slower).
Icon Scale (IconScale)float0.580000BoardIcons are drawn at this share of the node size.
Label Min Zoom (LabelMinZoom)float0.300000BoardLabels are drawn under nodes from this zoom on (the selected node's label always).
Locked Node Kind Tint (LockedNodeKindTint)float0.300000BoardD-154: how much of its kind's color a closed node shows (0 = the look's Locked Node Color, 1 = the kind's color), so every node reads clearly; nodes that can be opened now use the second value.
Marker Scale (MarkerScale)float0.500000BoardMarker size (the character's place), in node sizes.
Max Zoom (MaxZoom)float1.600000BoardD-154: 1.6 by default, so nodes stay proportionate when zoomed in (Look Node Size x Pixels Per Board Unit x zoom).
Min Node Pixels (MinNodePixels)float34.000000BoardNodes are never drawn smaller than this on screen (pixels at 1080p), so a fitted large board stays readable.
Minor Label Font Size (MinorLabelFontSize)int320BoardFont size of minor nodes' labels (0 = the theme's smallest size).
Minor Label Min Zoom (MinorLabelMinZoom)float1.600000BoardMinor nodes (stat boosts) show their label from this zoom on (always when selected or hovered).
Min Zoom (MinZoom)float0.050000Board
Nebula Clouds (NebulaClouds)TArray<FRSEGrowthNebulaCloud>(3 entries)BoardSoft clouds behind boards whose style names none (depth).
Nebula Steps (NebulaSteps)int3226BoardRings of a nebula cloud (smoothness).
Overview Min Node Pixels (OverviewMinNodePixels)float9.000000BoardThe whole-board overview of a board too large to read whole (right click / R3) keeps true proportions, nodes never below this.
Pixels Per Board Unit (PixelsPerBoardUnit)float120.000000BoardScreen pixels per board unit at zoom 1.
Selected Ring Thickness (SelectedRingThickness)float4.000000Board
Socket Darkness (SocketDarkness)float0.620000BoardHow dark the socket is (0 = the node's color, 1 = black).
Socket Scale (SocketScale)float0.740000BoardThe dark socket inside a node that holds its icon, as a share of the node size (0 = none).
Stick Dead Zone (StickDeadZone)float0.250000Board
Stick Pan Per Second (StickPanPerSecond)float900.000000BoardPan speed of the right stick (pixels per second).
Trigger Zoom Per Second (TriggerZoomPerSecond)float1.600000BoardZoom change per second with a gamepad trigger fully pressed (left out, right in).
Wheel Zoom Step (WheelZoomStep)float0.120000BoardZoom change per mouse wheel notch (multiplier minus one).
Zoom Smooth Speed (ZoomSmoothSpeed)float12.000000BoardHow fast the zoom glides to its target (wheel, triggers, fit); 0 = jump.
Card Fill Color (CardFillColor)FRSEUIColor(Token="Primary",Alpha=0.920000,Lightness=-0.327827,Chroma=0.363428,Hue=8.707818,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Board|ColorsD-162: more colors of the board page, so every one of them can be set (and follows the UI style).
Dim Text Color (DimTextColor)FRSEUIColor(Token="Neutral",Alpha=1.000000,Lightness=0.044332,Chroma=1.182665,Hue=3.650277,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Board|ColorsA disabled menu entry and the counter at zero.
Locked Label Color (LockedLabelColor)FRSEUIColor(Token="Neutral",Alpha=1.000000,Lightness=0.052537,Chroma=1.162014,Hue=3.667405,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Board|ColorsThe labels of locked nodes.
Menu Pill Color (MenuPillColor)FRSEUIColor(Token="Primary",Alpha=0.920000,Lightness=-0.293923,Chroma=0.304596,Hue=9.952320,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Board|ColorsFill of a node menu entry.
Negative Stat Color (NegativeStatColor)FRSEUIColor(Token="Negative",Alpha=1.000000,Lightness=0.019198,Chroma=0.887452,Hue=-0.115458,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Board|ColorsA stat that goes down in the preview.
Unaffordable Color (UnaffordableColor)FRSEUIColor(Token="Negative",Alpha=1.000000,Lightness=-0.056368,Chroma=1.144359,Hue=1.275545,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Board|ColorsA cost you cannot pay, a requirement not met.
Node Menu Key Hint (bNodeMenuKeyHint)boolTrueBoard|Node MenuD-154: the small key hint ([Confirm] Choose [Back] Cancel) under the node menu.
Show Node Card (bShowNodeCard)boolTrueBoard|Node MenuThe hover card next to the node under the mouse or the cursor (name, kind and purpose, cost, effect).
Neighbour Frame Share (NeighbourFrameShare)float0.750000Board|Node MenuD-152: when a node is selected or its menu opens, the view frames the node with its neighbours in the board's free part (beside the docked card or the details panel), zooming out down to Min Zoom if they would not fit this share of it.
Node Card Margin (NodeCardMargin)float12.000000Board|Node MenuD-152: the docked card's distance from the board's edges (pixels at 1080p).
Node Card Placement (NodeCardPlacement)ERSEGrowthNodeCardPlacementSidePanelBoard|Node MenuD-152: the node card docked at the board's side (default: the middle stays free) or beside the node.
Node Card Width (NodeCardWidth)float340.000000Board|Node MenuWidest the hover card gets (pixels at 1080p).
Node Menu Dim (NodeMenuDim)float0.120000Board|Node MenuD-154: how much the board darkens behind an open node menu (0 = not at all).
Node Menu Font Share (NodeMenuFontShare)float0.320000Board|Node MenuD-154: the node menu is sized from its node: its font is this share of the node's drawn diameter (clamped to Node Menu Min / Max Font Size), so the menu stays proportional to the node at any zoom.
Node Menu Gap (NodeMenuGap)float8.000000Board|Node MenuThe node menu (D-149): gap between the node's ring and the menu, pixels at 1080p. D-154: 8 (close to its node).
Node Menu Layout (NodeMenuLayout)ERSEGrowthNodeMenuLayoutColumnBoard|Node MenuD-152: the node menu's layout (a compact column by default).
Node Menu Max Font Size (NodeMenuMaxFontSize)float13.000000Board|Node Menu
Node Menu Min Font Size (NodeMenuMinFontSize)float10.000000Board|Node Menu
Node Menu Padding (NodeMenuPadding)FVector2D(X=9.000000,Y=3.000000)Board|Node MenuD-154: room inside each menu entry around its text (pixels at 1080p, horizontal and vertical).
Node Menu Ring Scale (NodeMenuRingScale)float1.300000Board|Node MenuD-154: the ring around the node while its menu is open, in node radii.
Node Menu Spread (NodeMenuSpread)float38.000000Board|Node MenuAngle between the menu's entries around the node (degrees).
Points Count Seconds (PointsCountSeconds)float0.600000Board|PointsSeconds the counter takes to count to a new value.
Points Font Scale (PointsFontScale)float2.400000Board|PointsThe points counter on the board (D-149): its number is this many times the theme's heading size.
Points Gain Color (PointsGainColor)FRSEUIColor(Token="Positive",Alpha=1.000000,Lightness=0.024962,Chroma=0.662686,Hue=-1.154955,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Board|PointsFlash colors of the counter when points are gained and spent.
Points Pulse Scale (PointsPulseScale)float0.250000Board|PointsHow much the counter grows at the pop (share of its size).
Points Pulse Seconds (PointsPulseSeconds)float0.700000Board|PointsSeconds of the pop and flash when the points change.
Points Spend Color (PointsSpendColor)FRSEUIColor(Token="Warning",Alpha=1.000000,Lightness=0.011733,Chroma=0.718531,Hue=-11.985731,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Board|Points
Region Label Min Zoom (RegionLabelMinZoom)float0.040000Board|RegionsRegion names are written from this zoom on.
Region Padding (RegionPadding)float0.900000Board|RegionsRoom around a region's nodes inside its tint (board units).
Region Tint Strength (RegionTintStrength)float0.150000Board|RegionsThemed regions: how strongly their tint shows behind their nodes (multiplies the region color's alpha; 0 = none).
Board Details Open by Default (bBoardDetailsOpenByDefault)boolFalseLayoutThe board page opens with its details panel shown (else the node menu's Details opens it).
Board Show All Stats (bBoardShowAllStats)boolTrueLayoutThe board page lists every stat now and after under the details (off: only the stats the selected node changes, in its Effect).
Board Details Width (BoardDetailsWidth)float340.000000LayoutThe board page: details narrower (the board takes the room; members move to a strip above it).
Details Backing Color (DetailsBackingColor)FRSEUIColor(Token="Primary",Alpha=0.960000,Lightness=-0.309960,Chroma=0.330729,Hue=9.426590,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))LayoutBacking of the details panel (it floats over the board on the board page).
Details Width (DetailsWidth)float420.000000Layout
Member Column Width (MemberColumnWidth)float280.000000Layout--- Layout ---
Portrait Fallback Color (PortraitFallbackColor)FRSEUIColor(Token="Primary",Alpha=1.000000,Lightness=-0.038524,Chroma=0.484163,Hue=3.557762,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))LayoutBackground of a member portrait slot without art (the member's initial is written on it).
Strip Action Gap (StripActionGap)float4.000000LayoutD-154: space between two strip actions (pixels at 1080p).
Strip Action Padding (StripActionPadding)FMargin(Left=10.000000,Top=3.000000,Right=10.000000,Bottom=3.000000)Layout
Strip Action Text Role (StripActionTextRole)ERSETextRoleCaptionLayoutD-154: the member strip's action buttons (Undo, Auto, Reset points, Details, Help): small and discreet. Their text role and the room around their text (pixels at 1080p).
Strip Portrait Size (StripPortraitSize)float76.000000LayoutMember strip (D-149): portrait size in pixels at 1080p (names and points under / on it; no level).
Teacher Height (TeacherHeight)float640.000000Layout
Teacher Width (TeacherWidth)float1180.000000LayoutWidth of the teacher window.
New Game Prompt Timeout (NewGamePromptTimeout)float30.000000New GameSeconds the New Game question waits for the game to be ready (party, no dialog) before giving up.
Result Learned Format (ResultLearnedFormat)FTextNSLOCTEXT("RSEGrowthUI", "ResultLearned", "{Name} learned {Ability}!")Result Texts{Name} {Ability}
Result Mastery Format (ResultMasteryFormat)FTextNSLOCTEXT("RSEGrowthUI", "ResultMastery", "{Name}: +{Amount} mastery")Result Texts{Name} {Amount}
Result Points Format (ResultPointsFormat)FTextNSLOCTEXT("RSEGrowthUI", "ResultPoints", "{Name}: +{Amount} {Currency}")Result Texts{Name} {Amount} {Currency}
Result Rank Format (ResultRankFormat)FTextNSLOCTEXT("RSEGrowthUI", "ResultRank", "{Name}: {Ability} grew stronger")Result Texts{Name} {Ability}
Screen Widget Class (ScreenWidgetClass)TSoftClassPtr<URSEScreenWidget>NoneScreensThe Growth page of the party menu (a Widget Blueprint derived from RSE Screen Widget). Empty = the built-in screen.
Teacher Widget Class (TeacherWidgetClass)TSoftClassPtr<URSEScreenWidget>NoneScreensThe teacher screen. Empty = the built-in screen.
Can Learn Text (CanLearnText)FTextNSLOCTEXT("RSEGrowthUI", "CanLearn", "Can learn")Teacher Texts
Close Button (CloseButton)FTextNSLOCTEXT("RSEGrowthUI", "Close", "Leave")Teacher Texts
Confirm Learn Format (ConfirmLearnFormat)FTextNSLOCTEXT("RSEGrowthUI", "ConfirmLearn", "Teach {Ability} to {Name} for {Price}?")Teacher Texts{Ability} {Name} {Price}
Guest Text (GuestText)FTextNSLOCTEXT("RSEGrowthUI", "GuestFixed", "Guest: fixed build")Teacher TextsA guest (Character -> Guest) keeps the build it came with: shown instead of a refusal.
Known Text (KnownText)FTextNSLOCTEXT("RSEGrowthUI", "Known", "Already known")Teacher Texts
Learn Button (LearnButton)FTextNSLOCTEXT("RSEGrowthUI", "Learn", "Learn")Teacher Texts
Learned Format (LearnedFormat)FTextNSLOCTEXT("RSEGrowthUI", "Learned", "{Name} learned {Ability}!")Teacher Texts{Name} {Ability}
Price Item Format (PriceItemFormat)FTextINVTEXT("{Amount}")Teacher Texts{Amount}
Price Items Format (PriceItemsFormat)FTextNSLOCTEXT("RSEGrowthUI", "PriceItems", "{Count}x {Item}")Teacher Texts{Item} {Count}
Required Level Format (RequiredLevelFormat)FTextNSLOCTEXT("RSEGrowthUI", "RequiredLevel", "Level {Level}")Teacher Texts{Level}
Respec Offer Text (RespecOfferText)FTextNSLOCTEXT("RSEGrowthUI", "RespecOffer", "Reset a hero\'s points")Teacher Texts
Teacher Learner Header (TeacherLearnerHeader)FTextNSLOCTEXT("RSEGrowthUI", "TeacherLearner", "Who learns")Teacher Texts
Teacher Offers Header (TeacherOffersHeader)FTextNSLOCTEXT("RSEGrowthUI", "TeacherOffers", "Lessons")Teacher Texts--- Teacher texts ---
Already Open Text (AlreadyOpenText)FTextNSLOCTEXT("RSEGrowthUI", "AlreadyOpen", "Already open.")TextsSaid when an open node is chosen again.
Attributes Header (AttributesHeader)FTextNSLOCTEXT("RSEGrowthUI", "AttributesHeader", "Attributes")Texts
Auto Button (AutoButton)FTextNSLOCTEXT("RSEGrowthUI", "Auto", "Auto")Texts
Auto Done Format (AutoDoneFormat)FTextNSLOCTEXT("RSEGrowthUI", "AutoDone", "{Name} spent the points ({Count} steps).")Texts
Available Text (AvailableText)FTextNSLOCTEXT("RSEGrowthUI", "Available", "Available")Texts
Board Controls Hint (BoardControlsHint)FTextNSLOCTEXT("RSEGrowthUI", "BoardControls", "Drag / right stick: pan Wheel / triggers: zoom Right click / R3: whole board")TextsThe pan / zoom controls drawn on the board (Show Controls Hint).
Board Progress Format (BoardProgressFormat)FTextNSLOCTEXT("RSEGrowthUI", "BoardProgress", "{Open} / {Total} open")Texts{Open} {Total}: how much of the board is open, under the points (Show Board Title). Empty = not shown.
Bought Format (BoughtFormat)FTextNSLOCTEXT("RSEGrowthUI", "Bought", "{Name} learned {Ability}!")Texts
Buy Button (BuyButton)FTextNSLOCTEXT("RSEGrowthUI", "Buy", "Learn")Texts
Cap Format (CapFormat)FTextNSLOCTEXT("RSEGrowthUI", "Cap", "{Points}/{Cap}")Texts{Points} {Cap}
Catalog Header (CatalogHeader)FTextNSLOCTEXT("RSEGrowthUI", "CatalogHeader", "Abilities to learn")Texts
Classic Note (ClassicNote)FTextNSLOCTEXT("RSEGrowthUI", "ClassicNote", "Your heroes grow with their levels: stats rise and abilities are learned on their own.")Texts
Confirm Auto Format (ConfirmAutoFormat)FTextNSLOCTEXT("RSEGrowthUI", "ConfirmAuto", "Spend all of {Name}\'s points automatically?")Texts{Name}
Confirm Buy Format (ConfirmBuyFormat)FTextNSLOCTEXT("RSEGrowthUI", "ConfirmBuy", "Learn {Ability}? It costs {Cost} of your {Currency}.")Texts{Ability} {Cost} {Currency}
Confirm Raise Format (ConfirmRaiseFormat)FTextNSLOCTEXT("RSEGrowthUI", "ConfirmRaise", "Raise {Stat} by {Count}? It costs {Cost} of your {Currency}.")Texts{Count} {Stat} {Cost} {Currency}
Confirm Respec Format (ConfirmRespecFormat)FTextNSLOCTEXT("RSEGrowthUI", "ConfirmRespec", "Reset every point {Name} spent? {Price}")Texts{Name} {Price}
Confirm Respec Penalty Format (ConfirmRespecPenaltyFormat)FTextNSLOCTEXT("RSEGrowthUI", "ConfirmRespecPenalty", "Reset every point {Name} spent?\nYou get back {Back} of {Spent} {Currency}: {Lost} ({Percent}%) are lost for g...Texts{Name} {Back} {Spent} {Lost} {Percent} {Currency} {Price}: the reset question when it costs points (Respec Point Penalty).
Confirm Unlock Format (ConfirmUnlockFormat)FTextNSLOCTEXT("RSEGrowthUI", "ConfirmUnlock", "{Verb} {Node}? It costs {Cost} of your {Currency}.")Texts{Verb} {Node} {Cost} {Currency}
Cost Format (CostFormat)FTextNSLOCTEXT("RSEGrowthUI", "Cost", "Cost {Cost}")Texts{Cost} {Currency}
Currency Names (CurrencyNames)TMap<FGameplayTag,FText>(3 entries)TextsNames of point currencies (Progression.Points.*); board points use the board's Points Term when it has one.
Default Board Term (DefaultBoardTerm)FTextNSLOCTEXT("RSEGrowthUI", "BoardTerm", "Growth Board")Texts
Default Node Term (DefaultNodeTerm)FTextNSLOCTEXT("RSEGrowthUI", "NodeTerm", "Node")Texts
Default Unlock Verb (DefaultUnlockVerb)FTextNSLOCTEXT("RSEGrowthUI", "UnlockVerb", "Unlock")Texts
Delta Format (DeltaFormat)FTextNSLOCTEXT("RSEGrowthUI", "Delta", "{Current} > {After}")Texts{Current} {After}
Details Button (DetailsButton)FTextNSLOCTEXT("RSEGrowthUI", "DetailsButton", "Details")Texts
Details Header (DetailsHeader)FTextNSLOCTEXT("RSEGrowthUI", "DetailsHeader", "Details")Texts
Effect Header (EffectHeader)FTextNSLOCTEXT("RSEGrowthUI", "EffectHeader", "Effect")Texts
Element Format (ElementFormat)FTextNSLOCTEXT("RSEGrowthUI", "Element", "Element: {Element}")Texts{Element}
Free Text (FreeText)FTextNSLOCTEXT("RSEGrowthUI", "Free", "Free")Texts
Gate Level Format (GateLevelFormat)FTextNSLOCTEXT("RSEGrowthUI", "GateLevel", "Opens at level {Level}")Texts{Level}
Help Button (HelpButton)FTextNSLOCTEXT("RSEGrowthUI", "HelpButton", "Help")TextsD-154: the strip's Help button (shows the legend of node kinds).
Junction Purpose Format (JunctionPurposeFormat)FTextNSLOCTEXT("RSEGrowthUI", "JunctionPurpose", "Free waypoint: opens {Count} paths, choose one.")Texts{Count}: a junction's purpose with the number of paths it opens.
Legend Title (LegendTitle)FTextNSLOCTEXT("RSEGrowthUI", "LegendTitle", "Node kinds")TextsD-154: the title of the legend Help shows.
Level Format (LevelFormat)FTextNSLOCTEXT("RSEGrowthUI", "Level", "Level {Level}")Texts{Level}
Locked Text (LockedText)FTextNSLOCTEXT("RSEGrowthUI", "Locked", "Locked")Texts
Mastered Format (MasteredFormat)FTextNSLOCTEXT("RSEGrowthUI", "Mastered", "{Ability}: learned")Texts{Ability}
Mastery Format (MasteryFormat)FTextNSLOCTEXT("RSEGrowthUI", "Mastery", "Teaches {Ability}: {Points}/{Need}")Texts{Ability} {Points} {Need}
Mastery Header (MasteryHeader)FTextNSLOCTEXT("RSEGrowthUI", "MasteryHeader", "Mastery")Texts
No Button (NoButton)FTextNSLOCTEXT("RSEGrowthUI", "No", "No")Texts
No Cap Format (NoCapFormat)FTextINVTEXT("{Points}")Texts{Points}
Node Kind Names (NodeKindNames)TMap<ERSEGrowthNodeKind,FText>(6 entries)Texts
Node Kind Purposes (NodeKindPurposes)TMap<ERSEGrowthNodeKind,FText>(6 entries)TextsWhat each node kind is for, one line (legend and hover card). D-149.
Node Menu Cancel (NodeMenuCancel)FTextNSLOCTEXT("RSEGrowthUI", "MenuCancel", "Cancel")Texts
Node Menu Choose (NodeMenuChoose)FTextNSLOCTEXT("RSEGrowthUI", "MenuChoose", "Choose")TextsThe key hint under the node menu: [Confirm] this.
Node Menu Details (NodeMenuDetails)FTextNSLOCTEXT("RSEGrowthUI", "MenuDetails", "Details")Texts
Node Menu Unlock Format (NodeMenuUnlockFormat)FTextNSLOCTEXT("RSEGrowthUI", "MenuUnlock", "{Verb} {Cost} {Currency}")Texts{Verb} {Cost} {Currency}: the Unlock entry of the node menu.
No Plan Text (NoPlanText)FTextNSLOCTEXT("RSEGrowthUI", "NoPlan", "This character grows with its levels only.")Texts
No Requirements Text (NoRequirementsText)FTextNSLOCTEXT("RSEGrowthUI", "NoRequirements", "Next to an open node.")Texts
No Respec Text (NoRespecText)FTextNSLOCTEXT("RSEGrowthUI", "NoRespec", "Points cannot be reset here.")Texts
Nothing to Undo Text (NothingToUndoText)FTextNSLOCTEXT("RSEGrowthUI", "NothingToUndo", "Nothing to take back.")Texts
Open Text (OpenText)FTextNSLOCTEXT("RSEGrowthUI", "Open", "Open")Texts
Owned Text (OwnedText)FTextNSLOCTEXT("RSEGrowthUI", "Owned", "Known")Texts
Page Label (PageLabel)FTextNSLOCTEXT("RSEGrowthUI", "PageLabel", "Growth")Texts--- Texts ---
Passive Text (PassiveText)FTextNSLOCTEXT("RSEGrowthUI", "PassiveText", "Passive: always active")Texts
Points Cost Format (PointsCostFormat)FTextINVTEXT("{Cost} {Currency}")Texts{Cost} {Currency}
Points Header (PointsHeader)FTextNSLOCTEXT("RSEGrowthUI", "PointsHeader", "Points")Texts
Prerequisites Format (PrerequisitesFormat)FTextNSLOCTEXT("RSEGrowthUI", "Prereq", "Needs {List}")Texts{List}
Preview Header (PreviewHeader)FTextNSLOCTEXT("RSEGrowthUI", "PreviewHeader", "After")TextsHeader of the stat preview (current -> after).
Raise Button (RaiseButton)FTextNSLOCTEXT("RSEGrowthUI", "Raise", "Raise")Texts
Raised Format (RaisedFormat)FTextNSLOCTEXT("RSEGrowthUI", "Raised", "{Name}: {Stat} raised.")Texts
Range Format (RangeFormat)FTextNSLOCTEXT("RSEGrowthUI", "Range", "Range: {Min}-{Max}")Texts{Min} {Max} (Tactics range of an ability).
Range Single Format (RangeSingleFormat)FTextNSLOCTEXT("RSEGrowthUI", "RangeSingle", "Range: {Range}")Texts{Range} when the minimum and maximum are the same.
Rank Format (RankFormat)FTextNSLOCTEXT("RSEGrowthUI", "Rank", "{Ability}: rank {Rank} ({Uses} uses to the next)")Texts{Ability} {Rank} {Uses}
Ranks Header (RanksHeader)FTextNSLOCTEXT("RSEGrowthUI", "RanksHeader", "Ability ranks")Texts
Requirements Header (RequirementsHeader)FTextNSLOCTEXT("RSEGrowthUI", "RequirementsHeader", "Requirements")Texts
Respec Button (RespecButton)FTextNSLOCTEXT("RSEGrowthUI", "Respec", "Reset points")Texts
Respec Done Format (RespecDoneFormat)FTextNSLOCTEXT("RSEGrowthUI", "RespecDone", "{Name}\'s points are back.")Texts
Respec Final Text (RespecFinalText)FTextNSLOCTEXT("RSEGrowthUI", "RespecFinal", "A reset cannot be undone.")TextsUnder the reset question: the free undo does not cover a reset.
Stats Header (StatsHeader)FTextNSLOCTEXT("RSEGrowthUI", "StatsHeader", "Stats")Texts
Target Format (TargetFormat)FTextNSLOCTEXT("RSEGrowthUI", "Target", "Target: {Target}")Texts{Target}
Target Names (TargetNames)TMap<ERSETargetFilter,FText>(5 entries)Texts
Top Rank Format (TopRankFormat)FTextNSLOCTEXT("RSEGrowthUI", "TopRank", "{Ability}: rank {Rank} (top)")Texts{Ability} {Rank}
Undo Button (UndoButton)FTextNSLOCTEXT("RSEGrowthUI", "Undo", "Undo")Texts
Undo Count Format (UndoCountFormat)FTextNSLOCTEXT("RSEGrowthUI", "UndoCount", "Undo ({Count})")Texts{Count}
Undo Hint Text (UndoHintText)FTextNSLOCTEXT("RSEGrowthUI", "UndoHint", "Undo is free while this page stays open.")TextsUnder the points counter: Undo is free while the page is open.
Undone Format (UndoneFormat)FTextNSLOCTEXT("RSEGrowthUI", "Undone", "Step taken back: {Count} points returned.")Texts{Count}: points given back by an undo.
Unlocked Format (UnlockedFormat)FTextNSLOCTEXT("RSEGrowthUI", "Unlocked", "{Name}: {Node} unlocked.")Texts
Use Cost Format (UseCostFormat)FTextNSLOCTEXT("RSEGrowthUI", "UseCost", "Uses {Cost}")Texts{Cost}
Waiting Text (WaitingText)FTextNSLOCTEXT("RSEGrowthUI", "Waiting", "Waiting for the host...")Texts
Yes Button (YesButton)FTextNSLOCTEXT("RSEGrowthUI", "Yes", "Yes")Texts
You Are Here Text (YouAreHereText)FTextNSLOCTEXT("RSEGrowthUI", "YouAreHere", "You are here")Texts

RPG Saga Engine: Input

Class URSEInputSettings (module RSE), Project Settings, Project, RPG Saga Engine. Input assets used by game code, so no controller hardcodes asset paths.

SettingTypeDefaultCategoryRestartDescription
Back Action Text (BackActionText)FTextNSLOCTEXT("RSEInput", "ActionBarBack", "Back")Action Bar
Confirm Action Text (ConfirmActionText)FTextNSLOCTEXT("RSEInput", "ActionBarConfirm", "Select")Action BarNames of the main screen actions a CommonUI action bar shows (the companion plugin binds them when a screen is on a CommonUI layer): Confirm and Back on every screen, the two tab actions on screens that switch tabs or pages.
Next Tab Action Text (NextTabActionText)FTextNSLOCTEXT("RSEInput", "ActionBarNextTab", "Next tab")Action Bar
Previous Tab Action Text (PreviousTabActionText)FTextNSLOCTEXT("RSEInput", "ActionBarPreviousTab", "Previous tab")Action Bar
Block Action (BlockAction)TSoftObjectPtr<UInputAction>/RPGSagaEngine/Input/IA_Block.IA_BlockBattleBlocks an enemy attack during its block prompt (D-066), in both battle modes (Action Commands -> Defense Input = Block). A key and button of its own: Select / Confirm stays with the command menu while enemies act. Unset = block prompts take Select, as before.
ATBTime Mode Action (ATBTimeModeAction)TSoftObjectPtr<UInputAction>/RPGSagaEngine/Input/IA_DangerZone.IA_DangerZoneClassic BattleClassic battles: switches Wait / Active (D-065). It may be the same action as another context's (e.g. the danger zone's): it only acts during classic battles, where the others do nothing.
Analog Threshold (AnalogThreshold)float0.350000DevicesStick / trigger deflection that switches the prompts to the gamepad.
Simulate Steam Deck (bSimulateSteamDeck)boolFalseDevicesTreat the game as running on a Steam Deck (testing the Deck start and labels on PC). Detected otherwise from the SteamDeck=1 environment variable or -SteamDeck.
Start with Gamepad (bStartWithGamepad)boolFalseDevicesDevice assumed before any input on PC (a controller-first build may start on the gamepad). The Steam Deck always starts on the gamepad.
Gamepad Labels (GamepadLabels)ERSEGamepadLabelStyleAutoDevicesGamepad button labels (the player can override it in Options). Auto: Steam Deck labels on a Deck, Xbox labels elsewhere.
Key Prompt Icon Size (KeyPromptIconSize)float26.000000DevicesD-176: size (Slate units) of a key prompt icon shown instead of a text key cap.
Key Prompt Provider (KeyPromptProvider)TSoftClassPtr<UObject>NoneDevicesD-176: where key prompts get their labels and icons (a class implementing RSE Key Prompt Provider, C++ or Blueprint). Empty: the UI theme's labels and no icons. A provider set at runtime (the Common UI companion) wins over this one.
Mouse Move Threshold (MouseMoveThreshold)float4.000000DevicesMouse movement (pixels in one event) that switches the prompts to keyboard / mouse.
Prompt Device (PromptDevice)ERSEForcedInputDeviceAutoDevicesDevice of the key prompts. Auto: keyboard / mouse on PC until a gamepad is used (and back on keyboard / mouse input); gamepad on a Steam Deck and on consoles. The other values force one device (testing; RSE.Input.ForceDevice overrides this at runtime).
Menu Stick Navigation (bMenuStickNavigation)boolTrueMenu StickWhile a menu has focus (party menu, battle command menus, options, save, card album, dialog choices...), the left stick moves the menu cursor like the D-pad, and it no longer pans the camera or moves the character.
Menu Stick Scroll (bMenuStickScroll)boolTrueMenu StickD-176 C2: the right stick scrolls the read-only panels of menus (item and quest descriptions, the bestiary, the shop's details) that a cursor cannot reach, so a gamepad can read a long text.
Menu Scroll Speed (MenuScrollSpeed)float700.000000Menu StickScroll speed of the right stick at full deflection, in pixels per second.
Menu Stick Deadzone (MenuStickDeadzone)float0.500000Menu StickStick deflection (0..1) that counts as a direction in menus.
Menu Stick Repeat Delay (MenuStickRepeatDelay)float0.400000Menu StickSeconds a direction is held before the cursor repeats.
Menu Stick Repeat Interval (MenuStickRepeatInterval)float0.120000Menu StickSeconds between repeats while the direction stays held.
Map Action (MapAction)TSoftObjectPtr<UInputAction>/RPGSagaEngine/Input/IA_Map.IA_MapMenusOpens / closes the area map (D-089, outside battles; M and the gamepad's View button by default). D-148: when it is listed in UI -> Party Menu Page Actions it opens the menu's Map tab instead (the default).
Menu Mapping Context (MenuMappingContext)TSoftObjectPtr<UInputMappingContext>/RPGSagaEngine/Input/IMC_Menus.IMC_MenusMenusMapping context for menu input (party menu), active alongside the tactics context.
Menu Mapping Priority (MenuMappingPriority)int321Menus
Minimap Zoom Action (MinimapZoomAction)TSoftObjectPtr<UInputAction>/RPGSagaEngine/Input/IA_MinimapZoom.IA_MinimapZoomMenusCycles the minimap's zoom levels (D-089; N by default).
Party Menu Action (PartyMenuAction)TSoftObjectPtr<UInputAction>/RPGSagaEngine/Input/IA_PartyMenu.IA_PartyMenuMenusOpens / closes the party menu (outside battles).
Party Menu Open Action (PartyMenuOpenAction)TSoftObjectPtr<UInputAction>/RPGSagaEngine/Input/IA_MenuOpen.IA_MenuOpenMenusD-148: opens the party menu on its start page but never closes it (Esc by default): Back keeps going back inside the menu. Unset = only the Party Menu Action opens it.
Cancel Action (CancelAction)TSoftObjectPtr<UInputAction>/RPGSagaEngine/Input/IA_Cancel.IA_CancelTacticsCancel the current selection.
Select Action (SelectAction)TSoftObjectPtr<UInputAction>/RPGSagaEngine/Input/IA_Select.IA_SelectTacticsConfirm / select the unit or tile under the cursor.
Tactics Mapping Context (TacticsMappingContext)TSoftObjectPtr<UInputMappingContext>/RPGSagaEngine/Input/IMC_Tactics.IMC_TacticsTacticsMapping context active during tactical play.
Tactics Mapping Priority (TacticsMappingPriority)int320Tactics
Ability Cycle Action (AbilityCycleAction)TSoftObjectPtr<UInputAction>/RPGSagaEngine/Input/IA_AbilityCycle.IA_AbilityCycleTactics|BattleCycles through the active unit's abilities (enters targeting).
Danger Zone Action (DangerZoneAction)TSoftObjectPtr<UInputAction>/RPGSagaEngine/Input/IA_DangerZone.IA_DangerZoneTactics|BattleToggles the danger zone overlay: tiles enemies can hit next turn (D-033).
End Turn Action (EndTurnAction)TSoftObjectPtr<UInputAction>/RPGSagaEngine/Input/IA_EndTurn.IA_EndTurnTactics|BattleEnds the turn: first press picks the facing, confirm with Select.
Grid Cursor Action (GridCursorAction)TSoftObjectPtr<UInputAction>/RPGSagaEngine/Input/IA_GridCursor.IA_GridCursorTactics|BattleAxis2D: moves the tile cursor one tile per press, relative to the camera (gamepad D-pad, arrow keys).
Camera Pan Action (CameraPanAction)TSoftObjectPtr<UInputAction>/RPGSagaEngine/Input/IA_CameraPan.IA_CameraPanTactics|CameraAxis2D: X = right, Y = forward, relative to the camera.
Camera Rotate Action (CameraRotateAction)TSoftObjectPtr<UInputAction>/RPGSagaEngine/Input/IA_CameraRotate.IA_CameraRotateTactics|CameraAxis1D: sign gives the rotation direction; one step per press.
Camera Zoom Action (CameraZoomAction)TSoftObjectPtr<UInputAction>/RPGSagaEngine/Input/IA_CameraZoom.IA_CameraZoomTactics|CameraAxis1D: positive zooms in.

RPG Saga Engine: Interactables

Class URSEInteractablesSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Interaction library settings (D-150): Project Settings -> RPG Saga Engine -> Interactables.

SettingTypeDefaultCategoryRestartDescription
Default Danger (DefaultDanger)float1.000000DangerThe danger of a place with no progression zone and no override (an enemy level).
Fair Margin (FairMargin)int32-2Danger
Rating Names (RatingNames)TArray<FText>(4 entries)DangerThe rating names (Safe, Fair, Risky, Deadly).
Risky Margin (RiskyMargin)int32-5Danger
Safe Margin (SafeMargin)int323DangerDanger ratings: the party's level minus the recommended level at or above which a place counts as Safe / Fair / Risky (else Deadly).
Warning Format (WarningFormat)FTextNSLOCTEXT("RSEInteractables", "WarningFormat", "Danger ahead: {Place}. Recommended level {Level} ({Rating} for your party).")DangerThe danger warning ({Place}, {Level}, {Rating}).
Populate Destructible Kinds (PopulateDestructibleKinds)TArray<TSoftObjectPtr<URSEInteractableData> >(3 entries)PopulateD-157: the kinds the Populate Destructibles tool places by default (barrels, crates, pots).
Populate Kinds (PopulateKinds)TArray<TSoftObjectPtr<URSEInteractableData> >(13 entries)PopulateThe kinds the Populate Interactions tool offers by default (their Placement decides where).
Break Prompt (BreakPrompt)FTextNSLOCTEXT("RSEInteractables", "PromptBreak", "Break")PromptsD-157: destructibles.
Clear Prompt (ClearPrompt)FTextNSLOCTEXT("RSEInteractables", "PromptClear", "Clear the way")Prompts
Cross Prompt (CrossPrompt)FTextNSLOCTEXT("RSEInteractables", "PromptCross", "Cross")Prompts
Examine Prompt (ExaminePrompt)FTextNSLOCTEXT("RSEInteractables", "PromptExamine", "Examine")Prompts
Extinguish Prompt (ExtinguishPrompt)FTextNSLOCTEXT("RSEInteractables", "PromptExtinguish", "Put out")Prompts
Gather Prompt (GatherPrompt)FTextNSLOCTEXT("RSEInteractables", "PromptGather", "Gather")Prompts
Light Prompt (LightPrompt)FTextNSLOCTEXT("RSEInteractables", "PromptLight", "Light")Prompts
Look Prompt (LookPrompt)FTextNSLOCTEXT("RSEInteractables", "PromptLook", "Look around")Prompts
Open Prompt (OpenPrompt)FTextNSLOCTEXT("RSEInteractables", "PromptOpen", "Open")PromptsThe default verbs of the kinds.
Pray Prompt (PrayPrompt)FTextNSLOCTEXT("RSEInteractables", "PromptPray", "Pray")Prompts
Push Prompt (PushPrompt)FTextNSLOCTEXT("RSEInteractables", "PromptPush", "Push")Prompts
Read Prompt (ReadPrompt)FTextNSLOCTEXT("RSEInteractables", "PromptRead", "Read")Prompts
Rest Prompt (RestPrompt)FTextNSLOCTEXT("RSEInteractables", "PromptRest", "Rest")Prompts
Save Prompt (SavePrompt)FTextNSLOCTEXT("RSEInteractables", "PromptSave", "Rest and save")Prompts
Compass Points (CompassPoints)TArray<FText>(8 entries)SignpostsThe eight compass points from north, clockwise (N, NE, E...): signposts. World north = +X unless North Yaw says otherwise.
North Yaw (NorthYaw)float0.000000SignpostsThe world yaw that counts as north (degrees; 0 = +X).
Place Revealed Format (PlaceRevealedFormat)FTextNSLOCTEXT("RSEInteractables", "PlaceRevealed", "{Place} was added to the map.")SignpostsSaid when a place is added to the map ({Place}).
Signpost Line Format (SignpostLineFormat)FTextNSLOCTEXT("RSEInteractables", "SignpostLine", "{Direction}: {Label}{Note}")SignpostsA signpost line ({Direction}, {Label}, {Note}).
Signpost Note Format (SignpostNoteFormat)FTextNSLOCTEXT("RSEInteractables", "SignpostNote", " ({Note})")Signposts
Blessed Format (BlessedFormat)FTextNSLOCTEXT("RSEInteractables", "Blessed", "The party is blessed: {Status}.")TextsA shrine blessed ({Status}); not ready yet.
Done by Format (DoneByFormat)FTextNSLOCTEXT("RSEInteractables", "DoneBy", "{Member} did it.")TextsSaid by an action done by a member ({Member}).
Empty Text (EmptyText)FTextNSLOCTEXT("RSEInteractables", "Empty", "It\'s empty.")Texts
Extinguished Text (ExtinguishedText)FTextNSLOCTEXT("RSEInteractables", "Extinguished", "Put out.")Texts
Found Item Format (FoundItemFormat)FTextNSLOCTEXT("RSEInteractables", "FoundItem", "Found {Item} x{Count}.")TextsFound lines ({Item}, {Count}; {Money}).
Found Money Format (FoundMoneyFormat)FTextNSLOCTEXT("RSEInteractables", "FoundMoney", "Found {Money}.")Texts
Hurt Format (HurtFormat)FTextNSLOCTEXT("RSEInteractables", "Hurt", "{Member} takes {Damage} damage.")TextsD-157: a hazard hurt a member ({Member}, {Damage}).
Item Used Format (ItemUsedFormat)FTextNSLOCTEXT("RSEInteractables", "ItemUsed", "Used {Item}.")TextsA key or offering used ({Item}).
Lit Text (LitText)FTextNSLOCTEXT("RSEInteractables", "Lit", "Lit.")Texts
Nothing to Gather Text (NothingToGatherText)FTextNSLOCTEXT("RSEInteractables", "NothingToGather", "Nothing left to gather. It will grow back.")Texts
Rested Text (RestedText)FTextNSLOCTEXT("RSEInteractables", "Rested", "The party rested by the fire.")Texts
Shrine Quiet Text (ShrineQuietText)FTextNSLOCTEXT("RSEInteractables", "ShrineQuiet", "The shrine is quiet. Come back later.")Texts
Status Given Format (StatusGivenFormat)FTextNSLOCTEXT("RSEInteractables", "StatusGiven", "{Member}: {Status}.")TextsD-157: a hazard gave a member a status ({Member}, {Status}).

RPG Saga Engine: Interaction

Class URSEInteractionSettings (module RSE), Project Settings, Project, RPG Saga Engine. Interactables and NPCs in exploration (Project Settings -> RPG Saga Engine -> Interaction): focus rules, the on-screen prompt, NPC placeholders, facing and barks.

SettingTypeDefaultCategoryRestartDescription
Angle Weight (AngleWeight)float2.000000FocusFocus score = distance to the bounds / range + AngleWeight * angle / 180 - Priority. Lowest wins. Higher values favor what the player faces over what is nearest.
Bodies Use Default Range (bBodiesUseDefaultRange)boolFalseFocusObjects with a body (meshes, blocking shapes) are also in range within DefaultRange of their origin (the rule before the 2026-09-27 playtest; it lets small objects be used from far away). Off: only CloseReach from the body, or the actor's own Interaction Radius, counts.
Center Distance Weight (CenterDistanceWeight)float0.150000FocusWeight of the distance from the player to the object's center, added to the score (tie-break between neighbors that are both within reach, e.g. two things on one table; the facing weighs more).
Close Reach (CloseReach)float55.000000FocusReach from the object's body (its meshes and blocking shapes): the player's capsule within this distance of the body is in range, however big the object or far its origin. The interaction volume grows to cover it. Actors can set their own (Reach Override).
Default Range (DefaultRange)float120.000000FocusRange around the origin of interactables without a body (trigger areas, optional scene zones) that do not set their own Interaction Radius: the player's capsule within this distance of the origin is in range. Objects with a body use CloseReach from their body instead (unless bBodiesUseDefaultRange).
Focus Check Interval (FocusCheckInterval)float0.100000FocusHow often the focused interactable is re-evaluated while the player stands in at least one range.
Focus Keep Slack (FocusKeepSlack)float25.000000FocusThe focused object stays in range this much farther than its range (no flicker at the edge).
Focus Switch Margin (FocusSwitchMargin)float0.150000FocusAnother object takes the focus only when its score beats the focused one's by this much (no flicker between neighbors).
Ignore Facing Distance (IgnoreFacingDistance)float30.000000FocusCloser than this to the object's bounds, the facing does not matter (standing against it works in any direction).
Max Focus Angle (MaxFocusAngle)float75.000000FocusObjects farther than this angle from the pawn's facing are not focused, unless closer than IgnoreFacingDistance. Within the angle the facing weighs in the score (AngleWeight). Actors can set their own (Facing Rule).
Vertical Tolerance (VerticalTolerance)float50.000000FocusLargest vertical gap between the player's capsule and the object's body (or origin) that still counts as in range: objects on the floor above or below, on a balcony or down a ledge are left out. Actors can set their own.
Player Faces Interactable (bPlayerFacesInteractable)boolTrueNPCThe player's pawn also turns toward what it interacts with.
Standing NPCs Block Navigation (bStandingNPCsBlockNavigation)boolTrueNPCD-120: an NPC that stands still (no schedule, Stay) carves a hole in the level's navmesh, so walkers go around it. NPCs that walk (a schedule, or Wander / Route) never do: the static navmesh would keep holes where they once stood (a guard line across a bridge cut the bridge in two for everyone, the guards included).
Default Bark Cooldown (DefaultBarkCooldown)float30.000000NPCTime before an NPC may bark again, for NPCs that do not set their own.
Default Bark Radius (DefaultBarkRadius)float450.000000NPCProximity bark range of NPCs that do not set their own.
Face Turn Seconds (FaceTurnSeconds)float0.250000NPCNPC and player turn toward each other over this time when a conversation starts (0 = snap).
Face Turn Step Seconds (FaceTurnStepSeconds)float0.016000NPCUpdate step of the facing turn.
NPCCapsule Half Height (NPCCapsuleHalfHeight)float88.000000NPC
NPCCapsule Radius (NPCCapsuleRadius)float34.000000NPC
NPCPlaceholder Mesh (NPCPlaceholderMesh)TSoftObjectPtr<UStaticMesh>/Engine/BasicShapes/Cylinder.CylinderNPCPlaceholder body of NPCs without their own mesh.
NPCPlaceholder Scale (NPCPlaceholderScale)FVector(X=0.700000,Y=0.700000,Z=1.800000)NPC
Prompt at Actor (bPromptAtActor)boolTruePromptPrompt above the focused actor (else at PromptScreenAnchor).
Prompt Avoids Player (bPromptAvoidsPlayer)boolTruePromptActor prompts never cover the player's character: they move above its head when they would.
Prompt Shows Object Name (bPromptShowsObjectName)boolTruePromptThe prompt names the object it acts on (so two things close together are told apart), when it has a name.
Default Prompt (DefaultPrompt)FTextNSLOCTEXT("RSEInteraction", "DefaultPrompt", "Examine")PromptAction shown by interactables without their own prompt text.
Fallback Keys (FallbackKeys)FTextNSLOCTEXT("RSEInteraction", "FallbackKeys", "E / A")Prompt{Keys} when the Interact action's keys cannot be read from the input mapping.
Key Separator (KeySeparator)FTextNSLOCTEXT("RSEInteraction", "KeySeparator", " / ")PromptBetween the keyboard and gamepad key names in {Keys}.
Prompt Fade Seconds (PromptFadeSeconds)float0.120000PromptFade in / out of the prompt (0 = none).
Prompt Follow Speed (PromptFollowSpeed)float20.000000PromptHow fast an actor prompt follows its point on screen (per second; 0 = sticks to it). Smooths camera jitter.
Prompt Font Size (PromptFontSize)int3218Prompt
Prompt Format (PromptFormat)FTextNSLOCTEXT("RSEInteraction", "PromptFormat", "[{Keys}] {Action}")PromptPrompt layout. Arguments: {Keys} (e.g. "E / A"), {Action}.
Prompt Height Above Bounds (PromptHeightAboveBounds)float25.000000PromptHeight of the prompt above the top of the object's bounds (objects without their own prompt point).
Prompt Named Format (PromptNamedFormat)FTextNSLOCTEXT("RSEInteraction", "PromptNamedFormat", "{Action}: {Name}")PromptAction + object name. Arguments: {Action}, {Name}.
Prompt Panel Color (PromptPanelColor)FRSEUIColor(Token="Primary",Alpha=0.820000,Lightness=-0.327827,Chroma=0.363428,Hue=8.707818,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Prompt
Prompt Player Clearance (PromptPlayerClearance)float10.000000PromptGap between the prompt and the top of the player's head when it moves out of the way.
Prompt Screen Anchor (PromptScreenAnchor)FVector2D(X=0.500000,Y=0.780000)PromptNormalized screen point of screen-space prompts (and of actor prompts whose actor is off screen).
Prompt Screen Margin (PromptScreenMargin)float24.000000PromptActor prompts stay this far inside the screen edges.
Prompt Text Color (PromptTextColor)FRSEUIColor(Token="Text",Alpha=1.000000,Chroma=1.000000,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Prompt
Prompt Widget Class (PromptWidgetClass)TSoftClassPtr<URSEScreenWidget>/Script/RSE.RSEInteractionPromptWidgetPromptInteraction prompt (D-052). Empty = the built-in themed screen. A Widget Blueprint derived from RSEScreenWidget replaces it and receives a RSEInteractionPromptViewModel (docs/product/custom-ui.md).
Prompt World Height (PromptWorldHeight)float120.000000PromptHeight above the interactable's origin, for objects without bounds (trigger areas) or prompt point.
Prompt ZOrder (PromptZOrder)int3220Prompt
Talk Prompt (TalkPrompt)FTextNSLOCTEXT("RSEInteraction", "TalkPrompt", "Talk")PromptAction shown by NPCs without their own prompt text.

RPG Saga Engine: Interior Kits

Class URSEKitLibrarySettings (module RSEEditor), Project Settings, Project, RPG Saga Engine. Interior Kits settings (D-164): Project Settings -> RPG Saga Engine -> Interior Kits.

SettingTypeDefaultCategoryRestartDescription
Grid Rules (GridRules)FRSEKitGridRules(ModuleBin=5.000000,HeightBin=5.000000,ThicknessBin=2.000000,ModuleMultiples=(0.500000,1.000000,2.000000,3.000000,4.000000),SpanTolerance=5.000000,SpanTolerance...DetectionKit grouping and grid detection.
Probe Rules (ProbeRules)FRSEKitProbeRules(ProbeStep=5.000000,MinProbeCells=16,MaxProbeCells=128,MaxWallThickness=60.000000,MinWallHeight=100.000000,MinWallRunRatio=2.000000,DoorRules=(MinWidth=70.00000...DetectionProbe thresholds (openings, fronts, corners, pivots).
Library Asset Name (LibraryAssetName)FStringDA_KitLibraryOutput
Library Folder (LibraryFolder)FDirectoryPath(set per project)OutputProject folder of the library asset. Project content only.
Output Folder (OutputFolder)FDirectoryPath(set per project)OutputWhere the Create step writes kits, furniture and themes. Project content only.
Inspector Exposure EV100 (InspectorExposureEV100)float2.000000Preview
Interior Exposure EV100 (InteriorExposureEV100)float2.000000PreviewWizard preview and piece inspector: fixed exposure (EV100) of the 3D views.
Preview Floors (PreviewFloors)int322Preview
Preview Footprint (PreviewFootprint)FVector2D(X=1700.000000,Y=1300.000000)PreviewWizard preview: the sample house's footprint (cm; X along the facade), floors and seed.
Preview Light Brightness (PreviewLightBrightness)float4.000000PreviewWizard preview and piece inspector: the brightness of the scene's sun (the sky gets half).
Preview Program (PreviewProgram)FSoftObjectPath/RPGSagaEngine/Data/Interiors/Programs/DA_InteriorProgram_Inn.DA_InteriorProgram_InnPreviewWizard preview: the program (rooms) of the sample house and the theme whose furnishings, light and materials it borrows (empty = the first the project has).
Preview Seed (PreviewSeed)int3211Preview
Preview Theme (PreviewTheme)FSoftObjectPath/RPGSagaEngine/Data/Interiors/Themes/DA_InteriorTheme_Common.DA_InteriorTheme_CommonPreview
Expected Kinds (ExpectedKinds)TArray<FGameplayTag>(0 entries)ReviewKinds a complete kit has; the wizard's Kits step warns about the missing ones. Empty = the built-in list (walls, door and window walls, corner, floor, ceiling, stairs, railing, door leaf).
Thumbnail Pool Size (ThumbnailPoolSize)int32128ReviewThumbnails kept by the review table (0 = no thumbnail column).
Thumbnail Size (ThumbnailSize)int3264ReviewThumbnail size in the review table (px).
Batch Size (BatchSize)int3264ScanMeshes loaded per batch (one worker task per batch).
Garbage Collect Every Batches (GarbageCollectEveryBatches)int328ScanCollect garbage every this many batches (loaded meshes are released); 0 = never.
Max Batches in Flight (MaxBatchesInFlight)int322ScanBatches allowed in flight on workers (memory cap on copied triangles).
Read Options (ReadOptions)FRSEKitMeshReadOptions(MinProbeTriangles=8,MaxProbeTriangles=100000,bAllowMeshDescription=True,bAllowCollision=True,bAllowBounds=True)ScanHow triangles are read.
Time Slice Ms (TimeSliceMs)float12.000000ScanGame-thread time per editor frame while scanning (ms): the editor stays responsive.
Taxonomy (Taxonomy)TSoftObjectPtr<URSEKitTaxonomy>NoneTaxonomyHow meshes are classified (kinds, words, languages, shape tests).

RPG Saga Engine: Interiors

Class URSEInteriorSettings (module RSE), Project Settings, Project, RPG Saga Engine. Interiors (D-110, docs/design/free-tactics.md section 17): doors, ladders and the camera inside buildings and dungeons.

SettingTypeDefaultCategoryRestartDescription
Battle Area Margin (BattleAreaMargin)float1.000000BattleA Free Tactics battle that starts inside an Interior Volume captures only the volume (plus this margin, meters) instead of Free Tactics (Presentation) -> Area Size: the rooms, not the whole street.
Close Door Text (CloseDoorText)FTextNSLOCTEXT("RSEInteriors", "CloseDoor", "Close")Doors
Door Close Sound (DoorCloseSound)TSoftObjectPtr<USoundBase>NoneDoors
Door Leaf Mesh (DoorLeafMesh)TSoftObjectPtr<UStaticMesh>NoneDoorsMesh of a door leaf without its own (scaled to the leaf size; a 1 m cube). Empty = the engine cube.
Door Open Sound (DoorOpenSound)TSoftObjectPtr<USoundBase>NoneDoorsD-150: played when a door without its own sounds swings open / shut (empty = silent).
Door Swing Seconds (DoorSwingSeconds)float0.450000DoorsSeconds a door takes to swing open or shut (0 = at once). Doors may override it.
Locked Door Text (LockedDoorText)FTextNSLOCTEXT("RSEInteriors", "LockedDoor", "It\'s locked.")DoorsSaid when a locked door is tried.
Open Door Text (OpenDoorText)FTextNSLOCTEXT("RSEInteriors", "OpenDoor", "Open")DoorsPrompts of doors without their own.
Climb Text (ClimbText)FTextNSLOCTEXT("RSEInteriors", "Climb", "Climb")LaddersPrompt of ladders in exploration (the explorer climbs to the other end).
Ladder Mesh (LadderMesh)TSoftObjectPtr<UStaticMesh>NoneLaddersMesh of a ladder without its own (scaled between its ends; a 1 m cube). Empty = the engine cube.

RPG Saga Engine: Inventory Rules

Class URSEInventoryRulesSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Inventory rules (D-143): how the party carries items, in which containers, and who receives what it gains.

SettingTypeDefaultCategoryRestartDescription
Bag (Bag)FRSEItemContainerDef(Id="Bag",DisplayName=NSLOCTEXT("RSEInventoryRules", "BagName", "Bag"),Grid=(Width=8,MinHeight=5,MaxHeight=5),Filter=(TagQuery=()))ContainersEach member's bag: its id (the command and layout key), name, icon and size (8 x 5 by default; bounded).
Pending Loot (PendingLoot)FRSEItemContainerDef(Id="PendingLoot",DisplayName=NSLOCTEXT("RSEInventoryRules", "PendingName", "Pending Loot"),Grid=(Width=8,MinHeight=5),Filter=(TagQuery=()))ContainersLoot nobody could carry: shown as its own tab until taken or distributed. Grows.
Stash (Stash)FRSEItemContainerDef(Id="Stash",DisplayName=NSLOCTEXT("RSEInventoryRules", "StashName", "Stash"),Grid=(Width=8,MinHeight=7,SpareRows=1),Filter=(TagQuery=()))ContainersThe shared stash (large; Max Height 0 = it grows).
Stash Access (StashAccess)ERSEStashAccessSavePointsContainersWhere the stash opens.
Stash Access Radius (StashAccessRadius)float600.000000ContainersHow close to a save point / rest place the player must stand for the stash to open (the presentation measures it).
Auto Distribute Rule (AutoDistributeRule)TSoftClassPtr<URSELootDistributionRule>/Script/RSECore.RSELootRule_SmartDistributionThe rule of the inventory's Auto-distribute button (re-deals every bag and, when open, the stash).
Pickups to Picker in Coop (bPickupsToPickerInCoop)boolTrueDistributionCo-op: what a player picks up (chests, pick-ups, shop purchases) goes to that player's member first.
Distribution Rule (DistributionRule)TSoftClassPtr<URSELootDistributionRule>/Script/RSECore.RSELootRule_SmartDistributionWho receives what the party gains (chests, battles, quests, shops, pick-ups). Blueprintable: write your own.
Overflow (Overflow)ERSELootOverflowPendingLootDistributionWhen no member has room, the stash takes it if the source stands at a stash point or the stash opens anywhere; otherwise this decides (pending loot by default). Nothing is ever lost.
Minimum Upgrade (MinimumUpgrade)float0.001000Distribution|SmartSmart rule: an upgrade must be worth at least this (sum of weighted relative changes) to beat free space.
Role Rules (RoleRules)TArray<FRSELootRoleRule>(0 entries)Distribution|SmartSmart rule: who receives which consumables (ethers to mages). Items no rule matches are balanced among everyone.
Stat Weights (StatWeights)TMap<FGameplayTag,float>(0 entries)Distribution|SmartSmart rule: how much each stat counts when equipment is compared (relative change x weight). Missing stats count 1.
Migration (Migration)ERSEModeMigrationDistributeModeA game played in the Per Character mode for the first time (or after a switch from Shared): what happens to its items.
Mode (Mode)ERSEInventoryModeSharedModeShared: one party grid (JRPG, ATB, Tactics). Per Character: a bag per member, a stash, pending loot (live / Free Tactics).
Shared Kinds (SharedKinds)TArray<ERSEItemKind>(2 entries)ModeItem kinds that stay shared in the Per Character mode (story items): they never go into bags.
Money Mode (MoneyMode)ERSEMoneyModeSharedMoney--- Money ---
Use Weight (bUseWeight)boolFalseWeightItems weigh something and each member carries up to a capacity. Off by default.
Carry Capacity Base (CarryCapacityBase)float40.000000WeightCapacity every member has.
Carry Capacity Per Stat Point (CarryCapacityPerStatPoint)float1.000000WeightCapacity per point of Carry Capacity Stat.
Carry Capacity Stat (CarryCapacityStat)FGameplayTag()WeightThe stat that adds capacity (Stat.Strength...). Empty = only the base and equipment.
Overweight Rule (OverweightRule)ERSEOverweightRuleBlockAddingWeight

RPG Saga Engine: Inventory UI

Class URSEInventoryUISettings (module RSE), Project Settings, Project, RPG Saga Engine. The grid inventory screen (D-123, docs/design/inventory-grid.md).

SettingTypeDefaultCategoryRestartDescription
Board (Board)FRSEInventoryBoardStyle(CellSize=60.000000,CellGap=3.000000,CornerRadius=4.000000,CellFill=(Token="Primary",Alpha=0.850000,Lightness=-0.309568,Chroma=0.498216,Hue=4.227151,Override=(R...Board
Menu Height (MenuHeight)float860.000000Layout
Menu Width (MenuWidth)float1500.000000LayoutParty menu window size while the grid page shows (the grid needs more room than the lists).
Party Card Width (PartyCardWidth)float210.000000LayoutWidth of one party strip card.
Party Portrait Size (PartyPortraitSize)float44.000000LayoutPortrait on the party strip cards (0 = none).
Stats Panel Width (StatsPanelWidth)float280.000000LayoutWidth of the stats panel right of the board.
Tooltip Width (TooltipWidth)float330.000000LayoutWidth of the item tooltip.
Visible Rows (VisibleRows)int328LayoutGrid rows shown before the grid scrolls.
Body Anchors (BodyAnchors)TArray<FRSEPaperdollAnchor>(9 entries)PaperdollBody parts on the figure area (D-126): where slots of each body part are placed and their connectors end.
Default Slot Size (DefaultSlotSize)FVector2D(X=1.100000,Y=1.100000)Paperdoll
Figure Image (FigureImage)TSoftObjectPtr<UTexture2D>NonePaperdollShown on the figure area when the character has neither a live preview nor a portrait. Empty = nothing.
Paperdoll Size (PaperdollSize)FIntPoint(X=7,Y=8)PaperdollSize of the paperdoll area, in cells.
Paperdoll Slots (PaperdollSlots)TArray<FRSEPaperdollSlotLayout>(9 entries)PaperdollPlacement of the equipment slots (body part anchor + offset, or a fixed position) and their sizes. Slots of Items -> Equipment Slots not listed here are placed from their body part (beside the figure, on the side of the anchor), or down the edges of the paperdoll without one, at Default Slot Size.
Portrait Position (PortraitPosition)FVector2D(X=1.350000,Y=1.300000)PaperdollThe figure area (the live 3D preview, else the portrait, else the fallback figure), in cells of the paperdoll.
Portrait Size (PortraitSize)FVector2D(X=4.300000,Y=6.700000)Paperdoll
Action Portrait Size (ActionPortraitSize)float28.000000Per CharacterPortrait beside each "Give to" entry of the action menu.
Capacity Color (CapacityColor)FRSEUIColor(Token="Text",Alpha=1.000000,Lightness=-0.057774,Chroma=2.643006,Hue=-31.508739,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Per CharacterColors of the capacity line: normal and over capacity / full.
Over Capacity Color (OverCapacityColor)FRSEUIColor(Token="Negative",Alpha=1.000000,Lightness=-0.006601,Chroma=0.942214,Hue=0.319182,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Per Character
Live Preview (bLivePreview)boolTruePreviewThe selected character in 3D on the paperdoll, wearing its equipment (weapons and accessories on sockets, armor on modular bodies). Off, or RSE.Inventory.LivePreview 0 = the portrait.
Preview Backdrop Color (PreviewBackdropColor)FRSEUIColor(Token="Primary",Alpha=1.000000,Lightness=-0.348259,Chroma=0.363512,Hue=9.359602,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))PreviewBehind the character (match the paperdoll panel: the edges fade into it).
Preview Capture Rate (PreviewCaptureRate)float30.000000PreviewCaptures per second while the preview is on screen (the idle animation). 0 = only when something changes (equipment, turning, zoom): a still pose. RSE.Inventory.PreviewRate overrides it (the Steam Deck profile: 15).
Preview Class (PreviewClass)TSoftClassPtr<URSEPaperdollPreview>NonePreviewWho makes the picture: a Blueprint or C++ class derived from RSEPaperdollPreview. Empty = the scene capture preview.
Preview Drag Degrees (PreviewDragDegrees)float0.600000PreviewTurning by dragging the figure: degrees per screen unit.
Preview Framing (PreviewFraming)FNamePaperdollPreviewFraming of the preview (Project Settings -> Portraits -> Framings). The plugin's "Paperdoll" preset fits every character head to feet with its hat and held weapon (Fit Head Top, Fit Whole Look), with room under the helmet slot.
Preview Light Rig (PreviewLightRig)FNameStudioPreviewLighting of the preview (Project Settings -> Portraits -> Light Rigs).
Preview Resolution (PreviewResolution)FIntPoint(X=360,Y=560)PreviewRender target size (match the figure area's aspect). RSE.Inventory.PreviewScale scales it (the Steam Deck profile: 0.75).
Preview Scene Location (PreviewSceneLocation)FVector(X=0.000000,Y=40000.000000,Z=-60000.000000)PreviewWhere the preview scene stands in the world: far from the playable space and from the dialog portrait scene.
Preview Start Zoom (PreviewStartZoom)float0.850000PreviewThe zoom the preview opens at (D-128): below 1 shows the figure a bit smaller in its frame, with air around it. Clamped to Preview Zoom Range.
Preview Stick Dead Zone (PreviewStickDeadZone)float0.200000PreviewStick tilt ignored before it turns or zooms the preview.
Preview Stick Degrees Per Second (PreviewStickDegreesPerSecond)float200.000000PreviewTurning with the right stick: degrees per second at full tilt.
Preview Stick Zoom Per Second (PreviewStickZoomPerSecond)float0.600000PreviewZoom per second with the right stick (up / down) at full tilt.
Preview Zoom Range (PreviewZoomRange)FVector2D(X=0.700000,Y=2.200000)PreviewZoom range (1 = the framing; below 1 = wider, the figure smaller) and the step of one mouse wheel notch.
Preview Zoom Step (PreviewZoomStep)float0.150000Preview
Default Style (DefaultStyle)ERSEInventoryScreenStyleGridStyleThe product default; players can change it in Options -> Game -> Inventory.
Screen Widget Class (ScreenWidgetClass)TSoftClassPtr<URSEScreenWidget>NoneStyleThe grid page of the party menu. Empty = the built-in RSEInventoryScreenWidget. A Widget Blueprint derived from RSEScreenWidget receives the party menu's RSEPartyMenuViewModel and can create a RSEInventoryViewModel.
Cancel Action Text (CancelActionText)FTextNSLOCTEXT("RSEInventoryUI", "Cancel", "Cancel")Texts
Combine Action Text (CombineActionText)FTextNSLOCTEXT("RSEInventoryUI", "Combine", "Combine")Texts
Combine Prompt Text (CombinePromptText)FTextNSLOCTEXT("RSEInventoryUI", "CombinePrompt", "Choose the item to combine with {Item}.")TextsCombining: pick the second key item.
Compare for Format (CompareForFormat)FTextNSLOCTEXT("RSEInventoryUI", "CompareFor", "For {Character}:")TextsTooltip: the stat comparison is for {Character}.
Discard Action Text (DiscardActionText)FTextNSLOCTEXT("RSEInventoryUI", "Discard", "Discard")Texts
Equip Action Text (EquipActionText)FTextNSLOCTEXT("RSEInventoryUI", "Equip", "Equip")Texts--- Texts ---
Equipped Format (EquippedFormat)FTextNSLOCTEXT("RSEInventoryUI", "Equipped", "{Character} equips {Item}.")TextsMessages after commands. {Item} {Character} {Slot}.
In Battle Text (InBattleText)FTextNSLOCTEXT("RSEInventoryUI", "InBattle", "The inventory cannot change during a battle.")Texts
Locked Text (LockedText)FTextNSLOCTEXT("RSEInventoryUI", "Locked", "Fixed equipment (guest)")TextsGuests' slots (D-011).
Move Action Text (MoveActionText)FTextNSLOCTEXT("RSEInventoryUI", "Move", "Move")Texts
No Room Text (NoRoomText)FTextNSLOCTEXT("RSEInventoryUI", "NoRoom", "There is no room there.")Texts
Not Allowed Text (NotAllowedText)FTextNSLOCTEXT("RSEInventoryUI", "NotAllowed", "You may not change this.")Texts
Place Prompt Text (PlacePromptText)FTextNSLOCTEXT("RSEInventoryUI", "PlacePrompt", "Choose where to put {Item}.")TextsMove mode: place the held item.
Read Action Text (ReadActionText)FTextNSLOCTEXT("RSEInventoryUI", "Read", "Read")Texts
Replaces Format (ReplacesFormat)FTextNSLOCTEXT("RSEInventoryUI", "Replaces", "Replaces: {Item}")TextsTooltip: the item the comparison replaces. {Item}.
Size Format (SizeFormat)FTextNSLOCTEXT("RSEInventoryUI", "Size", "{Width}x{Height} x{Count}")TextsTooltip: size and count. {Width} {Height} {Count}.
Size Only Format (SizeOnlyFormat)FTextNSLOCTEXT("RSEInventoryUI", "SizeOnly", "{Width}x{Height}")TextsTooltip of a worn item (none in the inventory): size only. {Width} {Height}.
Slot Format (SlotFormat)FTextNSLOCTEXT("RSEInventoryUI", "Slot", "Slot: {Slot}")TextsTooltip: the slot it goes into. {Slot}.
Sort Action Text (SortActionText)FTextNSLOCTEXT("RSEInventoryUI", "Sort", "Sort")Texts
Sorted Text (SortedText)FTextNSLOCTEXT("RSEInventoryUI", "Sorted", "Sorted.")Texts
Stats Title (StatsTitle)FTextNSLOCTEXT("RSEInventoryUI", "StatsTitle", "Stats")Texts
Unequip Action Text (UnequipActionText)FTextNSLOCTEXT("RSEInventoryUI", "Unequip", "Unequip")Texts
Unequipped Format (UnequippedFormat)FTextNSLOCTEXT("RSEInventoryUI", "Unequipped", "{Item} back in the inventory.")Texts
Use Action Text (UseActionText)FTextNSLOCTEXT("RSEInventoryUI", "Use", "Use")Texts
Use on Format (UseOnFormat)FTextNSLOCTEXT("RSEInventoryUI", "UseOn", "Use on {Target}")Texts{Target}: the object the player stands at.
Auto Distribute Confirm Text (AutoDistributeConfirmText)FTextNSLOCTEXT("RSEInventoryUI", "AutoDistributeConfirm", "Deal every bag again by the Smart rule?")Texts|Per Character
Auto Distributed Text (AutoDistributedText)FTextNSLOCTEXT("RSEInventoryUI", "AutoDistributed", "The bags were dealt again.")Texts|Per Character
Auto Distribute Text (AutoDistributeText)FTextNSLOCTEXT("RSEInventoryUI", "AutoDistribute", "Auto-distribute")Texts|Per CharacterThe tab-row button and its confirmation.
Bag Tab Format (BagTabFormat)FTextNSLOCTEXT("RSEInventoryUI", "BagTab", "{Bag}: {Member}")Texts|Per CharacterThe bag tab of the selected member. {Member}, {Bag} (Inventory Rules -> Bag name).
Capacity Format (CapacityFormat)FTextNSLOCTEXT("RSEInventoryUI", "Capacity", "{Used}/{Total}")Texts|Per CharacterThe bag's capacity under the tabs. {Used} {Total}.
Container Full Text (ContainerFullText)FTextNSLOCTEXT("RSEInventoryUI", "ContainerFull", "There is no room in that bag.")Texts|Per Character
Gave Format (GaveFormat)FTextNSLOCTEXT("RSEInventoryUI", "Gave", "{Item} → {Member}")Texts|Per CharacterAfter a give / take / send. {Item} {Member} (the receiver; the stash's name when sent there).
Give to Format (GiveToFormat)FTextNSLOCTEXT("RSEInventoryUI", "GiveTo", "Give to {Member}")Texts|Per CharacterAction: give the item to another member. {Member}.
Pending Hint Text (PendingHintText)FTextNSLOCTEXT("RSEInventoryUI", "PendingHint", "Loot nobody could carry. Take it or give it to someone.")Texts|Per CharacterShown above the pending loot grid.
Send to Stash Text (SendToStashText)FTextNSLOCTEXT("RSEInventoryUI", "SendToStash", "Send to stash")Texts|Per Character
Stash Unavailable Text (StashUnavailableText)FTextNSLOCTEXT("RSEInventoryUI", "StashUnavailable", "The stash opens only at a save point.")Texts|Per Character
Take Format (TakeFormat)FTextNSLOCTEXT("RSEInventoryUI", "Take", "Take ({Member})")Texts|Per CharacterAction: take the item from the stash or the pending loot into the selected member's bag. {Member}.
Used Cells Format (UsedCellsFormat)FTextNSLOCTEXT("RSEInventoryUI", "UsedCells", "Cells used: {Used}")Texts|Per CharacterA container that grows (the stash, the pending loot). {Used}.
Weight Format (WeightFormat)FTextNSLOCTEXT("RSEInventoryUI", "Weight", "{Weight}/{Capacity} kg")Texts|Per CharacterWeight (Inventory Rules -> Use Weight). {Weight} {Capacity}.
Wrong Mode Text (WrongModeText)FTextNSLOCTEXT("RSEInventoryUI", "WrongMode", "Not in this inventory mode.")Texts|Per Character

RPG Saga Engine: Items

Class URSEItemSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Item and equipment rules.

SettingTypeDefaultCategoryRestartDescription
Equipment Slots (EquipmentSlots)TArray<FRSEEquipmentSlotDef>(9 entries)EquipmentCharacter equipment slots, in display order (D-024).
Off Hand Slot Id (OffHandSlotId)FNameOffHandEquipmentSlot a two-handed weapon also occupies.
Allow Discard (bAllowDiscard)boolFalseGrid InventoryThe player may discard consumables and equipment from the inventory (the Discard command). Key items and documents can never be discarded. Off by default: classic JRPGs do not drop items.
Max Item Grid Size (MaxItemGridSize)FIntPoint(X=4,Y=4)Grid InventoryLargest Grid Size an item may have (data validation).
Permission Policy Class (PermissionPolicyClass)TSoftClassPtr<URSEInventoryPermissionPolicy>NoneGrid InventoryWho may change what through inventory commands (co-op, D-094 / D-124): a Blueprint or C++ class derived from RSEInventoryPermissionPolicy. Empty = everyone may do everything (single player; the host decides later).
Sort Order (SortOrder)TArray<ERSEItemSortKey>(5 entries)Grid InventoryAuto-sort order: the first key decides, the next ones break ties.
Stash Tabs (StashTabs)TArray<FRSEItemContainerDef>(3 entries)Grid InventoryTabs of the party's stash in grid inventories, each a grid container. An item shows in the first tab whose filter accepts it (the first tab when none does), so every item always has a place.
Default Rarity (DefaultRarity)FGameplayTag(TagName="Item.Rarity.Common")Grid Inventory|Rarity
Rarity Tiers (RarityTiers)TArray<FRSEItemRarityTier>(5 entries)Grid Inventory|RarityRarity tiers (name, color, rank). Items without a rarity use Default Rarity.
Default Max Stack (DefaultMaxStack)int3299InventoryStack limit for items that do not set their own.
Starting Items (StartingItems)TMap<TSoftObjectPtr<URSEItemData> ,int32>(15 entries)InventoryItems in the inventory when a new game starts.

RPG Saga Engine: Level Tools

Class URSELevelToolsSettings (module RSEEditor), Project Settings, Project, RPG Saga Engine. Level tools of D-062 (docs/design/encounter-editor.md): the encounter layout editor mode, the character preview actor and the gallery map builder.

SettingTypeDefaultCategoryRestartDescription
Blast Color (BlastColor)FLinearColor(R=1.000000,G=0.500000,B=0.000000,A=0.300000)Encounter Layout|ColorsTiles an explosive field object would hit (shown for the selected object), tinted by the zone it leaves when it has one.
Blocked Color (BlockedColor)FLinearColor(R=0.000000,G=0.000000,B=0.000000,A=0.450000)Encounter Layout|ColorsUnwalkable tiles.
Deployment Color (DeploymentColor)FLinearColor(R=0.150000,G=0.450000,B=1.000000,A=0.450000)Encounter Layout|ColorsTiles where the player deploys (the encounter's Deployment Tiles).
Enemy Color (EnemyColor)FLinearColor(R=1.000000,G=0.250000,B=0.200000,A=0.400000)Encounter Layout|ColorsTile of an enemy.
Field Object Color (FieldObjectColor)FLinearColor(R=0.800000,G=0.600000,B=0.300000,A=0.400000)Encounter Layout|ColorsTile of a field object (its own color is used for the box).
Grid Line Color (GridLineColor)FLinearColor(R=0.080000,G=0.080000,B=0.100000,A=1.000000)Encounter Layout|ColorsOutline of every tile of the zone.
Hover Invalid Color (HoverInvalidColor)FLinearColor(R=1.000000,G=0.000000,B=0.000000,A=0.500000)Encounter Layout|ColorsTile under the cursor when the action is refused there (blocked, occupied, outside).
Hover Valid Color (HoverValidColor)FLinearColor(R=0.200000,G=1.000000,B=0.350000,A=0.500000)Encounter Layout|ColorsTile under the cursor when the action is allowed there.
Issue Color (IssueColor)FLinearColor(R=1.000000,G=0.000000,B=0.600000,A=0.600000)Encounter Layout|ColorsTiles with a validation problem (overlap, unwalkable...).
Row Color (RowColor)FLinearColor(R=0.600000,G=0.600000,B=1.000000,A=0.350000)Encounter Layout|ColorsATB stage: the rows of the enemy side.
Selection Color (SelectionColor)FLinearColor(R=1.000000,G=0.900000,B=0.100000,A=1.000000)Encounter Layout|ColorsThe selected element's outline.
ATBPick Radius (ATBPickRadius)float80.000000Encounter Layout|DrawingATB stage: distance around a slot that counts as a click on its unit.
Show Appearance (bShowAppearance)boolTrueEncounter Layout|DrawingEnemy markers use the character's appearance (else only the placeholder shape).
Show Labels (bShowLabels)boolTrueEncounter Layout|DrawingName and level labels above the enemies, names above field objects.
Label Height (LabelHeight)float220.000000Encounter Layout|DrawingHeight of the labels above the tile.
Surface Offset (SurfaceOffset)float3.000000Encounter Layout|DrawingHeight of the drawn tiles above the surface (avoids flicker with the floor).
Tile Fill (TileFill)float0.900000Encounter Layout|DrawingDrawn tile size as a fraction of the tile (a gap shows the grid).
Validate on Change (bValidateOnChange)boolTrueEncounter Layout|EditingValidate the layout after every edit (the Issues list and the tile markers).
Max Brush Radius (MaxBrushRadius)int326Encounter Layout|EditingLargest radius of the deployment brush (0 = one tile).
Delete Key (DeleteKey)FKeyDeleteEncounter Layout|KeysDeletes the selected enemy or field object.
Rotate Clockwise Key (RotateClockwiseKey)FKeyEEncounter Layout|KeysRotates the selected enemy clockwise (Tactics facing).
Rotate Counter Clockwise Key (RotateCounterClockwiseKey)FKeyQEncounter Layout|KeysRotates the selected enemy counter-clockwise.
Toggle Row Key (ToggleRowKey)FKeyREncounter Layout|KeysATB: moves the selected enemy to the other row.
Content Root (ContentRoot)FDirectoryPath(Path="/Game")GalleryOnly content under this path goes on display ("/Game" = the whole project).
Excluded Paths (ExcludedPaths)TArray<FDirectoryPath>(2 entries)GalleryContent paths left out (test and dev data).
Floor Mesh (FloorMesh)TSoftObjectPtr<UStaticMesh>/Engine/BasicShapes/Cube.CubeGalleryFloor of the gallery map (scaled to cover every row).
Game Mode (GameMode)TSoftClassPtr<AGameModeBase>/Script/RSE.RSEExplorationGameModeGalleryGame mode of the gallery map (the player walks between the stations).
Label World Size (LabelWorldSize)float28.000000GallerySize of the label text panels.
Max Ability Pads (MaxAbilityPads)int320GalleryMost ability pads (0 = every ability).
Pad Mesh (PadMesh)TSoftObjectPtr<UStaticMesh>/Engine/BasicShapes/Cylinder.CylinderGalleryPad under each ability demo. Empty = none.
Pad Scale (PadScale)FVector(X=2.500000,Y=2.500000,Z=0.050000)GalleryScale of the pad mesh.
Pedestal Mesh (PedestalMesh)TSoftObjectPtr<UStaticMesh>/Engine/BasicShapes/Cube.CubeGalleryPedestal shown under field objects and class stations.
Row Spacing (RowSpacing)float900.000000GalleryDistance between two rows (characters, classes, abilities, field objects, world actors).
Station Spacing (StationSpacing)float350.000000GalleryDistance between two stations of a row.
Stations Per Line (StationsPerLine)int3212GalleryStations per row before a new line starts.

RPG Saga Engine: Living NPCs

Class URSENPCSettings (module RSE), Project Settings, Project, RPG Saga Engine. Living NPCs in the world (D-104, docs/product/living-npcs.md): how they walk, pause, look around, make way for the player, stop to talk, sleep far from the player and show their activities.

SettingTypeDefaultCategoryRestartDescription
Activity Animations (ActivityAnimations)TMap<FGameplayTag,FRSECharacterAnim>(0 entries)ActivitiesLooping animations of the activities (NPC.Activity.Work -> hammering, NPC.Activity.Sit -> sitting) on characters built with an RSE anim set, while the NPC stays at its place. Missing = the locomotion idle.
Activity Blend Out (ActivityBlendOut)float0.250000ActivitiesBlend out of an activity animation when the NPC starts walking or talking.
Activity Idle Slots (ActivityIdleSlots)TMap<FGameplayTag,FGameplayTag>(3 entries)ActivitiesD-153: an activity can play an idle slot of the NPC's own animation set instead (NPC.Activity.Chat -> Idle.Anim.Chat, NPC.Activity.Sit -> Idle.Anim.Sit): the same slots the party's idle life uses, filled by the Animation & FX Library for any skeleton. Tried first; an NPC whose set has no clip for the slot falls back to Activity Animations.
Appear Distance (AppearDistance)float3000.000000ArrivingWhen the hour changes, an NPC walks to its next place, unless where it is and where it goes are both farther than this from the player: then it appears there (nobody sees it). Time skips and sleeping NPCs always appear. 0 = always walk.
Max Walk Seconds (MaxWalkSeconds)float90.000000ArrivingA walk that takes longer than this (stuck, blocked) ends with the NPC appearing at its place. 0 = never.
Chat Ends when Focused (bChatEndsWhenFocused)boolTrueChatsThe talk is interrupted when the player comes closer than this to either NPC and looks at it (its prompt shows). Off: it goes on.
Chat Line Gap (ChatLineGap)FVector2D(X=2.400000,Y=4.200000)ChatsSeconds between two lines of a talk between NPCs (random between the two).
Idle Life Seed (IdleLifeSeed)int321729Idle LifeSeed of the idle life's random choices (the NPC's id is mixed in): the same level plays the same way.
Look Around Angle (LookAroundAngle)float70.000000Looking AroundLargest look-around turn either way.
Look Around Chance (LookAroundChance)float0.500000Looking AroundChance to look around at each pause (turn a little, then back).
Acceptance Radius (AcceptanceRadius)float30.000000MovingA point counts as reached within this distance.
Snap to Ground (bSnapToGround)boolTrueMovingNPCs that are not pawns keep their feet on the ground with a trace down (the Visibility channel).
Use Navigation (bUseNavigation)boolTrueMovingWalks follow the navigation mesh when the level has one; without it (or off) they walk straight.
Default Wander Radius (DefaultWanderRadius)float500.000000MovingWander: default distance from the place (an activity or a place may set its own).
Ground Trace Height (GroundTraceHeight)float120.000000MovingHeight of the ground trace above and below the feet.
Pause Max (PauseMax)float6.000000Moving
Pause Min (PauseMin)float2.000000MovingPause at a wander point or a route stop without its own pause (random between the two).
Turn Rate (TurnRate)float360.000000MovingHow fast they turn toward where they walk.
Walk Speed (WalkSpeed)float140.000000MovingWalking speed (an NPC may set its own; an activity scales it).
Face Player when Talking (bFacePlayerWhenTalking)boolTruePlayerIt turns to face the player when a conversation starts (NPCs that are not RSE NPC actors; those have their own setting).
Stop when Focused (bStopWhenFocused)boolTruePlayerIt stops walking while the player looks at it (its talk prompt is shown), so the player can talk.
Make Way Distance (MakeWayDistance)float160.000000PlayerA walking NPC with the player this close ahead makes way: it stops and steps aside.
Make Way Step (MakeWayStep)float110.000000PlayerHow far it steps aside.
Resume Delay (ResumeDelay)float1.200000PlayerAfter a conversation, it waits this long before going on.
Assault Noise Radius (AssaultNoiseRadius)float1500.000000Reactions
Assault Is Crime (bAssaultIsCrime)boolTrueReactionsA battle begun against a living NPC (the party attacked it) is a crime of assault, heard this far (cm).
Guards Detect Crimes (bGuardsDetectCrimes)boolTrueReactionsGuards (reactions with Crime rules) notice crimes: theft, trespass, assault, and the Report Crime effect. Off = nobody answers crimes.
React to Battles (bReactToBattles)boolTrueReactionsNPCs react to a battle on the live map (flee, watch, cower, help: their Reaction data). Off = they go on with their day as if nothing happened (before D-173 they froze).
Theft Is Crime (bTheftIsCrime)boolTrueReactionsA thief who stole from an NPC is a crime of theft (NPC.Crime.Theft), seen or heard by guards.
Default Reaction (DefaultReaction)TSoftObjectPtr<URSENPCReactionData>NoneReactionsThe reaction of NPCs whose schedule and component name none (a civilian who watches from a distance by default). Empty = the defaults of the Reaction Data class: watch from 11 m, within 22 m of the fight.
Theft Noise Radius (TheftNoiseRadius)float0.000000ReactionsHow far a theft is heard (cm) by guards who do not see it: 0 = only seen.
Activation Check Interval (ActivationCheckInterval)float0.750000UpdatesHow often the NPCs' distance to the player is checked (sleep / wake), in one batch for the whole level.
Offscreen Seconds (OffscreenSeconds)float2.000000UpdatesSeconds without being rendered that count as "off screen".
Offscreen Sleep Distance (OffscreenSleepDistance)float2500.000000UpdatesNPCs off screen for a while and farther than this also sleep (0 = only by distance).
Sleep Distance (SleepDistance)float6000.000000UpdatesNPCs farther than this from the player sleep: no thinking, no walking (Steam Deck budget). 0 = never sleep.
Think Interval (ThinkInterval)float0.250000UpdatesHow often a living NPC decides what to do (next wander point, route stop, making way). No per-frame tick while standing.

RPG Saga Engine: Living World

Class URSELivingWorldSettings (module RSE), Project Settings, Project, RPG Saga Engine. Project Settings -> RPG Saga Engine -> Living World (D-157): how interactables show themselves (a highlight when near, a hint from farther, a sparkle on valuables, card players marked among NPCs), the strike that breaks objects, the effects of hazards and world reactions.

SettingTypeDefaultCategoryRestartDescription
Caravan Skip Snap Hours (CaravanSkipSnapHours)float0.500000CaravansA clock skip at least this long puts caravans where the clock says at once (game hours); shorter ones they walk.
Caravan Smooth Distance (CaravanSmoothDistance)float6000.000000CaravansA caravan this near a player moves every frame (cm).
Caravan Snap Distance (CaravanSnapDistance)float3000.000000CaravansFarther behind its timetable than this, it jumps there while nobody sees it (cm).
Caravan Update Interval (CaravanUpdateInterval)float1.000000CaravansHow often a caravan far from the players updates its place (s).
Caravan Walk Speed (CaravanWalkSpeed)float140.000000CaravansIts walking speed when it catches up after a halt (cm/s, times the data's Catch Up Multiplier).
Hazard Fx (HazardFx)TMap<FGameplayTag,FRSEWorldFx>(4 entries)EffectsWhat a broken object's hazard looks like (Interactable.Hazard.*).
Hurt Color (HurtColor)FRSEUIColor(Token="Negative",Alpha=1.000000,Lightness=0.016834,Chroma=0.914864,Hue=7.362913,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))EffectsA member hurt by a hazard: the notification color.
Reaction Fx (ReactionFx)TMap<FGameplayTag,FRSEWorldFx>(6 entries)EffectsWhat a world reaction looks like (World.Reaction.Fx.*).
Hints Avoid Overlap (bHintsAvoidOverlap)boolTrueHintsHints of objects close together stack upward instead of drawing over each other.
Challenger Color (ChallengerColor)FRSEUIColor(Token="Info",Alpha=1.000000,Lightness=0.066506,Chroma=0.653430,Hue=-3.701602,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Hints
Challenger Distance (ChallengerDistance)float2000.000000Hints
Challenger Head Socket (ChallengerHeadSocket)FNameheadHintsSocket or bone of the NPC's body mesh the mark floats over. Missing on the mesh = the top of the NPC's visible bounds.
Challenger Height (ChallengerHeight)float35.000000HintsOver the top of the NPC's head (cm): the Challenger Head Socket of its body mesh, else the top of its visible bounds.
Challenger Mark (ChallengerMark)FTextINVTEXT("♠")HintsNPCs who play cards wear this mark over their heads (a short glyph) within Challenger Distance.
Hint Background (HintBackground)FRSEUIColor(Token="Primary",Alpha=0.600000,Lightness=-0.327827,Chroma=0.363428,Hue=8.707818,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Hints
Hint Font Size (HintFontSize)int3213Hints
Hint Format (HintFormat)FTextNSLOCTEXT("RSELivingWorld", "HintFormat", "{Name} · {Action}")HintsA hint: {Name}, {Action}.
Hint Height (HintHeight)float40.000000HintsHeight of the hint above the object's top (cm).
Hint Stack Gap (HintStackGap)float3.000000HintsGap between stacked hints (screen units).
Hint Stack Max Steps (HintStackMaxSteps)int326HintsThe most moves a hint makes to find a free place (the rest of a crowd overlaps; the farthest hints are the first to give way).
Hints ZOrder (HintsZOrder)int324Hints
Hint Text Color (HintTextColor)FRSEUIColor(Token="Text",Alpha=1.000000,Lightness=-0.001490,Chroma=4.197116,Hue=169.197342,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Hints
Debris Mesh (DebrisMesh)TSoftObjectPtr<UStaticMesh>/Engine/BasicShapes/Cube.CubeStrikeThe engine mesh thrown as debris.
Debris Seconds (DebrisSeconds)float1.400000Strike
Default Interact Anims (DefaultInteractAnims)TMap<FGameplayTag,FRSECharacterAnim>(0 entries)StrikeInteraction slots (Interact.Anim.*) of characters whose anim set has none: the strike that breaks objects.
Procedural Lunge Distance (ProceduralLungeDistance)float35.000000StrikeWithout any clip: the body lunges this far toward the object and back (cm).
Strike Impact Seconds (StrikeImpactSeconds)float0.300000StrikeThe object breaks this long after the strike starts (s): the blow lands.
Enabled (bEnabled)boolTrueVisibilityInteractables show themselves before use (highlight, hints, sparkles). Off = only the prompt in reach, as before.
Check Interval (CheckInterval)float0.200000VisibilityHow often the nearby objects are checked (s).
Default Highlight Color (DefaultHighlightColor)FLinearColor(R=1.000000,G=0.850000,B=0.450000,A=1.000000)Visibility
Highlight Color Parameter (HighlightColorParameter)FNameColorVisibility
Highlight Distance (HighlightDistance)float500.000000VisibilityObjects this near the player get the highlight (cm).
Highlight Material (HighlightMaterial)TSoftObjectPtr<UMaterialInterface>/RPGSagaEngine/Materials/LivingWorld/M_RSE_InteractHighlight.M_RSE_InteractHighlightVisibilityThe highlight: an overlay material over the object's meshes (a rim glow); its Color Parameter takes the kind's color.
Hint Distance (HintDistance)float1000.000000VisibilityObjects this near show their name and action over them (cm; a kind's Hint Distance wins).
Kind Colors (KindColors)TMap<FGameplayTag,FLinearColor>(5 entries)VisibilityThe highlight's color per kind (Interactable.Kind.*; the closest parent tag counts).
Max Hints (MaxHints)int325VisibilityAt most this many hints at once (the nearest).
Sparkle Distance (SparkleDistance)float3000.000000VisibilitySparkles show only this near the player (cm; 0 = always).
Sparkle Height (SparkleHeight)float25.000000VisibilityAbove the top of the object (cm).
Sparkle Material (SparkleMaterial)TSoftObjectPtr<UMaterialInterface>/RPGSagaEngine/Materials/LivingWorld/M_RSE_Sparkle.M_RSE_SparkleVisibilityThe sparkle of valuables: a small camera-facing sprite with this material (or a Niagara system, which wins).
Sparkle Niagara (SparkleNiagara)TSoftObjectPtr<UNiagaraSystem>NoneVisibility
Sparkle Size (SparkleSize)float36.000000Visibility

RPG Saga Engine: Map & Minimap

Class URSEMapSettings (module RSE), Project Settings, Project, RPG Saga Engine. Area map and minimap (D-089).

SettingTypeDefaultCategoryRestartDescription
Area Map Backdrop (AreaMapBackdrop)FRSEUIColor(Token="Primary",Alpha=0.900000,Lightness=-0.526921,Chroma=0.679858,Hue=0.163523,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Area MapBackground of the area map screen around the map.
Area Map Size (AreaMapSize)float760.000000Area MapSide of the square map view on the area map screen, in pixels at 1080p (smaller screens scale the window down).
Area Map View Height (AreaMapViewHeight)float760.000000Area Map
Area Map View Width (AreaMapViewWidth)float1300.000000Area MapThe map view on the area map screen, in pixels at 1080p (D-092): a wide view that fills the screen. 0 = the square Area Map Size. Smaller screens scale the window down.
Area Map Widget Class (AreaMapWidgetClass)TSoftClassPtr<URSEScreenWidget>/Script/RSE.RSEAreaMapWidgetArea MapFull area map screen (D-052). Empty = the built-in screen; a Widget Blueprint derived from RSEScreenWidget receives a RSEAreaMapViewModel.
Area Map ZOrder (AreaMapZOrder)int3260Area Map
Area Map in Party Menu (bAreaMapInPartyMenu)boolTrueArea MapD-148: the area map is a tab of the party menu (Map), like the other pages: the Map key opens the menu on it, the journal's "Show on map" moves to it. Off (or a game without the built-in party menu) = the area map screen of D-089 on its own.
Fit Playable Area (bFitPlayableArea)boolTrueArea MapAt zoom 1 the view fits the playable area (not the whole picture), and panning stays near it.
Open on Player (bOpenOnPlayer)boolTrueArea MapThe area map opens centered on the player (else on the whole map).
Show Region Names (bShowRegionNames)boolTrueArea Map
Center Keys (CenterKeys)TArray<FKey>(2 entries)Area MapCenter the view on the player.
Legend Keys (LegendKeys)TArray<FKey>(2 entries)Area MapKeys of the area map beyond the menu keys: show / hide the legend filters (gamepad: move into the legend).
Legend Width (LegendWidth)float260.000000Area MapWidth of the legend column in pixels.
Major Region Label Size (MajorRegionLabelSize)int3224Area Map
Max Zoom (MaxZoom)float6.000000Area MapZoom range of the area map (1 = the whole map fits the view).
Menu Tab Zoom Prompt Keys (MenuTabZoomPromptKeys)TArray<FKey>(2 entries)Area MapD-148: the keys the Map tab's hint shows for zooming (the camera zoom input's: the wheel, the gamepad's triggers).
Minor Region Label Size (MinorRegionLabelSize)int3213Area MapRegion names by importance (Minor, Normal, Major): size at zoom 1 (theme display font).
Minor Region Label Zoom (MinorRegionLabelZoom)float1.800000Area MapMinor region names show from this zoom.
Open Zoom (OpenZoom)float1.000000Area MapZoom the area map opens at (1 = the playable area fits the view).
Pan Step (PanStep)float0.120000Area MapShare of the visible map one D-pad / arrow press pans.
Pin Wheel Back Prompt Keys (PinWheelBackPromptKeys)TArray<FKey>(3 entries)Area MapD-152: the keys the pin wheel names to back out (those of the device in use; a click outside the slices cancels too).
Player Arrow Icon (PlayerArrowIcon)TSoftObjectPtr<UTexture2D>NoneArea MapOptional arrow icon (points up); empty = a drawn triangle.
Player Arrow Size (PlayerArrowSize)float22.000000Area MapPlayer arrow size in pixels on the area map.
Player Color (PlayerColor)FRSEUIColor(Token="Accent",Alpha=1.000000,Lightness=0.044895,Chroma=0.961445,Hue=11.376876,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Area Map
Region Label Color (RegionLabelColor)FRSEUIColor(Token="Text",Alpha=0.950000,Lightness=0.012879,Chroma=4.664923,Hue=165.714676,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Area Map
Region Label Outline (RegionLabelOutline)FRSEUIColor(Token="Primary",Alpha=0.850000,Lightness=-0.277798,Chroma=0.166567,Hue=167.457993,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Area MapOutline of region names (dark, for contrast on any ground).
Region Label Outline Size (RegionLabelOutlineSize)int322Area Map
Region Label Size (RegionLabelSize)int3214Area MapRegion name size (theme display font) at zoom 1; it grows a little as the player zooms in.
Zoom Step (ZoomStep)float1.400000Area MapZoom factor of one wheel notch or one tab press.
Compass North from Map (bCompassNorthFromMap)boolTrueCompassNorth on the compass is the map's north (else the world's +X).
Compass Pin Objective to Edge (bCompassPinObjectiveToEdge)boolTrueCompassThe tracked objective stays at the bar's edge with an arrow when it is behind the player.
Compass Show Distance (bCompassShowDistance)boolTrueCompassDistance in meters under the tracked objective and pins.
Show Compass (bShowCompass)boolTrueCompassThe compass at the top of the screen: cardinal points, the tracked objective, pins and important places (players can turn it off).
Compass Background (CompassBackground)FRSEUIColor(Token="Primary",Alpha=0.550000,Lightness=-0.348694,Chroma=0.179359,Hue=21.284424,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Compass
Compass Cardinal Names (CompassCardinalNames)TArray<FText>(8 entries)CompassLetters of the cardinal points (north, east, south, west) and of the four between them (NE, SE, SW, NW).
Compass Fade Start (CompassFadeStart)float12000.000000CompassPlaces start fading out from this distance (to Compass Max Distance).
Compass Field Of View (CompassFieldOfView)float170.000000CompassHow much of the horizon the bar shows (degrees from edge to edge).
Compass Height (CompassHeight)float34.000000Compass
Compass Max Distance (CompassMaxDistance)float25000.000000CompassPlaces farther than this are not shown (the tracked objective and pins always are).
Compass North Color (CompassNorthColor)FRSEUIColor(Token="Negative",Alpha=1.000000,Lightness=0.024303,Chroma=0.871947,Hue=7.490834,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Compass
Compass Tick Color (CompassTickColor)FRSEUIColor(Token="Text",Alpha=0.800000,Lightness=-0.001490,Chroma=4.197116,Hue=169.197342,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Compass
Compass Top Offset (CompassTopOffset)float18.000000CompassDistance from the top of the screen in pixels at 1080p.
Compass Vertical Threshold (CompassVerticalThreshold)float400.000000CompassUp / down arrow when a place is this much higher or lower than the player.
Compass Widget Class (CompassWidgetClass)TSoftClassPtr<URSEScreenWidget>/Script/RSE.RSECompassWidgetCompassCompass HUD (D-052). Empty = the built-in one; a Widget Blueprint derived from RSEScreenWidget receives a RSECompassViewModel.
Compass Width (CompassWidth)float620.000000CompassWidth and height of the compass bar in pixels at 1080p.
Compass ZOrder (CompassZOrder)int322Compass
Show Difficulty Overlay (bShowDifficultyOverlay)boolTrueDifficulty OverlayThe area map tints each zone of the level by how dangerous it is for the party now: a zone is a part of the level covered by an RSE Area Volume whose area names a progression zone (its level = the middle of the zone's enemy levels). The rating uses Interactables -> Danger margins, like the danger warnings. The player can turn it off (options menu).
Difficulty Colors (DifficultyColors)TArray<FLinearColor>(4 entries)Difficulty OverlayThe tint per rating: Safe, Fair, Risky, Deadly. Keep the alpha low: the overlay should be barely there, but noticeable.
Difficulty Overlay Blur (DifficultyOverlayBlur)int323Difficulty OverlayBlur passes that soften the zones' edges (0 = hard edges).
Difficulty Overlay Resolution (DifficultyOverlayResolution)int32128Difficulty OverlayOverlay pixels per map side (blurred and filtered: zones get soft edges; 128 costs 64 KB).
Fog Of War (bFogOfWar)boolFalseFog Of WarUnexplored parts of maps stay hidden until the player comes near (a map can override it).
Fog Color (FogColor)FLinearColor(R=0.020000,G=0.020000,B=0.030000,A=0.920000)Fog Of War
Fog Resolution (FogResolution)int3296Fog Of WarFog cells per map side (the saved mask is Resolution x Resolution bits).
Reveal Interval (RevealInterval)float0.500000Fog Of WarHow often the fog is revealed around the player.
Reveal Radius (RevealRadius)float2500.000000Fog Of WarHow far around the player the map is revealed.
Auto Markers (AutoMarkers)TArray<FRSEMapAutoMarkerRule>(10 entries)MarkersWhich actors get markers automatically (first match wins).
Card Player Category (CardPlayerCategory)FGameplayTag(TagName="Map.Marker.CardPlayer")MarkersD-157: NPCs with a Card Challenger component (card players) get this category when no rule gave them another.
Categories (Categories)TArray<FRSEMapMarkerCategory>(18 entries)MarkersHow every marker category looks. Categories without an entry use a white dot.
Objective Category (ObjectiveCategory)FGameplayTag(TagName="Map.Marker.Objective")MarkersCategory of the tracked quest's objective marker.
Pin Category (PinCategory)FGameplayTag(TagName="Map.Marker.Pin")MarkersCategory of player pins.
Quest Giver Category (QuestGiverCategory)FGameplayTag(TagName="Map.Marker.QuestGiver")MarkersNPCs whose Map Marker component (or quest-giver id) names the giver of a quest the player can start get this category.
Quest Objective Category (QuestObjectiveCategory)FGameplayTag(TagName="Map.Marker.QuestObjective")MarkersCategory of current objectives of active quests that are not tracked (D-092).
Update Interval (UpdateInterval)float0.100000MarkersHow often moving markers (roaming enemies) and the player position are refreshed.
Battle Check Interval (BattleCheckInterval)float0.250000MinimapHow often the minimap checks whether a battle runs (it hides during battles).
Minimap Compass Ring (bMinimapCompassRing)boolTrueMinimapD-148: a compass ring around the minimap with N / E / S / W (turning with the map; north highlighted).
Minimap Info Lines (bMinimapInfoLines)boolTrueMinimapShows the extra lines other systems put under the minimap (the clock, D-104; URSEMapWorldSubsystem::SetMinimapInfo).
Minimap Region Name (bMinimapRegionName)boolTrueMinimapShows the name of the region the player is in under the minimap.
Minimap Smooth Motion (bMinimapSmoothMotion)boolTrueMinimapD-152: the minimap glides between its position updates (a few per second): the view, the player arrow and the markers move every frame from where they are shown toward the newest update, over the time between updates, so it never steps or jumps while following, turning or stopping. Ticks only while the minimap is shown and moving.
Pin Objective to Edge (bPinObjectiveToEdge)boolTrueMinimapThe objective marker sticks to the minimap's edge with an arrow when it is out of view.
Show Minimap (bShowMinimap)boolTrueMinimap--- Minimap ---
Default Minimap Zoom (DefaultMinimapZoom)int321Minimap
Game Modes Without Minimap (GameModesWithoutMinimap)TArray<TSoftClassPtr<AGameModeBase> >(1 entries)MinimapNo minimap in worlds run by these game modes (main menu).
Minimap Alignment (MinimapAlignment)FVector2D(X=1.000000,Y=0.000000)Minimap
Minimap Anchor (MinimapAnchor)FVector2D(X=1.000000,Y=0.000000)MinimapNormalized screen anchor and pivot of the minimap, plus a pixel offset.
Minimap Background (MinimapBackground)FRSEUIColor(Token="Primary",Alpha=0.850000,Lightness=-0.348694,Chroma=0.179359,Hue=21.284424,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Minimap
Minimap Frame Color (MinimapFrameColor)FRSEUIColor(Token="Accent",Alpha=1.000000,Lightness=-0.003934,Chroma=0.384095,Hue=0.870895,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Minimap
Minimap Frame Width (MinimapFrameWidth)float3.000000Minimap
Minimap Glide Max Seconds (MinimapGlideMaxSeconds)float0.350000Minimap
Minimap Glide Min Seconds (MinimapGlideMinSeconds)float0.040000MinimapD-152: the glide toward an update lasts the time since the previous update, kept inside these limits (seconds).
Minimap Icon Scale (MinimapIconScale)float0.750000MinimapMinimap icons are this share of their area map size.
Minimap Offset (MinimapOffset)FVector2D(X=-24.000000,Y=24.000000)Minimap
Minimap Ring Color (MinimapRingColor)FRSEUIColor(Token="Primary",Alpha=0.820000,Lightness=-0.310384,Chroma=0.141913,Hue=21.671797,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Minimap
Minimap Ring Text Color (MinimapRingTextColor)FRSEUIColor(Token="Text",Alpha=1.000000,Lightness=-0.001490,Chroma=4.197116,Hue=169.197342,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Minimap
Minimap Ring Width (MinimapRingWidth)float22.000000MinimapD-148: width of the compass ring (pixels at 1080p, outside the map's edge) and its colors.
Minimap Rotation (MinimapRotation)ERSEMinimapRotationRotateWithPlayerMinimapHow the minimap turns (the player may choose in Options -> Interface; D-148 default: around the player).
Minimap Shape (MinimapShape)ERSEMinimapShapeRoundMinimap
Minimap Size (MinimapSize)float220.000000MinimapSide (or diameter) in pixels at 1080p.
Minimap Snap Span Fraction (MinimapSnapSpanFraction)float0.500000MinimapD-152: a jump longer than this share of the visible span (a teleport, a zone change) is shown at once, not glided.
Minimap Turn Speed (MinimapTurnSpeed)float540.000000MinimapD-148: how fast a turning minimap follows the heading (degrees per second; 0 = at once). Smooths the 10 Hz position updates.
Minimap Widget Class (MinimapWidgetClass)TSoftClassPtr<URSEScreenWidget>/Script/RSE.RSEMinimapWidgetMinimapMinimap HUD (D-052). Empty = the built-in screen; a Widget Blueprint derived from RSEScreenWidget receives a RSEMinimapViewModel.
Minimap Zoom Levels (MinimapZoomLevels)TArray<float>(3 entries)MinimapWorld width the minimap shows at each zoom level (meters across); the player cycles them.
Minimap ZOrder (MinimapZOrder)int322Minimap
Allow Pins (bAllowPins)boolTruePinsPlayer pins on the area map (Confirm / right click).
Replace Oldest Pin (bReplaceOldestPin)boolTruePinsWith Max Pins Per Map reached, a new pin replaces the oldest one (off = it is refused).
Max Pins Per Map (MaxPinsPerMap)int328PinsPins per map (0 = no limit).
Pin Pick Radius (PinPickRadius)float0.030000PinsA pin press this close (share of the visible map) to a pin edits it (change its type or remove it).
Pin Types (PinTypes)TArray<FRSEMapPinType>(6 entries)PinsThe pin types the pin wheel offers, in wheel order (clockwise from the top). The first one is the default.
Pin Wheel Dead Zone (PinWheelDeadZone)float0.300000PinsStick or mouse movement (share of the wheel radius) needed to pick a slice.
Pin Wheel Radius (PinWheelRadius)float120.000000PinsRadius of the pin wheel in pixels at 1080p.
Click Objective Opens Journal (bClickObjectiveOpensJournal)boolTrueQuestsA click on an objective of the area map opens its quest in the journal.
Point to Exit for Other Levels (bPointToExitForOtherLevels)boolTrueQuestsObjectives on another level point at the exit toward that level.
Show Quest Objectives (bShowQuestObjectives)boolTrueQuestsObjectives of active quests with a place in the world show on the maps and the compass (players can turn it off).
Show Untracked Objectives (bShowUntrackedObjectives)boolTrueQuestsAlso the objectives of quests that are not tracked (smaller, dimmer). Off = only the tracked quest.
Objective Area Color (ObjectiveAreaColor)FRSEUIColor(Token="Accent",Alpha=0.180000,Lightness=-0.001825,Chroma=1.113716,Hue=1.749989,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))QuestsFill and outline of area objectives ("search the forest") on the maps.

RPG Saga Engine: Map Generator

Class URSEMapGeneratorSettings (module RSEEditor), Project Settings, Project, RPG Saga Engine. How Generate Map pictures a level (D-089).

SettingTypeDefaultCategoryRestartDescription
Landscape Bounds (bLandscapeBounds)boolTrueBoundsWith a landscape, the map covers the landscape only (else every mesh of the level).
Bounds Source (BoundsSource)ERSEMapBoundsSourcePlayableAreaBoundsWhat the map frames when the level has no RSE Map Bounds Volume. Playable Area (default) leaves out the background (horizon mountains, sea, sky); without a navmesh or gameplay actors it falls back to the landscape, then every mesh.
Floating Margin (FloatingMargin)float500.000000BoundsMeshes floating this far above the playable area's top are left out (clouds, sky props).
Max Content Size (MaxContentSize)float150000.000000BoundsMeshes wider than this are background (sky spheres, horizon planes) and do not count for the bounds.
Padding (Padding)float0.030000BoundsSpace around the level's content, as a share of its size on each side.
Playable Margin (PlayableMargin)float1500.000000BoundsSpace kept around each gameplay actor when the playable area is measured from them.
Hide Canopies (bHideCanopies)boolTrueHidden
Hide Foliage (bHideFoliage)boolFalseHiddenLeaves painted foliage out of the picture (grass and trees of the Foliage tool).
Hide Skeletal Meshes (bHideSkeletalMeshes)boolTrueHiddenLeaves skeletal meshes out (characters, animals, NPCs placed as plain meshes).
Canopy Tags (CanopyTags)TArray<FName>(1 entries)HiddenTree canopies and roofs: actors or components with one of these tags are left out when Hide Canopies is on.
Hidden Classes (HiddenClasses)TArray<TSoftClassPtr<AActor> >(0 entries)HiddenActors of these classes are left out of the picture (pawns and characters always are).
Hidden Tags (HiddenTags)TArray<FName>(1 entries)HiddenActors or components with one of these tags are left out of the picture.
Building Keywords (BuildingKeywords)TArray<FString>(28 entries)LayersBuildings: drawn as clear shapes with an outline and a shadow. Very low ones (Flat Height) count as ground (floors, paving).
Building Min Height (BuildingMinHeight)float250.000000Layers
Building Min Size (BuildingMinSize)float400.000000LayersUnnamed meshes at least this wide and deep (and Building Min Height tall) are buildings; smaller ones are props.
Building Tag (BuildingTag)FNameMapBuildingLayersActor or component tags that put a mesh in a layer, whatever its name: MapBuilding, MapWater, MapForest, MapRock, MapGround.
Flat Height (FlatHeight)float80.000000LayersBuilding pieces lower than this are ground (floors, paving, docks).
Forest Keywords (ForestKeywords)TArray<FString>(14 entries)LayersTrees and bushes: merged into forest shapes.
Forest Tag (ForestTag)FNameMapForestLayers
Ground Keywords (GroundKeywords)TArray<FString>(17 entries)LayersGround surfaces (terrain meshes, roads, floors): their colors make the terrain. The landscape always is ground.
Ground Min Size (GroundMinSize)float3000.000000LayersUnnamed meshes wider than this are ground (big terrain pieces).
Ground Tag (GroundTag)FNameMapGroundLayers
Ignore Keywords (IgnoreKeywords)TArray<FString>(16 entries)LayersMeshes with these words are left out (grass tufts, flowers, logs, clouds...). Checked first.
Min Rock Height (MinRockHeight)float60.000000LayersRocks lower than this are left out (pebbles).
Road Keywords (RoadKeywords)TArray<FString>(5 entries)LayersGround meshes that are roads and paths (drawn in the style's road color).
Rock Keywords (RockKeywords)TArray<FString>(4 entries)LayersRocks and cliffs.
Rock Tag (RockTag)FNameMapRockLayers
Water Keywords (WaterKeywords)TArray<FString>(5 entries)LayersWater (mesh or material name).
Water Tag (WaterTag)FNameMapWaterLayers
Batch Excluded Folders (BatchExcludedFolders)TArray<FString>(2 entries)OutputBatch generation (RSE.Map.Generate All) skips levels under these folders.
Data Prefix (DataPrefix)FStringDA_Map_Output
Output Subfolder (OutputSubfolder)FStringMapOutputFolder, next to the level, where the map's picture and data go.
Texture Prefix (TexturePrefix)FStringT_Map_Output
Default Style (DefaultStyle)TSoftObjectPtr<URSEMapStyle>/RPGSagaEngine/Data/Map/DA_MapStyle_Clean.DA_MapStyle_CleanPictureStyle of new maps (a map data asset can name its own). Empty = the Clean look.
Resolution (Resolution)int322048PicturePicture size in pixels (square). 2048 is sharp on a Steam Deck and costs about 3 MB; a map can ask for its own.
Supersample (Supersample)int322PictureRenders at this multiple of the size and scales down (smoother edges).
Target Mid Gray (TargetMidGray)float0.220000PictureTarget brightness of the picture's middle tones (0.18 = photographic middle gray).
Warmup Captures (WarmupCaptures)int322PictureExtra frames rendered before the picture (textures stream in, shadows settle).

RPG Saga Engine: Mobile Rendering

Class URSEMobileSettings (module RSE), Project Settings, Project, RPG Saga Engine. Mobile rendering (M4, D-180, docs/product/mobile.md "Rendering"): the Low / Mid / High tiers with their device profiles and frame budgets, the maps of the Mobile Preview and the materials flagged with a mobile fallback.

SettingTypeDefaultCategoryRestartDescription
Material Fallbacks (MaterialFallbacks)TArray<FRSEMobileMaterialFallback>(2 entries)MaterialsMaterials known not to compile for ES3.1, with their fallback.
Apply RSEProfile in Preview (bApplyRSEProfileInPreview)boolTruePreviewApplies the tier's RSE device profile on top of the engine preview profile while the preview runs. The editor only lets scalability (sg.*) CVars through in a preview, so this mostly matters for the report.
Default Preview Platform (DefaultPreviewPlatform)ERSEMobilePlatformAndroidPreviewPlatform the Mobile Preview uses when none is given.
Default Preview Tier (DefaultPreviewTier)FNameMidPreviewTier the Mobile Preview uses when none is given, and the device tier when the engine's pick has no Low / Mid / High family.
Preview Maps (PreviewMaps)TArray<FRSEMobilePreviewMap>(2 entries)PreviewMaps the Mobile Preview can open and capture.
Preview Settle Seconds (PreviewSettleSeconds)float8.000000PreviewSeconds between the start of the play session and the first capture (assets stream in, shaders compile).
Report Folder (ReportFolder)FStringPerf/MobilePreviewReport folder under Saved/ (a sub-folder per run).
Apply on Device (bApplyOnDevice)boolTrueTiersOn Android and iOS, applies the RSE device profile of the device's tier at game start (the tier is read from the engine's own device profile pick: Low / Mid / High family). A -dp= command line always wins.
Tiers (Tiers)TArray<FRSEMobileTier>(3 entries)TiersLow / Mid / High: device profiles and budgets. Defaults: 30 FPS, <= 600 draw calls and <= 400k triangles on a high phone (design/industry-gaps.md 4.1).

RPG Saga Engine: Narrative

Class URSENarrativeSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Narrative rules (Project Settings -> RPG Saga Engine -> Narrative): the story state of a new game.

SettingTypeDefaultCategoryRestartDescription
Starting Flags (StartingFlags)FGameplayTagContainer()New GameFlags that are true when a new game starts.
Starting Unlocked Areas (StartingUnlockedAreas)FGameplayTagContainer()New GameAreas open from the start.
Starting Variables (StartingVariables)TMap<FGameplayTag,int32>(0 entries)New GameVariables with a non-zero starting value.

RPG Saga Engine: Online

Class URSEOnlineSettings (module RSEOnline), Project Settings, Project, RPG Saga Engine. Online sessions (D-135, docs/product/online-sessions.md): which online service hosts and finds sessions, how many players, who can see a session, timeouts, reconnecting and the lobby screen.

SettingTypeDefaultCategoryRestartDescription
Keep Slots for Reconnect (bKeepSlotsForReconnect)boolTrueHostingKeep a dropped player's slot and character for them; it is given away only when a new player needs the place.
Host Map (HostMap)TSoftObjectPtr<UWorld>NoneHostingMap the host opens when the session starts. Empty = stay on the current map and start listening there (drop-in on the map being played).
Join in Progress Policy (JoinInProgressPolicy)ERSEJoinInProgressPolicySpectateUntilBattleEndsHostingPlayers who join while a battle runs (D-124 §6: they watch until it ends, then get their character).
LANPort (LANPort)int327777HostingGame port the host listens on (LAN and other IP services; Steam and EOS use their own relays). 0 = the engine's default.
Lobby Update Interval (LobbyUpdateInterval)float1.000000HostingSeconds between two lobby advertisement updates (slots, characters, battle flag); changes in between are merged.
Max Players (MaxPlayers)int324HostingPlayers in a session, host included. The co-op rules (D-094) are made for 2 to 4.
Visibility (Visibility)ERSELobbyVisibilityFriendsOnlyHostingWho can find and join a hosted session (Steam / EOS; LAN sessions are always visible on the local network).
Hide Incompatible Sessions (bHideIncompatibleSessions)boolFalseJoiningHide sessions of other game versions from search results (otherwise they are listed as incompatible).
Leave Map (LeaveMap)TSoftObjectPtr<UWorld>NoneJoiningMap a client opens after leaving a session. Empty = the project's Game Default Map.
Max Search Results (MaxSearchResults)int3250JoiningSessions shown per search.
Search Seconds (SearchSeconds)float5.000000JoiningSeconds a search may run (LAN broadcast window; online services answer sooner).
Lobby Panel Width (LobbyPanelWidth)float720.000000Lobby ScreenWidth of the built-in lobby window (slate units at the reference resolution).
Lobby Widget Class (LobbyWidgetClass)TSoftClassPtr<URSEScreenWidget>NoneLobby ScreenThe lobby screen (host, find, join, invite, character choice). Empty = the built-in screen. A Widget Blueprint derived from RSEScreenWidget replaces it and receives a RSELobbyViewModel (docs/product/custom-ui.md).
Lobby ZOrder (LobbyZOrder)int3260Lobby ScreenViewport Z order of the lobby screen.
Add Menu Entries (bAddMenuEntries)boolTrueMenusAdds Host Game and Join Game to the main menu and Host Here, Join Game, Invite and Leave to the in-game menu (D-142, RSE's menu extension point). Off = the project shows its own entries (the session nodes do the same).
Auto Reconnect (bAutoReconnect)boolTrueReliabilityA client whose connection drops tries to join the same session again.
Operation Timeout Seconds (OperationTimeoutSeconds)float30.000000ReliabilitySeconds any session operation (create, search, join, travel, leave) may take before it fails with Timeout.
Reconnect Attempts (ReconnectAttempts)int323ReliabilityReconnect attempts before giving up.
Reconnect Delay Seconds (ReconnectDelaySeconds)float3.000000ReliabilitySeconds before each reconnect attempt.
Fallback to LAN (bFallbackToLAN)boolTrueServiceWhen the chosen service is not available (Steam not running, EOS not configured, -nosteam), use the LAN provider instead of failing. The switch is logged and reported once as a notice.
Game Version (GameVersion)FStringServiceGame version advertised by hosts and compared by joiners: players join only hosts with the same version. Empty = Project Settings -> Description -> Project Version.
Provider Class (ProviderClass)TSoftClassPtr<URSESessionProvider>/Script/RSEOnline.RSESessionProvider_LANServiceThe online service for sessions: RSESessionProvider_LAN (local network, no setup), RSESessionProvider_Steam, RSESessionProvider_EOS, or your own class derived from RSESessionProvider. Steam and EOS need their engine plugin enabled and configured (docs/product/online-sessions.md). The command line -RSESessionProvider=LAN|Steam|EOS|<class path> overrides it for one run.
Session Name (SessionName)FNameGameSessionServiceThe online service's name for the session (one session per game).

RPG Saga Engine: Options

Class URSEOptionsSettings (module RSE), Project Settings, Project, RPG Saga Engine. The options screen (D-038): layout, the values offered to the player and the display defaults.

SettingTypeDefaultCategoryRestartDescription
Volume Step (VolumeStep)float0.050000AudioVolume step of the audio sliders (left / right).
Action Names (ActionNames)TArray<FRSEOptionsActionName>(31 entries)ControlsNames of the input actions in the controls list (the action's own Description wins when set; without either, the asset name is shown).
Allow Video Mode in Editor (bAllowVideoModeInEditor)boolFalseDisplayResolution and window mode can be changed in the editor's play-in-editor (off: they only work in the game).
Default VSync (bDefaultVSync)boolTrueDisplay
Show Visual Style (bShowVisualStyle)boolTrueDisplayOffer the visual style presets (D-037) to the player.
Confirm Seconds (ConfirmSeconds)float15.000000DisplaySeconds the "Keep these settings?" question waits before the resolution / window mode goes back.
Default Frame Rate Limit (DefaultFrameRateLimit)float0.000000DisplayFrame rate limit restored by "Reset to defaults" (0 = uncapped).
Default Quality Level (DefaultQualityLevel)int323DisplayOverall quality restored by "Reset to defaults" (0 = Low / Steam Deck ... 3 = Epic).
Frame Rate Limits (FrameRateLimits)TArray<float>(4 entries)DisplayFrame rate limits offered (frames per second; 0 = uncapped).
Battle Speed Steps (BattleSpeedSteps)TArray<float>(4 entries)GameBattle presentation speeds offered (multipliers of Battle Presentation -> Playback Speed).
Default Language (DefaultLanguage)FStringenGameThe game's language until the player picks one in the options (D-083): a culture code (en, ro...). Used when neither the command line (-culture=), the player's saved choice nor the project's [Internationalization] Culture in DefaultGame.ini names one, so a new project starts in this language instead of the system's. Also the options screen's default. Empty = the system language.
Languages (Languages)TArray<FString>(0 entries)GameAllow-list of the languages offered (culture codes, e.g. en, fr). Empty = every culture with a compiled translation in any localization target (the plugin's, the game's, yours); otherwise only those of the list that are compiled.
Session Rule Locked Text (SessionRuleLockedText)FTextNSLOCTEXT("RSEOptionsSettings", "SessionRuleLocked", "Set by the host")GameNote of a rule-of-play row a co-op guest cannot change (D-139): the host's value is shown, greyed out. Which rows are rules: Rules Profiles -> Co-op -> Session Rule Options.
Text Speed Names (TextSpeedNames)TArray<FText>(4 entries)GameNames of the dialog text speeds, one per Dialog -> Text Speed Steps entry (same order). Missing names show the speed in characters per second ("Instant" for 0).
Tutorials Off in Session Text (TutorialsOffInSessionText)FTextNSLOCTEXT("RSEOptionsSettings", "TutorialsOffInSession", "Off in co-op")GameNote of the Tutorials row while a co-op session runs (no tutorials in co-op, D-124 §6.9).
Background Color (BackgroundColor)FRSEUIColor(Token="Primary",Alpha=0.800000,Lightness=-0.526921,Chroma=0.679858,Hue=0.163523,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))ScreenDims whatever is behind the screen. A UI color (D-162): it follows the UI style; old .ini colors load as a fixed color.
Choice Value Width (ChoiceValueWidth)float260.000000ScreenMinimum width of the value between the arrows of choice rows; the column widens to the tab's longest value (measured, D-106).
Label Column Share (LabelColumnShare)float0.460000ScreenShare of the list width taken by the option names (the values take the rest).
List Height (ListHeight)float400.000000ScreenHeight of the scrolling list of rows.
Next Glyph (NextGlyph)FTextINVTEXT("›")Screen
Previous Glyph (PreviousGlyph)FTextINVTEXT("‹")ScreenGlyphs of the value arrows on choice rows (clickable).
Slider Height (SliderHeight)float8.000000Screen
Slider Width (SliderWidth)float220.000000ScreenWidth of slider bars.
Vertical Anchor (VerticalAnchor)float0.500000ScreenNormalized screen height of the window's center.
Widget Class (WidgetClass)TSoftClassPtr<URSEScreenWidget>NoneScreenOptions screen (D-052). Empty = the built-in themed screen. A Widget Blueprint derived from RSEScreenWidget replaces it and receives a RSEOptionsViewModel (docs/product/custom-ui.md).
Width (Width)float900.000000Screen
ZOrder (ZOrder)int3260ScreenZ-order in the viewport (above HUDs, the party menu and the main menu).

RPG Saga Engine: Pacts

Class URSEPactSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Global Pact rules (D-013).

SettingTypeDefaultCategoryRestartDescription
Award Fallen Members (bAwardFallenMembers)boolFalsePointsWhether members that ended the battle KO still earn points for their Pact.
Points Per Enemy Defeated (PointsPerEnemyDefeated)int322PointsExtra points per enemy defeated in that battle.
Points Per Victory (PointsPerVictory)int3210PointsPoints each Pact that fought (bound to a party member) earns for a victory.
Summon Resource (SummonResource)FGameplayTag(TagName="Resource.Resonance")ResonanceThe resource a summon costs: a full bar is required and consumed (D-013). Resonance is an ordinary resource of the attribute registry (D-054): its bar size, start value, gains (Pact rates: Pact.OnAct, Pact.OnHit, Pact.PerDamagePercent) and whether it grows while the summon is out are set there (Attributes settings).
Backlash Can Defeat (bBacklashCanDefeat)boolFalseSummonWhether backlash damage may defeat the summoner (false: it leaves at least 1 HP).
Summoner Return ATBFraction (SummonerReturnATBFraction)float0.000000SummonATB: gauge the summoner has when it comes back, as a fraction of the full gauge.
Summon Initial ATBFraction (SummonInitialATBFraction)float0.500000SummonATB: gauge a summon starts with, as a fraction of the full gauge.
Summon Initial CTFraction (SummonInitialCTFraction)float0.500000SummonTactics: CT a summon starts with, as a fraction of the CT threshold.
Summon Placement Range (SummonPlacementRange)int323SummonTactics: how far from the summoner (tiles) a summon or a reinforcement may appear when the tiles next to it are taken (D-081): the nearest free walkable tile. 1 = next to it only.

RPG Saga Engine: Paired Animation Detection

Class URSEPairedDetectSettings (module RSEEditor), Project Settings, Project, RPG Saga Engine. How the Animation & FX Library recognizes paired clips in packs (D-172): role words ("Attacker" / "Victim"), pair words ("Sync", "Paired", "Finisher"...) and the words of each kind.

SettingTypeDefaultCategoryRestartDescription
Counter Words (CounterWords)TArray<FString>(3 entries)Kinds
Finisher Words (FinisherWords)TArray<FString>(7 entries)Kinds
Grab Words (GrabWords)TArray<FString>(5 entries)Kinds
Parry Words (ParryWords)TArray<FString>(2 entries)Kinds
Register Library (bRegisterLibrary)boolTrueOutputCreate Pairs adds the library to Project Settings -> Paired Animations -> Libraries.
Library Asset Name (LibraryAssetName)FStringDA_PairedLibraryOutputName of the library Create Pairs adds the pairs to (created in the output folder when missing).
Output Folder (OutputFolder)FDirectoryPath()OutputFolder (under the scanned one) where Create Pairs writes the montages, pair assets and the library. Empty = "<folder>/Paired".
Length Tolerance (LengthTolerance)float0.250000PairsClips whose lengths differ by more than this share are still proposed, with a lower confidence.
Pair Words (PairWords)TArray<FString>(14 entries)PairsWords that mark a clip as half of a pair (in its name or folder).
Attacker Words (AttackerWords)TArray<FString>(13 entries)RolesWords of the attacker's clip (the unit acting). One-letter words ("A") count only when the clip also has a pair word.
Victim Words (VictimWords)TArray<FString>(10 entries)RolesWords of the victim's clip. One-letter words ("B") count only when the clip also has a pair word.

RPG Saga Engine: Paired Animations

Class URSEPairedAnimationSettings (module RSE), Project Settings, Project, RPG Saga Engine. Paired animations and finishers (D-172): which libraries hold the pairs, how often finishers play, the alignment, the default camera and slow motion.

SettingTypeDefaultCategoryRestartDescription
Libraries (Libraries)TArray<TSoftObjectPtr<URSEPairedAnimationLibrary> >(0 entries)ContentLibraries the pairs are picked from (in order; all of them are searched).
Default Camera Distance (DefaultCameraDistance)float420.000000Default LookDistance of the default shot (cm; negative = Battle Presentation's).
Default Camera FOV (DefaultCameraFOV)float50.000000Default LookField of view of the default shot (0 = Battle Presentation's).
Default Camera Height (DefaultCameraHeight)float20.000000Default Look
Default Camera Shot (DefaultCameraShot)ERSECameraShotTwoShotDefault LookCamera of pairs without their own (when the battle allows camera shots).
Default Slow Motion Blend Out (DefaultSlowMotionBlendOut)float0.400000Default Look
Default Slow Motion Dilation (DefaultSlowMotionDilation)float0.300000Default LookSlow motion at the sync point of pairs without their own curve: dilation (1 = none). Reduced effects turn it off.
Default Slow Motion Hold (DefaultSlowMotionHold)float0.300000Default LookReal seconds the default slow motion holds, then eases back over Default Slow Motion Blend Out.
Finishers (bFinishers)boolTrueFinishersMaster switch: kills may play a finisher.
Player Side Only (bPlayerSideOnly)boolFalseFinishersOnly kills by the player's side play finishers (enemies' kills keep their ordinary look).
Cooldown Actions (CooldownActions)int322FinishersActions that must pass after a finisher before the next one may play by chance (0 = none; Always ignores it).
Default Frequency (DefaultFrequency)ERSEFinisherFrequencySometimesFinishersHow often finishers play when the player never chose (Options -> Finishers overrides it).
Last Kill Chance (LastKillChance)float1.000000FinishersChance when the kill ends the battle (the last foe falls), frequency Sometimes.
Sometimes Chance (SometimesChance)float0.350000FinishersChance of a finisher on a kill when the frequency is Sometimes (and a pair fits).
Align Seconds (AlignSeconds)float0.200000PlaybackSeconds the alignment slide takes when the pair does not say.
Approach Beyond (ApproachBeyond)float150.000000PlaybackThe attacker runs to the victim first (and back after) when farther than the pair's distance plus this (cm; the ATB stage).
Hold Victim Down Pose (bHoldVictimDownPose)boolTruePlaybackA victim that falls holds the last pose of its montage (no second fall from its knock-out animation).
Skippable (bSkippable)boolTruePlaybackConfirm / Cancel skip a pair (its results still show).
Use Motion Warping (bUseMotionWarping)boolTruePlaybackAttackers with a motion warping component are carried by their montage's warp window instead of the slide.
Motion Warping Component Class (MotionWarpingComponentClass)FSoftClassPath/Script/MotionWarping.MotionWarpingComponentPlaybackThe motion warping component class looked for on the attacker (optional plugin; nothing breaks when it is missing).
Synced Counters (bSyncedCounters)boolTrueReactionsCounter abilities play a Counter pair when one fits (else their ordinary look).
Synced Parries (bSyncedParries)boolTrueReactionsParries known before the presentation (action battles, Blueprint) play a Parry pair when one fits.

RPG Saga Engine: Party

Class URSEPartySettings (module RSECore), Project Settings, Project, RPG Saga Engine. Party rules and the new-game party.

SettingTypeDefaultCategoryRestartDescription
Defeat Recovery HPPercent (DefeatRecoveryHPPercent)float0.000000DefeatHP fallen members get back after a story battle the party may lose, in percent of maximum HP.
Defeat Recovery Min HP (DefeatRecoveryMinHP)float1.000000DefeatAt least this much HP (so 0% still means "back on their feet").
Starting Members (StartingMembers)TArray<TSoftObjectPtr<URSECharacterData> >(4 entries)New GameParty members when a new game starts (recruitment adds more later, Phase 8). Global only.

RPG Saga Engine: Party Field

Class URSEPartyFieldSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Party field settings (D-097): the visible party in exploration, its formation and the delegated commands.

SettingTypeDefaultCategoryRestartDescription
Arrive Distance (ArriveDistance)float150.000000CommandsA member who reaches the target of Search / Interact within this distance acts (cm).
Commands (Commands)TArray<TSoftObjectPtr<URSEPartyCommandData> >(6 entries)CommandsThe delegated commands of the radial menu (in Sort Order).
Guard Warning Radius (GuardWarningRadius)float1500.000000CommandsGuard: a guarding member warns when an enemy comes this close (cm).
Scout Report Radius (ScoutReportRadius)float1800.000000CommandsScout: enemies within this distance of the scout's path are reported (cm).
Formation Slots (FormationSlots)TArray<FVector2D>(3 entries)FormationPlaces of the followers relative to the leader (cm; X forward, Y right): one per follower in order; more followers than places line up behind the last rows.
Hold Distance (HoldDistance)float90.000000FormationA follower closer than this to its place stands.
Run Distance (RunDistance)float650.000000FormationFarther than this it runs to catch up (closer: walks). D-150: 650 (was 400): members may lag a little before they run.
Run Speed (RunSpeed)float600.000000FormationRunning speed of followers catching up (cm/s).
Teleport Distance (TeleportDistance)float3000.000000FormationFarther than this from the leader it appears near the leader (stuck, another floor). 0 = never.
Think Interval (ThinkInterval)float0.200000FormationSeconds between the followers' decisions (a timer, no Tick).
Walk Speed (WalkSpeed)float250.000000FormationWalking speed of followers (cm/s).
Avoidance Radius (AvoidanceRadius)float300.000000LifeD-129: how far a follower looks for others to steer around (cm). D-150: 300 (was 150), for the roomier spacing.
Followers Avoid Each Other (bFollowersAvoidEachOther)boolTrueLifeD-129: followers steer around each other (the engine's RVO avoidance on their movement): no crowding in corridors.
Followers Avoid Leader (bFollowersAvoidLeader)boolTrueLifeD-150: followers also steer around the leader (the leader is an avoidance agent that never yields itself: its movement stays exactly the player's). Needs Followers Avoid Each Other.
Interactables Are Points Of Interest (bInteractablesArePointsOfInterest)boolTrueLifeD-129: resting members also look at interactable objects nearby (chests, doors, NPCs), besides RSE Idle Spots of interest.
Catch Up Speed Margin (CatchUpSpeedMargin)float90.000000LifeD-129: a member catching up (running) is always at least this much faster than the leader (cm/s), whatever its own pace.
Follower Avoidance Weight (FollowerAvoidanceWeight)float0.500000LifeD-150: how much a follower yields to others it meets (the engine's avoidance weight, 0..1; the leader never yields).
Follower Profile (FollowerProfile)TSoftObjectPtr<URSEFollowerProfile>/RPGSagaEngine/Data/PartyField/DA_FollowerProfile_Default.DA_FollowerProfile_DefaultLifeD-129: how the party's members follow and live (their loose places, their pace, their idle behaviours). A character may have its own (Character -> Follower Profile). Empty = the formation slots exactly and no idle life.
Follower Seed (FollowerSeed)int32129LifeD-129: the seed of the followers' choices (drift, pace, idle picks): the same seed plays the same party life.
Leader Moving Speed (LeaderMovingSpeed)float40.000000LifeD-129: the leader counts as walking above this speed (cm/s): followers react, idle life stops at once.
Move Acceptance Radius (MoveAcceptanceRadius)float40.000000LifeD-150: a follower's move ends this close to where it aims (cm).
Repath Distance (RepathDistance)float60.000000LifeD-150: a follower asks for a new path only when where it aims moved at least this far (cm; fewer path queries).
Spot Arrive Distance (SpotArriveDistance)float30.000000LifeP32d: a member walking to an idle spot (a seat, a wall) arrives within this distance (cm), then steps onto the spot's exact place and facing (swept: never into a wall) before its loop starts, so it sits on the bench, not next to it.
Show Party in Exploration (bShowPartyInExploration)boolTrueVisible PartyParty members walk behind the leader in exploration (off = only the leader is visible, as before D-097).
Max Followers (MaxFollowers)int323Visible PartyMost members following the leader (the ATB formation order; the rest stay hidden).

RPG Saga Engine: Performance

Class URSEPerformanceSettings (module RSE), Project Settings, Project, RPG Saga Engine. Performance (D-048, docs/design/performance.md): the Steam Deck device profile selection and the scripted benchmark (RSE.Perf.Benchmark).

SettingTypeDefaultCategoryRestartDescription
Benchmark Steps (BenchmarkSteps)TArray<FRSEBenchmarkStep>(17 entries)BenchmarkThe scripted sequence of RSE.Perf.Benchmark. Runs unattended: no step needs input.
Quit when Unattended (bQuitWhenUnattended)boolTrueBenchmarkQuits the game when the benchmark ends if it was started unattended (-unattended) or with the Quit argument.
Budget (Budget)FRSEPerfBudget(MinAverageFPS=30.000000,MinOnePercentLowFPS=25.000000,HitchFrameMs=100.000000,MaxAverageGPUMs=17.000000,MaxDrawCalls=1500,MaxPrimitives=2000000,MaxUsedPhysical...BenchmarkLimits every segment is checked against (Steam Deck: 30 FPS minimum).
Uncap Frame Rate (bUncapFrameRate)boolTrueBenchmarkRemoves the frame rate limit and VSync while the benchmark runs (measures the headroom); restored after.
Write Frame Csv (bWriteFrameCsv)boolTrueBenchmarkAlso writes frames.csv (every recorded frame).
Map Load Timeout Seconds (MapLoadTimeoutSeconds)float60.000000BenchmarkTime limit for a map load before the step is skipped.
Report Folder (ReportFolder)FStringPerfBenchmarkReport folder under Saved/ (a sub-folder per run: <timestamp>[_Deck]).
Warmup Seconds (WarmupSeconds)float1.000000BenchmarkFrames skipped at the start of each capture (after loads and camera cuts).
Apply Deck Profile (bApplyDeckProfile)boolTrueSteam DeckApplies the Deck profile at startup when the game runs on a Steam Deck (SteamDeck=1 from Steam, -SteamDeck, or Input -> Devices -> Simulate Steam Deck). A -dp= / -DeviceProfile= command line always wins.
Deck Device Profile (DeckDeviceProfile)FStringSteamDeckSteam DeckDevice profile applied on a Steam Deck (Windows build under Proton, and the default name for RSE.Visual.DeckPreview / -dp=).
Deck First Run Frame Rate Limit (DeckFirstRunFrameRateLimit)float40.000000Steam DeckFrame rate limit set once, on the first start on a Deck (the player can change it in Options -> Display). 40 matches the Deck's 40 Hz mode; 30 saves battery. 0 = leave the limit alone.
Deck Linux Device Profile (DeckLinuxDeviceProfile)FStringSteamDeck_LinuxSteam DeckDevice profile applied on a Steam Deck running a native Linux build. Empty = DeckDeviceProfile.
Deck Preview Resolution (DeckPreviewResolution)FIntPoint(X=1280,Y=800)Steam DeckWindow size of RSE.Visual.DeckPreview (the Deck screen).

RPG Saga Engine: Phone UI

Class URSEPhoneUISettings (module RSE), Project Settings, Project, RPG Saga Engine. Phone UI (D-180, docs/product/mobile.md).

SettingTypeDefaultCategoryRestartDescription
Use Phone Layouts (bUsePhoneLayouts)boolTruePhone LayoutsScreens use their phone layout while the phone UI is on (a UI style's custom layout still wins).
Phone ATB / Turn-Based HUD Layout (PhoneATBHUDLayout)TSoftClassPtr<URSEATBHUDLayout>NonePhone Layouts
Phone Dialog Layout (PhoneDialogLayout)TSoftClassPtr<URSEDialogLayout>NonePhone Layouts
Phone Grid Tactics HUD Layout (PhoneGridHUDLayout)TSoftClassPtr<URSEGridHUDLayout>NonePhone Layouts
Phone Live Tactics HUD Layout (PhoneLiveHUDLayout)TSoftClassPtr<URSELiveHUDLayout>NonePhone Layouts
Phone Party Menu Layout (PhonePartyMenuLayout)TSoftClassPtr<URSEPartyMenuLayout>NonePhone Layouts
Max Phone Diagonal Inches (MaxPhoneDiagonalInches)float7.600000Phone UIScreens up to this diagonal are phones (bigger ones are tablets: physical scaling, but the regular layouts).
Phone UI (PhoneUI)ERSEPhoneUIModeAutoPhone UI
Desktop DPI (DesktopDPI)float96.000000Physical ScalingDPI assumed for desktop screens (millimetre sizes of touch controls on PC).
Fallback Phone DPI (FallbackPhoneDPI)float420.000000Physical ScalingDPI assumed when a phone does not report one.
Max Canvas Short Side (MaxCanvasShortSide)float1080.000000Physical Scaling...and at most this many (big tablets do not get a tiny UI).
Min Canvas Short Side (MinCanvasShortSide)float620.000000Physical ScalingThe screen's short side keeps at least this many layout units (small phones shrink the unit instead of losing the UI).
Target Unit Millimetres (TargetUnitMillimetres)float0.105000Physical ScalingSize of one layout unit on the glass of a phone or tablet.
Apply Platform Safe Area (bApplyPlatformSafeArea)boolTrueSafe AreaThe platform's safe area (notch, rounded corners, home indicator) moves every screen's parts inside it.
Simulate Phone (bSimulatePhone)boolFalseSimulationSimulate a phone on PC (physical scaling with Simulated DPI, phone layouts, the simulated safe area). RSE.UI.Phone.Simulate overrides it.
Simulated DPI (SimulatedDPI)float405.000000SimulationDPI of the simulated phone (a 6.5" 2400 x 1080 phone is about 405).
Simulated Resolution (SimulatedResolution)FIntPoint(X=2400,Y=1080)SimulationScreen size used when there is no game viewport (headless tests, tools).
Simulated Safe Insets (SimulatedSafeInsets)FMargin(Left=96.000000,Right=48.000000,Bottom=42.000000)SimulationSafe-area insets of the simulated phone, in pixels (left, top, right, bottom; a landscape notch is on the left).
Min Touch Target MM (MinTouchTargetMM)float9.000000Touch TargetsSmallest size of anything a finger presses (buttons, rows, touch controls): 9 mm is about 48 dp.

RPG Saga Engine: Platform

Class URSEPlatformSettings (module RSE), Project Settings, Project, RPG Saga Engine. How the game reacts to platform events (D-170, docs/product/platforms.md): controller disconnects, sign-outs, app suspend and the front end's "press start".

SettingTypeDefaultCategoryRestartDescription
Pause on Suspend (bPauseOnSuspend)boolTrueApp LifecycleThe app being suspended (sent to the background) pauses the game until it resumes. Bind On App Resumed (Platform User subsystem) to open a pause menu on resume instead.
Allow Continue Without Controller (bAllowContinueWithoutController)boolTrueControllersThe reconnect screen can be dismissed with Confirm from another device (keyboard on PC, the built-in controls of a handheld). Off = only a reconnecting controller closes it (console behaviour).
Pause on Controller Disconnect (bPauseOnControllerDisconnect)boolTrueControllersThe primary user's controller disconnecting pauses the game and shows the reconnect screen until it reconnects.
Continue Action Text (ContinueActionText)FTextNSLOCTEXT("RSEPlatform", "ContinueAction", "Continue")ControllersAction of the confirm prompt when the screen may be dismissed without a controller.
Reconnect Detail (ReconnectDetail)FTextNSLOCTEXT("RSEPlatform", "ReconnectDetail", "Reconnect the controller to continue.")Controllers
Reconnect Title (ReconnectTitle)FTextNSLOCTEXT("RSEPlatform", "ReconnectTitle", "Controller disconnected")Controllers
Reconnect Widget Class (ReconnectWidgetClass)TSoftClassPtr<URSEScreenWidget>NoneControllersThe reconnect screen (a Widget Blueprint derived from RSE Screen Widget; empty = the framework's screen).
Reconnect ZOrder (ReconnectZOrder)int32950ControllersZ-order of the reconnect screen (above every other screen).
Return to Title on Sign Out (bReturnToTitleOnSignOut)boolTrueUsersThe primary user signing out returns to the title screen (Game Flow -> Main Menu Map).
Select User on Press Start (bSelectUserOnPressStart)boolTrueUsersThe front end's "press start" makes the user of the pressing device the primary user (whose saves are used).

RPG Saga Engine: Players & Authority

Class URSEPlayersSettings (module RSE), Project Settings, Project, RPG Saga Engine. Who the players are, who has authority over the game logic and how pause and time dilation behave (D-134, docs/design/networking.md §3.7–3.9).

SettingTypeDefaultCategoryRestartDescription
Authority Policy Class (AuthorityPolicyClass)TSubclassOf<URSEAuthorityPolicy>/Script/CoreUObject.Class'/Script/RSE.RSEAuthorityPolicy'AuthorityDecides whether this machine runs the game logic (encounters, spawners, roaming enemies, NPC schedules, traps, map fog, travel...) and whether a multiplayer session is running. Default: authority everywhere except on network clients.
Guest Start Spacing (GuestStartSpacing)float150.000000PlayersDistance between the host and each other player when they start a map (side by side, alternating sides).
Player Provider Class (PlayerProviderClass)TSubclassOf<URSEPlayerProvider>/Script/CoreUObject.Class'/Script/RSE.RSEPlayerProvider'PlayersLists the players (controllers), their slots and the host. The default works with the engine's player controllers (single-player, listen server); the networking module replaces it with one that reads the player states.
Time Policy Class (TimePolicyClass)TSubclassOf<URSETimePolicy>/Script/CoreUObject.Class'/Script/RSE.RSETimePolicy'Time and PauseDecides who may pause the world, change the world's time dilation (hit-stop, slow motion) and show tutorials. Default: single-player behaves as always; in a multiplayer session nothing pauses or slows the world for everyone and tutorials stay hidden (D-124 §6).

RPG Saga Engine: Portrait Studio

Class URSEPortraitStudioSettings (module RSEEditor), Project Settings, Project, RPG Saga Engine. Portrait & Icon Studio (D-075): renders portraits of characters and speakers from their appearance, and icons for items, abilities and statuses (a mesh render for equipment with a mesh, else a template: theme frame, glyph, tint), into textures under Output Root, and fills the assets' Portrait / Icon...

SettingTypeDefaultCategoryRestartDescription
Icon Frame (bIconFrame)boolFalseIconsThe Look's frame around icons too (off by default: the UI frames items by rarity).
Render Equipment Meshes (bRenderEquipmentMeshes)boolTrueIconsItems with a mesh get a render of it (else a template icon): the item's Item Mesh, else (equipment) its Appearance Part's static mesh, else its skeletal mesh in the reference pose.
Buff Tint (BuffTint)FLinearColor(R=0.250000,G=0.650000,B=0.350000,A=1.000000)Icons
Debuff Tint (DebuffTint)FLinearColor(R=0.750000,G=0.250000,B=0.300000,A=1.000000)Icons
Default Tint (DefaultTint)FLinearColor(R=0.300000,G=0.360000,B=0.550000,A=1.000000)IconsTint of icons no rule matches.
Glyph Fill (GlyphFill)float0.860000IconsSilhouette icons: share of the icon the shape fills.
Glyph Letters (GlyphLetters)int322IconsLetters taken from the name when no rule gives a glyph.
Glyph Outline Color (GlyphOutlineColor)FLinearColor(R=0.020000,G=0.020000,B=0.030000,A=0.900000)IconsSilhouette icons: outline color and width (share of the icon size; 0 = none).
Glyph Outline Width (GlyphOutlineWidth)float0.012000Icons
Glyph Rules (GlyphRules)TArray<FRSEIconGlyphRule>(44 entries)IconsGlyph and tint per tag: the first rule matching the entry's element, type, status or category wins.
Glyph Scale (GlyphScale)float0.420000IconsGlyph height as a share of the icon.
Glyph Shade Bottom (GlyphShadeBottom)float0.550000Icons
Glyph Shade Top (GlyphShadeTop)float1.350000IconsSilhouette icons (rules with a Glyph Texture): the tint is scaled by these at the top and the bottom of the shape.
Icon Background (IconBackground)ERSEStudioBackgroundTransparentIconsBehind icons (D-126): transparent by default, so the UI draws its own rarity frame and fill around them. Portraits use Look -> Background.
Icon Field Of View (IconFieldOfView)float20.000000IconsField of view of mesh icons (narrow = flat, consistent silhouettes).
Icon Fill (IconFill)float1.000000IconsShare of the icon a mesh's bounding sphere fills (the same framing for every item).
Icon Light Rig (IconLightRig)FNameNoneIconsLighting of mesh icons (Project Settings -> Portraits -> Light Rigs). Empty = Light Rig.
Icon Size (IconSize)ERSEStudioTextureSizeSize256Icons--- Icons ---
Item Glyph Rules (ItemGlyphRules)TArray<FRSEIconGlyphRule>(35 entries)IconsTemplate icons of items (D-126), checked before Glyph Rules: matched against the item's equipment type, slot type, category and (consumables) its ability's element and type, its name and its kind. The first matching rule wins.
Mesh Icon View (MeshIconView)FRotator(Pitch=-25.000000,Yaw=35.000000,Roll=0.000000)IconsDirection the mesh icons are seen from (items can turn their mesh first: Icon Mesh Rotation).
Background (Background)ERSEStudioBackgroundGradientLook--- Look ---
Background Bottom (BackgroundBottom)FLinearColor(R=0.010000,G=0.012000,B=0.040000,A=1.000000)Look
Background Top (BackgroundTop)FLinearColor(R=0.080000,G=0.100000,B=0.220000,A=1.000000)Look
Frame (bFrame)boolTrueLookA frame (the theme's outline color and corner radius) around portraits and icons.
Use Theme Colors (bUseThemeColors)boolTrueLookColors from the UI theme (window fill, outline): portraits and icons match the menus.
Corner Radius (CornerRadius)float0.060000LookCorner radius as a share of the texture size (0 = square).
Frame Color (FrameColor)FLinearColor(R=0.420000,G=0.500000,B=0.720000,A=1.000000)Look
Frame Thickness (FrameThickness)float0.012000LookFrame width as a share of the texture size.
Art Library Name (ArtLibraryName)FStringDA_GeneratedArtOutputName of the generated art library asset (portraits and icons of content outside /Game, e.g. the plugin's starter content).
Overwrite Hand Authored (bOverwriteHandAuthored)boolFalseOutputReplace textures the team set by hand (not made by the studio). Off = those assets are skipped.
Register Library (bRegisterLibrary)boolTrueOutputAdds the library to Project Settings -> Generated Art -> Libraries when it is created.
Output Root (OutputRoot)FDirectoryPath(set per project)OutputFolder of the generated textures (Portraits/, Icons/) and of the generated art library. Must be under /Game.
Pick Upright Frame (bPickUprightFrame)boolTruePortraitsWhen the pose has no Start Time of its own, the studio samples the animation and keeps the frame where the head is most upright (D-081): idles that nod or look down still give a straight portrait. An anim set's Portrait Pose with a Start Time is the per-character override.
Variant Portraits (bVariantPortraits)boolTruePortraitsPortraits of each appearance variant (Portrait Variants of characters).
Default Pose (DefaultPose)TSoftObjectPtr<UAnimSequenceBase>NonePortraitsPose when the anim set has no Portrait Pose: this animation (on the character's skeleton), else the locomotion idle.
Dialog Framing (DialogFraming)FNameHeadPortraitsFraming of dialog (emotion) portraits of speakers.
Emotions (Emotions)TArray<FGameplayTag>(5 entries)PortraitsDialog portraits per expression for speakers. An expression renders only when the anim set has an animation for it (Portraits -> Expressions); the others fall back to the neutral portrait in the dialog box.
Light Rig (LightRig)FNameStudioPortraitsLighting (Project Settings -> Portraits -> Light Rigs).
Portrait Framing (PortraitFraming)FNameBustPortraitsFraming of menu portraits (Project Settings -> Portraits -> Framings).
Portrait Size (PortraitSize)ERSEStudioTextureSizeSize512Portraits--- Portraits ---
Pose Time (PoseTime)float0.000000PortraitsSeconds into the pose animation when it has no Start Time of its own (and Pick Upright Frame is off).
Supersample (Supersample)int322PortraitsRenders at this multiple of the size, then filters down (smooth edges).
Upright Frame Samples (UprightFrameSamples)int3216PortraitsFrames sampled for Pick Upright Frame.
Warmup Captures (WarmupCaptures)int323PortraitsFrames rendered before the kept one (shadows and caches settle).
Quest Camera Distance (QuestCameraDistance)float1100.000000Quest ImagesThe camera looks at the quest's place (its giver, else its first objective's map marker) from this far (cm, horizontally)...
Quest Camera FOV (QuestCameraFOV)float50.000000Quest Images
Quest Camera Height (QuestCameraHeight)float450.000000Quest Images...this high above it (cm)...
Quest Camera Yaw (QuestCameraYaw)float225.000000Quest Images...from this direction (world yaw, degrees; the camera stands on that side of the place).
Quest Image Folder (QuestImageFolder)FStringQuestsQuest ImagesFolder under Output Root for the journal pictures of quests (RPG Saga Engine -> Content -> Capture Quest Images).
Quest Image Height (QuestImageHeight)int32240Quest Images
Quest Image Width (QuestImageWidth)int32640Quest Images
Quest Target Height (QuestTargetHeight)float120.000000Quest ImagesThe point looked at, above the place (cm): a character's chest.
SRGB (bSRGB)boolTrueTexture
Compression (Compression)TEnumAsByte<TextureCompressionSettings>TC_EditorIconTexture
LODGroup (LODGroup)TEnumAsByte<TextureGroup>TEXTUREGROUP_UITexture--- Texture ---
Mip Gen (MipGen)TEnumAsByte<TextureMipGenSettings>TMGS_NoMipmapsTexture

RPG Saga Engine: Portraits

Class URSEPortraitSettings (module RSE), Project Settings, Project, RPG Saga Engine. Portraits (D-075): framing and lighting presets (shared by the Portrait & Icon Studio and live dialog portraits) and live 3D options.

SettingTypeDefaultCategoryRestartDescription
Allow Live Portraits (bAllowLivePortraits)boolTrueDialog PortraitsLive 3D portraits may render (off = images). The Steam Deck profile turns them off with RSE.Dialog.LivePortraits 0.
Allow Video Portraits (bAllowVideoPortraits)boolTrueDialog PortraitsVideo portraits may play (off = every speaker shows its image).
Portrait Video Audio (bPortraitVideoAudio)boolFalseDialog PortraitsPlay the portrait clips' own sound (off: voices stay in the dialog audio system).
Live Backdrop Color (LiveBackdropColor)FLinearColor(R=0.060000,G=0.080000,B=0.160000,A=1.000000)Live PortraitsBackdrop color behind a live portrait (a lit plane; alpha 0 = no backdrop: the capture's clear color).
Live Capture Interval (LiveCaptureInterval)float0.033333Live PortraitsSeconds between live captures (0 = every frame; 1/30 is smooth and half the cost at 60 fps).
Live Framing (LiveFraming)FNameBustLive PortraitsFraming of live portraits.
Live Light Rig (LiveLightRig)FNameStudioLive PortraitsLighting of live portraits.
Live Resolution (LiveResolution)int32256Live PortraitsRender target size of the live portrait (square; one capture is shared by the dialog box).
Live Scene Location (LiveSceneLocation)FVector(X=0.000000,Y=0.000000,Z=-60000.000000)Live PortraitsWhere the portrait scene stands in the world: far from the playable space (only the subject is rendered).
Talk Nod Cm (TalkNodCm)float0.800000Live PortraitsNod while talking, cm up and down.
Talk Sway Degrees (TalkSwayDegrees)float2.500000Live PortraitsHead sway while talking when the character has no Talk animation (degrees of the body's yaw / roll).
Talk Sway Speed (TalkSwaySpeed)float6.000000Live PortraitsSpeed of the talking sway and nod.
Framings (Framings)TArray<FRSEPortraitFraming>(5 entries)PresetsFraming presets, by name.
Light Rigs (LightRigs)TArray<FRSEPortraitLightRig>(2 entries)PresetsLighting rigs, by name.
Max Upright Correction (MaxUprightCorrection)float25.000000PresetsMost the character is tilted back for Upright Correction.
Upright Correction (UprightCorrection)float0.800000PresetsShare of the head's remaining lean the studio straightens by tilting the whole character back (D-081): idles that hunch or look down keep their pose, the face comes up. 0 = off.
Upright Scan Seconds (UprightScanSeconds)float4.000000PresetsPortraits posed by the character's Anim Blueprint (no pose animation): how long its idle is played while the most upright moment of the head is searched (D-081).

RPG Saga Engine: Progression

Class URSEProgressionSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Character progression rules (D-030): maximum level, the experience curve and the experience enemies give.

SettingTypeDefaultCategoryRestartDescription
Scale Enemy Levels (bScaleEnemyLevels)boolTrueEnemy LevelsRegular encounters (Level Mode "Scaled") fought in a progression zone set their enemies' level from the party: PartyLevel + EnemyLevelOffset + OverlevelBias * max(0, PartyLevel - ZoneEntryTarget) + the encounter's offset, plus a random spread of +-EnemyLevelVariance per enemy, clamped to the zone's range and the level cap. Off = authored levels everywhere. Encounters in Level Mode "Fixed" never scale.
Enemy Level Offset (EnemyLevelOffset)float0.000000Enemy LevelsLevels added to the party level (negative = enemies a bit below the party).
Enemy Level Variance (EnemyLevelVariance)int321Enemy LevelsRandom spread per enemy: each one gets -N..+N levels (seeded by the battle), then the zone's range clamps it.
Overlevel Bias (OverlevelBias)float0.000000Enemy LevelsShare of the party's lead over the zone's entry target added on top (0 = none, 1 = enemies climb twice as fast as the party). A player who farmed meets enemies near the top of the zone's range sooner.
Party Level Source (PartyLevelSource)ERSEPartyLevelSourceAverageEnemy Levels
Enemy Defense Bonus Per Level (EnemyDefenseBonusPerLevel)float0.000000Enemy Stats
Enemy Defense Stats (EnemyDefenseStats)FGameplayTagContainer(GameplayTags=((TagName="Stat.Defense"),(TagName="Stat.Spirit")))Enemy StatsStats that EnemyDefenseBonusPerLevel raises. Global only.
Enemy HPBonus Per Level (EnemyHPBonusPerLevel)float0.000000Enemy StatsExtra growth of enemy stats on top of their class, in percent per level above 1 (enemy characters only, Roster Enemy). 2 = +2% per level, i.e. +98% at level 50. Lets enemies share a class with the party yet scale differently. Negative values weaken high-level enemies; the total never goes below -90%.
Enemy HPStats (EnemyHPStats)FGameplayTagContainer(GameplayTags=((TagName="Stat.MaxHP")))Enemy StatsStats that EnemyHPBonusPerLevel raises. Global only.
Enemy Offense Bonus Per Level (EnemyOffenseBonusPerLevel)float0.000000Enemy Stats
Enemy Offense Stats (EnemyOffenseStats)FGameplayTagContainer(GameplayTags=((TagName="Stat.Attack"),(TagName="Stat.Magic")))Enemy StatsStats that EnemyOffenseBonusPerLevel raises. Global only.
Experience Base (ExperienceBase)float15.000000Experience Curve--- Experience curve ---
Experience Curve (ExperienceCurve)TSoftObjectPtr<UCurveFloat>NoneExperience CurveOptional: total experience (Y) needed to reach each level (X). Replaces the formula when set.
Experience Exponent (ExperienceExponent)float2.000000Experience Curve
Experience Per Level (ExperiencePerLevel)float0.000000Experience Curve
Max Level (MaxLevel)int3299LevelsHighest level. Global only, like the experience curve (saved levels and totals must stay consistent); profiles change rewards.
Enemy Experience Base (EnemyExperienceBase)float12.000000RewardsExperience an enemy gives when its character sets none: EnemyExperienceBase + EnemyExperiencePerLevel * (Level - 1).
Enemy Experience Per Level (EnemyExperiencePerLevel)float6.000000Rewards

RPG Saga Engine: Progression Designer

Class URSEProgressionDesignerSettings (module RSECore), Project Settings, Project, RPG Saga Engine. The Progression Designer's projection and advisor (D-051, docs/design/progression-designer.md): which stats a class growth recommendation touches, how the advisor weighs the targets, how long it searches and within which bounds.

SettingTypeDefaultCategoryRestartDescription
Max Class Growth Scale (MaxClassGrowthScale)float1.500000Advisor|BoundsClass growth scales stay within [1/x, x].
Max Enemy Bonus Per Level (MaxEnemyBonusPerLevel)float5.000000Advisor|Bounds
Max Experience Exponent (MaxExperienceExponent)float3.500000Advisor|Bounds
Min Enemy Bonus Per Level (MinEnemyBonusPerLevel)float-0.500000Advisor|Bounds
Min Experience Exponent (MinExperienceExponent)float1.200000Advisor|Bounds--- Bounds ---
Min Recommended Change (MinRecommendedChange)float0.020000Advisor|BoundsChanges smaller than this (relative, or percent points for the bonuses) are not recommended.
Recommend Zone Ranges (bRecommendZoneRanges)boolTrueAdvisor|ScopeSuggest zone range changes where the projected party levels leave a zone's range by more than the overlevel margin (unchecked by default in the list).
Tune Class Growth (bTuneClassGrowth)boolTrueAdvisor|ScopeOnly the campaign's standard classes.
Tune Enemy Experience (bTuneEnemyExperience)boolTrueAdvisor|Scope
Tune Enemy Stats (bTuneEnemyStats)boolTrueAdvisor|Scope
Tune Experience Curve (bTuneExperienceCurve)boolTrueAdvisor|Scope--- What the advisor may change ---
Battle Feel Passes (BattleFeelPasses)int322Advisor|SearchPasses of "battle feel search, then level rounds" after the first level rounds.
Initial Percent Step (InitialPercentStep)float0.500000Advisor|SearchFirst step of the enemy stat bonuses (percent points per level).
Initial Relative Step (InitialRelativeStep)float0.250000Advisor|SearchFirst step of multiplicative parameters (0.2 = try x1.2 and /1.2); halves when a sweep finds nothing better.
Level Rounds (LevelRounds)int323Advisor|SearchRounds of "levels search on the fast model, then a full projection": each round replays the newest projection, so battles that change outcome (a party no longer underleveled) feed the next round.
Max Battle Evaluations (MaxBattleEvaluations)int3260Advisor|SearchHard cap on probe evaluations (each = ProbeBattlesPerZone battles per zone plus the key battles).
Max Battle Iterations (MaxBattleIterations)int326Advisor|SearchSweeps of the coordinate search over enemy stats and class growth (each step simulates probe battles).
Max Experience Iterations (MaxExperienceIterations)int3260Advisor|SearchSweeps of the coordinate search over the experience parameters (fast model, no battles).
Min Relative Step (MinRelativeStep)float0.010000Advisor|SearchThe search stops when every multiplicative step is below this.
Model Outcome Margin (ModelOutcomeMargin)float3.000000Advisor|SearchFast model: a battle's outcome flips when the party-minus-enemy level gap moved this many levels away from the baseline's (lost -> won when the gap is also at least -this).
Probe Battles Per Zone (ProbeBattlesPerZone)int323Advisor|SearchRegular battles simulated per zone for each probe evaluation.
Boredom Weight (BoredomWeight)float2.000000Advisor|WeightsEach 0.1 of boredom index above the maximum.
Change Weight (ChangeWeight)float0.500000Advisor|WeightsKeeps recommendations small: squared log-ratio of every multiplicative change (and squared percent points of the enemy bonuses / 10).
Completion Weight (CompletionWeight)float3.000000Advisor|WeightsEach level outside the tolerance of the completion target.
Damage Weight (DamageWeight)float2.000000Advisor|WeightsEach 10 points of damage taken outside its band.
Grind Weight (GrindWeight)float1.000000Advisor|WeightsEach 0.1 of grind index above the maximum.
Level Weight (LevelWeight)float1.000000Advisor|WeightsEach level outside the tolerance of a zone's exit target.
Optional Weight (OptionalWeight)float1.000000Advisor|WeightsEach 10 post-game battles beyond the reasonable grind for the optional content level.
Risk Weight (RiskWeight)float2.000000Advisor|WeightsEach 10 points of minimum HP below the floor.
Turns Weight (TurnsWeight)float2.000000Advisor|WeightsEach party turn outside the turns bands.
Chart Stats (ChartStats)TArray<FGameplayTag>(7 entries)Class GrowthStats shown in the attribute curves (empty = every stat the classes grow).
Power Samples (PowerSamples)int3220Class GrowthD-144: levels sampled for the power curves of the progression systems (each sample builds a character with every point spent); the levels in between are interpolated. More = smoother, slower.
Power Stats (PowerStats)FGameplayTagContainer(GameplayTags=((TagName="Stat.Attack"),(TagName="Stat.Magic")))Class GrowthStats a class's "power" growth scale multiplies (their PerLevel).
Vitality Stats (VitalityStats)FGameplayTagContainer(GameplayTags=((TagName="Stat.MaxHP"),(TagName="Stat.Defense"),(TagName="Stat.Spirit")))Class GrowthStats a class's "vitality" growth scale multiplies (their PerLevel).
Output Folder (OutputFolder)FStringProgressionDesignerReportsReports go to Saved/<OutputFolder>/<timestamp>_<campaign>/.

RPG Saga Engine: Progression Systems

Class URSEGrowthSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Progression systems and ability learning (D-144, docs/design/progression-systems.md).

SettingTypeDefaultCategoryRestartDescription
Ability Power Share (AbilityPowerShare)float3.000000Automatic AllocationProgression Designer: power each ability gained adds to the power estimate (percent of the level-1 Classic power).
Allocation Policy Class (AllocationPolicyClass)TSoftClassPtr<URSEGrowthAllocationPolicy>NoneAutomatic AllocationSpends points for characters nobody builds by hand: AI-controlled members, autoplay, the battle simulator, Balance My Campaign and the Progression Designer. Blueprintable: override Choose Option. Empty = the built-in policy.
Auto Allocate AIControlled (bAutoAllocateAIControlled)boolTrueAutomatic AllocationAfter each battle and level up, AI-controlled members (Control = AI) spend their points automatically.
Max Auto Steps (MaxAutoSteps)int32500Automatic AllocationMost steps one automatic allocation takes (safety against content loops).
Score Weights (ScoreWeights)FRSEGrowthScoreWeights(StatPercent=1.000000,ActiveAbility=12.000000,PassiveAbility=9.000000,PathLookahead=0.600000,UngrownStatWeight=0.250000)Automatic AllocationHow the built-in policy (and every policy's option scores) value the steps.
Simulated Enemies Per Victory (SimulatedEnemiesPerVictory)float3.000000Automatic AllocationD-154: enemies defeated per won battle in a typical playthrough (Battle Points -> Per Enemy Defeated counts this many). The simulator's builds, the board generator's pacing and the fill-level estimate use it with Simulated Victories Per Level.
Simulated Victories Per Level (SimulatedVictoriesPerLevel)float4.000000Automatic AllocationWon battles per level the simulator assumes when it builds a typical character (battle points earned on the way); the Progression Designer and Balance My Campaign use it too.
Battle Points (BattlePoints)TArray<FRSEBattlePointReward>(1 entries)Battle PointsPoints earned for won battles (board points usually; attribute or ability points too). Default: 5 board points per victory.
Board Scope (BoardScope)ERSEGrowthBoardScopePerClassBoard
Default Board Style (DefaultBoardStyle)TSoftObjectPtr<URSEGrowthBoardStyle>/RPGSagaEngine/Data/Growth/Styles/DA_GrowthStyle_Constellation.DA_GrowthStyle_ConstellationBoardLook of boards that name no style.
Layout Rules (LayoutRules)FRSEGrowthLayoutRules(MinNodeDistance=1.000000,EdgeClearance=0.400000,CurveBend=0.180000,CurveSegments=12)BoardWhat makes a board layout clean (D-149): the validator of the editor, the importer and the tests, and the screen's curves.
Shared Board (SharedBoard)TSoftObjectPtr<URSEGrowthBoard>/RPGSagaEngine/Data/Growth/DA_GrowthBoard_Default.DA_GrowthBoard_DefaultBoardThe board of Shared scope, and of classes whose plan has no board.
Travel Cost Per Step (TravelCostPerStep)int320BoardBoard points per step walked from where the character stands to the node unlocked (through open nodes; 0 = no travel cost, every open node is reachable for free).
Enable Enemy Learning (bEnableEnemyLearning)boolTrueEnemy Learning--- Learning from enemies ---
Never Learnable Types (NeverLearnableTypes)FGameplayTagContainer()Enemy LearningAbilities of these types are never learned from enemies (attacks, monster-only actions).
Trait Learning (TraitLearning)TArray<FRSETraitLearning>(0 entries)Enemy LearningTraits that let any character learn from enemies (besides the class plans' rules).
Fallback Layout (FallbackLayout)ERSEGrowthLayoutPresetConstellationGeneratorLayout of Auto when the role names none.
Generator Defaults (GeneratorDefaults)FRSEGrowthGeneratorParams(Seed=1,EmphasizedStats=(),TargetMaxLevel=50,KeyAttributes=3,AttributePointsPerLevel=3,AbilityPointsPerLevel=1,MilestoneEvery=10,MilestoneBonus=2,ValueShareOfLe...GeneratorStarting inputs of Generate Point Tables / Generate Board (Studio and the plan's buttons copy them).
Region Themes (RegionThemes)TArray<FRSEGrowthRegionTheme>(4 entries)GeneratorThemes of generated board regions (D-149), in order: a region takes the first theme listing its main stat.
Role Emphasis (RoleEmphasis)TMap<FGameplayTag,FGameplayTagContainer>(7 entries)GeneratorStats a generated plan favors per archetype role (Archetype.Role.*), beyond what the class growth says.
Role Layouts (RoleLayouts)TMap<FGameplayTag,ERSEGrowthLayoutPreset>(7 entries)GeneratorLayout preset per archetype role (Archetype.Role.*) when the generator's Layout is Auto (D-149).
Enable Mastery (bEnableMastery)boolTrueMasteryItems with Mastery Abilities teach them for good after enough mastery points.
Fallen Members Earn Mastery (bFallenMembersEarnMastery)boolFalseMasteryMembers that ended the battle KO earn mastery too.
Mastery Points Per Enemy (MasteryPointsPerEnemy)int321Mastery
Mastery Points Per Victory (MasteryPointsPerVictory)int322Mastery
Default Plan (DefaultPlan)TSoftObjectPtr<URSEGrowthPlan>/RPGSagaEngine/Data/Growth/DA_GrowthPlan_Default.DA_GrowthPlan_DefaultPlansPlan of classes that have none (points, catalog, board). Empty = such classes only grow by level.
Max Undo Steps (MaxUndoSteps)int3250RespecThe Growth page's free undo (D-149): the last steps the player took (raise, learn, unlock) can be taken back for nothing while the page stays open; closing it (or a reset) clears them. Most steps kept per character (0 = no undo).
Respec Item (RespecItem)TSoftObjectPtr<URSEItemData>NoneRespecItem mode: the item consumed per reset.
Respec Mode (RespecMode)ERSERespecModeFreeRespec--- Respec ---
Respec Point Penalty (RespecPointPenalty)float0.100000RespecShare of the refundable spent points a full reset keeps for good (D-149: 0.1 = the reset costs 10% of the points spent, rounded, per currency; 0 = everything back). The Growth page says how much before the player confirms.
Player Chooses at New Game (bPlayerChoosesAtNewGame)boolFalseSystemThe player picks the system when starting a new game (from New Game Choices).
New Game Choices (NewGameChoices)TArray<ERSEProgressionSystem>(0 entries)SystemSystems offered at New Game, in order. Empty = all three.
System (System)ERSEProgressionSystemClassicSystemHow characters grow. The class level abilities and stat growth stay in every system.
New Game Prompt (NewGamePrompt)FTextNSLOCTEXT("RSEGrowth", "NewGamePrompt", "How should your heroes grow?")System|TextThe New Game question.
System Descriptions (SystemDescriptions)TMap<ERSEProgressionSystem,FText>(3 entries)System|TextOne-line descriptions of the systems (New Game, Studio).
System Names (SystemNames)TMap<ERSEProgressionSystem,FText>(3 entries)System|TextNames of the systems on screen. Missing = the enum's display name.
Enable Use Growth (bEnableUseGrowth)boolFalseUse GrowthAbilities rank up with battle uses (power and cost per rank).
Default Use Growth (DefaultUseGrowth)TSoftObjectPtr<URSEUseGrowthCurve>/RPGSagaEngine/Data/Growth/DA_UseGrowth_Standard.DA_UseGrowth_StandardUse GrowthCurve of abilities that name none. Empty = only abilities with their own curve grow.

RPG Saga Engine: Progression Tools

Class URSEGrowthEditorSettings (module RSEEditor), Project Settings, Project, RPG Saga Engine. Editor tools of the progression systems (D-144): the Growth Board visual editor, the Studio pages (Progression System, Growth Board, New Teacher, Weapon with Mastery) and the progression JSON importer of the AI workflow (docs/product/progression-ai-schema.md).

SettingTypeDefaultCategoryRestartDescription
Fallback Prefixes (FallbackPrefixes)TMap<FString,FString>(5 entries)AssetsAsset name prefixes of progression assets (class name -> prefix) used when Content Import -> Types has no type for the class (projects that list their own types).
Ability Node Color (AbilityNodeColor)FLinearColor(R=0.700000,G=0.350000,B=0.100000,A=1.000000)Board Editor
Gate Node Color (GateNodeColor)FLinearColor(R=0.550000,G=0.120000,B=0.120000,A=1.000000)Board Editor
Hub Node Color (HubNodeColor)FLinearColor(R=0.300000,G=0.300000,B=0.300000,A=1.000000)Board Editor
Keystone Node Color (KeystoneNodeColor)FLinearColor(R=0.750000,G=0.550000,B=0.050000,A=1.000000)Board Editor
Passive Node Color (PassiveNodeColor)FLinearColor(R=0.450000,G=0.250000,B=0.600000,A=1.000000)Board Editor
Start Node Color (StartNodeColor)FLinearColor(R=0.100000,G=0.450000,B=0.100000,A=1.000000)Board EditorThe start node of the board (any kind) is drawn in this color.
Stat Node Color (StatNodeColor)FLinearColor(R=0.150000,G=0.350000,B=0.650000,A=1.000000)Board EditorTitle colors of board nodes per kind in the visual editor.
Pool Excluded Name Prefixes (PoolExcludedNamePrefixes)TArray<FString>(4 entries)GeneratorsSuggested pools leave out abilities whose asset name starts with one of these (item effects, summons, enemy-only actions).
Suggested Pool Size (SuggestedPoolSize)int3210GeneratorsMost abilities the generators' suggested pool holds (abilities of the class's own types and elements, not in the class).
Generate Missing by Default (bGenerateMissingByDefault)boolTrueProgression JSONFill what a document leaves out (point tables, board) with the generators, when the document does not say otherwise.
File Suffix (FileSuffix)FString.progression.jsonProgression JSONProgression documents: the file name ends with this (e.g. Warrior.progression.json).
Suggestion Max Distance (SuggestionMaxDistance)int323Progression JSONUnknown names get "did you mean" suggestions within this many edits.
Template Folder (TemplateFolder)FStringConfig/AIPacks/ProgressionProgression JSONWhere the AI pack's progression template lives (schema, prompt notes, checked examples). Relative to the plugin folder.
Max Board Nodes (MaxBoardNodes)int32400Progression JSON|RangesMost nodes of one board.
Max Cost (MaxCost)int321000Progression JSON|RangesHighest cost of a node, catalog ability or attribute point a document may set.
Max Mastery Points (MaxMasteryPoints)int322000Progression JSON|RangesHighest mastery points an ability may need.
Max Money (MaxMoney)int321000000Progression JSON|RangesHighest price (money) of a teacher's offer or respec.
Max Points Per Level (MaxPointsPerLevel)int32500Progression JSON|RangesHighest points per level a grant may give.
Max Tier (MaxTier)int323Progression JSON|RangesHighest node tier (ring color: 0 common .. rare).
Blank Weapon Slot (BlankWeaponSlot)FGameplayTag(TagName="Equip.Slot.Weapon")StudioStudio -> Weapon with Mastery: the slot of a blank weapon (Equip.Slot.*).
Blank Weapon Type (BlankWeaponType)FGameplayTag(TagName="Equip.Type.Weapon.Sword")StudioStudio -> Weapon with Mastery: the kind of a blank weapon (Equip.Type.*).

RPG Saga Engine: Puzzle UI

Class URSEPuzzleUISettings (module RSE), Project Settings, Project, RPG Saga Engine. Presentation of the puzzles (D-039): the code lock screen, puzzle doors and the optional scene prompt.

SettingTypeDefaultCategoryRestartDescription
Attempts Left Format (AttemptsLeftFormat)FTextNSLOCTEXT("RSEPuzzleUI", "AttemptsLeftFormat", "Attempts left: {Count}")Code Lock{Count} = wrong codes still allowed.
Clock Separator (ClockSeparator)FTextNSLOCTEXT("RSEPuzzleUI", "ClockSeparator", ":")Code LockBetween the hour and minute wheels of a clock lock.
Code Lock Backdrop Color (CodeLockBackdropColor)FRSEUIColor(Token="Primary",Alpha=0.650000,Lightness=-0.526921,Chroma=0.679858,Hue=0.163523,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Code LockDims the world behind the lock.
Code Lock Widget Class (CodeLockWidgetClass)TSoftClassPtr<URSEScreenWidget>NoneCode LockCode lock screen (D-052). Empty = the built-in themed screen. A Widget Blueprint derived from RSEScreenWidget replaces it and receives a RSECodeLockViewModel (docs/product/custom-ui.md).
Code Lock ZOrder (CodeLockZOrder)int3255Code LockZ-order in the viewport (above the HUDs and the party menu).
Default Lock Title (DefaultLockTitle)FTextNSLOCTEXT("RSEPuzzleUI", "DefaultLockTitle", "Lock")Code LockTitle when the lock has no Display Name.
Default Wrong Text (DefaultWrongText)FTextNSLOCTEXT("RSEPuzzleUI", "DefaultWrongText", "Nothing happens.")Code LockShown after a wrong code when the lock has no Failure Text.
Leave Text (LeaveText)FTextNSLOCTEXT("RSEPuzzleUI", "LeaveText", "Leave")Code Lock
Select Wheel Action Text (SelectWheelActionText)FTextNSLOCTEXT("RSEPuzzleUI", "SelectWheelAction", "Select")Code LockKey hint actions.
Submit Text (SubmitText)FTextNSLOCTEXT("RSEPuzzleUI", "SubmitText", "Enter")Code Lock
Turn Wheel Action Text (TurnWheelActionText)FTextNSLOCTEXT("RSEPuzzleUI", "TurnWheelAction", "Turn")Code Lock
Wheel Down Glyph (WheelDownGlyph)FTextNSLOCTEXT("RSEPuzzleUI", "WheelDownGlyph", "▼")Code Lock
Wheel Up Glyph (WheelUpGlyph)FTextNSLOCTEXT("RSEPuzzleUI", "WheelUpGlyph", "▲")Code LockGlyphs of the wheel arrows (clickable).
Wheel Width (WheelWidth)float84.000000Code Lock
Door Open Seconds (DoorOpenSeconds)float1.200000DoorsSeconds a puzzle door takes to open when its conditions become true (0 = at once). Doors may override it.
Door Placeholder Mesh (DoorPlaceholderMesh)TSoftObjectPtr<UStaticMesh>/Engine/BasicShapes/Cube.CubeDoorsMesh of doors without their own (placeholder).
Optional Scene Prompt on Screen (bOptionalScenePromptOnScreen)boolTrueOptional ScenesThe optional scene prompt sits at the screen anchor of the interaction prompt, not above the trigger.
Optional Scene Priority (OptionalScenePriority)int325Optional ScenesFocus priority of optional scene triggers (they win over nearby objects).
Optional Scene Prompt Format (OptionalScenePromptFormat)FTextNSLOCTEXT("RSEPuzzleUI", "OptionalScenePromptFormat", "Optional scene: {Title}")Optional ScenesPrompt of an optional scene. {Title} = the scene's Display Name.
Optional Scene Range (OptionalSceneRange)float400.000000Optional ScenesRange of optional scene triggers without their own.

RPG Saga Engine: Puzzles

Class URSEPuzzleSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Puzzle rules and texts (D-039, docs/design/puzzles.md).

SettingTypeDefaultCategoryRestartDescription
Combine Fail Text (CombineFailText)FTextNSLOCTEXT("RSEPuzzle", "CombineFailText", "These don\'t go together.")CombineShown when no recipe matches.
Combine Success Format (CombineSuccessFormat)FTextNSLOCTEXT("RSEPuzzle", "CombineSuccessFormat", "Obtained: {Result}.")CombineShown after a successful combination (recipes may have their own lines). {Result}, {Count}.
Recipes (Recipes)TArray<TSoftObjectPtr<URSEItemRecipeData> >(1 entries)CombineEvery recipe of the game. Any two items may be tried together; the combination succeeds when a recipe matches (the player does not need to know the recipe first). Global list, loaded when the player combines.
Pickup Format (PickupFormat)FTextNSLOCTEXT("RSEPuzzle", "PickupFormat", "Obtained: {Item}.")ExamineSaid when an examined object gives an item and the pickup has no lines of its own. {Item}, {Count}.
Decline Option (DeclineOption)FTextNSLOCTEXT("RSEPuzzle", "DeclineOption", "Leave it")Use ItemThe option that uses nothing.
Default Refusal Lines (DefaultRefusalLines)TArray<FText>(1 entries)Use ItemSaid when an item the object does not accept is used on it (an item-use asset may have its own lines).
Use Option Format (UseOptionFormat)FTextNSLOCTEXT("RSEPuzzle", "UseOptionFormat", "Use the {Item}")Use ItemOne option per accepted item. {Item} = the item.
Use Prompt Format (UsePromptFormat)FTextNSLOCTEXT("RSEPuzzle", "UsePromptFormat", "Use the {Item}?")Use ItemQuestion asked when the party holds one item the object accepts. {Item} = the item.
Use Several Prompt (UseSeveralPrompt)FTextNSLOCTEXT("RSEPuzzle", "UseSeveralPrompt", "Use an item?")Use ItemQuestion asked when the party holds several items the object accepts.

RPG Saga Engine: Quest UI

Class URSEQuestUISettings (module RSE), Project Settings, Project, RPG Saga Engine. Look and behaviour of the quest journal, the HUD quest tracker, quest notifications and the Pact page.

SettingTypeDefaultCategoryRestartDescription
Abandoned Color (AbandonedColor)FRSEUIColor(Token="Neutral",Alpha=1.000000,Lightness=-0.056772,Chroma=0.921091,Hue=15.394094,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors
Ability Learned Color (AbilityLearnedColor)FRSEUIColor(Token="Info",Alpha=1.000000,Lightness=0.079403,Chroma=0.651117,Hue=-15.902557,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))ColorsLearned-ability notices (D-082).
Completed Color (CompletedColor)FRSEUIColor(Token="Positive",Alpha=1.000000,Chroma=1.000000,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors
Failed Color (FailedColor)FRSEUIColor(Token="Negative",Alpha=1.000000,Lightness=-0.034214,Chroma=1.006407,Hue=0.868554,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors
Missed Color (MissedColor)FRSEUIColor(Token="Secondary",Alpha=1.000000,Lightness=0.006516,Chroma=0.886550,Hue=105.310432,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors
Objective Color (ObjectiveColor)FRSEUIColor(Token="Info",Alpha=1.000000,Lightness=0.071629,Chroma=0.579612,Hue=2.998248,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors
Quest Started Color (QuestStartedColor)FRSEUIColor(Token="Accent",Alpha=1.000000,Chroma=1.000000,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors
Toast Background Color (ToastBackgroundColor)FRSEUIColor(Token="Primary",Alpha=0.900000,Lightness=-0.412186,Chroma=0.525066,Hue=10.617354,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors
Tracker Background Color (TrackerBackgroundColor)FRSEUIColor(Token="Primary",Alpha=0.620000,Lightness=-0.417701,Chroma=0.449361,Hue=5.975613,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors--- Colors ---
Battle Check Interval (BattleCheckInterval)float0.250000HUDHow often the presentation checks whether a battle runs (hides the tracker, holds notifications).
Game Modes Without Quest HUD (GameModesWithoutQuestHUD)TArray<TSoftClassPtr<AGameModeBase> >(1 entries)HUDNo quest HUD in worlds run by these game modes (main menu).
Quest HUDClass (QuestHUDClass)TSoftClassPtr<URSEScreenWidget>/Script/RSE.RSEQuestHUDWidgetHUDQuest tracker and notifications HUD (D-052). Empty = the built-in themed screen. A Widget Blueprint derived from RSEScreenWidget replaces it and receives a RSEQuestHUDViewModel (docs/product/custom-ui.md).
Viewport ZOrder (ViewportZOrder)int321HUD
Confirm Abandon (bConfirmAbandon)boolTrueJournalAbandoning needs a second Confirm on the same row.
Journal Categories (JournalCategories)TArray<FRSEJournalCategoryTab>(4 entries)JournalJournal tabs, in order.
Journal Details Width (JournalDetailsWidth)float680.000000JournalWidth of the quest details column (the quest list uses the party menu column width).
Block Spacing (BlockSpacing)float14.000000Journal|PicturesSpace between the journal's blocks (picture, key line, text, objectives, rewards).
Show Characters (bShowCharacters)boolTrueJournal|PicturesShow the portraits of the quest's characters (Quest -> Characters).
Show Header Image (bShowHeaderImage)boolTrueJournal|PicturesShow the quest's header picture (or, without one, a band in the category's color).
Show Mini Map (bShowMiniMap)boolTrueJournal|PicturesShow a mini-map of the current objective (when the level's map can show it); a click opens the Map tab there.
Show Rewards (bShowRewards)boolTrueJournal|PicturesShow what a quest's success gives (items, money, experience...).
Category Colors (CategoryColors)TMap<FGameplayTag,FRSEUIColor>(4 entries)Journal|PicturesColors of the header band of a quest without a picture, by category (missing = the started color).
Character Portrait Size (CharacterPortraitSize)float52.000000Journal|Pictures
Experience Reward Format (ExperienceRewardFormat)FTextNSLOCTEXT("RSEQuestUI", "ExperienceRewardFormat", "{Amount} XP")Journal|PicturesReward rows: experience ("{Amount} XP") and points ("{Amount} {Currency}").
Header Image Height (HeaderImageHeight)float150.000000Journal|PicturesHeight of the header picture (the width is the details column's).
Key Line Color (KeyLineColor)FRSEUIColor(Token="Accent",Alpha=1.000000,Lightness=0.026962,Chroma=0.677076,Hue=0.810119,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Journal|PicturesThe highlighted line (the current objective) and its band.
Key Line Fill (KeyLineFill)FRSEUIColor(Token="Accent",Alpha=0.120000,Chroma=1.000000,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Journal|Pictures
Mini Map Hint (MiniMapHint)FTextNSLOCTEXT("RSEQuestUI", "MiniMapHint", "Click to open the map here")Journal|Pictures
Mini Map Size (MiniMapSize)float150.000000Journal|Pictures
Mini Map Span (MiniMapSpan)float0.300000Journal|PicturesShare of the whole map the mini-map shows around the objective (0.25 = a quarter of the map's side).
Objective Icon Size (ObjectiveIconSize)float26.000000Journal|Pictures
Objective Kind Icons (ObjectiveKindIcons)TMap<FGameplayTag,TSoftObjectPtr<UTexture2D> >(7 entries)Journal|PicturesIcons of the objective kinds (Quest.Objective.*; a kind without one uses its parent's, then Quest.Objective's).
Objective Kind Labels (ObjectiveKindLabels)TMap<FGameplayTag,FText>(7 entries)Journal|PicturesNames of the objective kinds (tooltips, Blueprint screens).
Points Reward Format (PointsRewardFormat)FTextNSLOCTEXT("RSEQuestUI", "PointsRewardFormat", "{Amount} {Currency}")Journal|Pictures
Reward Icons (RewardIcons)TMap<ERSERewardKind,TSoftObjectPtr<UTexture2D> >(7 entries)Journal|PicturesIcons of rewards without their own (money, experience, points; items and abilities use theirs, recruits their portrait).
Reward Icon Size (RewardIconSize)float34.000000Journal|Pictures
Rewards Header (RewardsHeader)FTextNSLOCTEXT("RSEQuestUI", "RewardsHeader", "Rewards")Journal|Pictures
Ability Forgotten Format (AbilityForgottenFormat)FTextNSLOCTEXT("RSEQuestUI", "AbilityForgottenFormat", "{Character} forgot {Ability}.")NotificationsBody of the forgotten-ability notice. Arguments: {Character}, {Ability}.
Ability Learned Format (AbilityLearnedFormat)FTextNSLOCTEXT("RSEQuestUI", "AbilityLearnedFormat", "{Character} learned {Ability}!")NotificationsBody of the learned-ability notice. Arguments: {Character}, {Ability}.
Ability Learned Header (AbilityLearnedHeader)FTextNSLOCTEXT("RSEQuestUI", "AbilityLearnedHeader", "New Ability")NotificationsHeader of the learned-ability notice.
Hold Toasts in Battle (bHoldToastsInBattle)boolTrueNotificationsNotifications wait while a battle runs and appear afterwards.
Toast Abandoned Quests (bToastAbandonedQuests)boolFalseNotifications
Toast Learned Abilities (bToastLearnedAbilities)boolTrueNotificationsNotify abilities learned or forgotten for good (Learn Ability / Forget Ability effects, scrolls; D-082).
Toast Objective Progress (bToastObjectiveProgress)boolTrueNotificationsNotify counter changes ("Wolves 2/5"), not only completed objectives.
Toast Quests Missed Before Start (bToastQuestsMissedBeforeStart)boolFalseNotificationsNotify quests missed before the player ever started them (they always appear in the journal).
Max Queued Toasts (MaxQueuedToasts)int328NotificationsNotifications waiting beyond this are dropped (oldest first).
Max Visible Toasts (MaxVisibleToasts)int323Notifications
Toast Alignment (ToastAlignment)FVector2D(X=0.500000,Y=0.000000)Notifications
Toast Anchor (ToastAnchor)FVector2D(X=0.500000,Y=0.100000)Notifications--- Notifications ---
Toast Duration (ToastDuration)float3.500000Notifications
Toast Spacing (ToastSpacing)float6.000000Notifications
Toast Width (ToastWidth)float420.000000Notifications
Hide Tracker in Battle (bHideTrackerInBattle)boolTrueTracker
Show Tracker (bShowTracker)boolTrueTracker--- Tracker ---
Tracker Shows Optional Objectives (bTrackerShowsOptionalObjectives)boolTrueTracker
Max Tracker Objectives (MaxTrackerObjectives)int324TrackerOpen objectives listed under the tracked quest.
Tracker Alignment (TrackerAlignment)FVector2D(X=1.000000,Y=0.000000)Tracker
Tracker Anchor (TrackerAnchor)FVector2D(X=1.000000,Y=0.000000)TrackerNormalized screen anchor and pivot of the tracker panel, plus a pixel offset (default: under the minimap, D-092).
Tracker Offset (TrackerOffset)FVector2D(X=-24.000000,Y=296.000000)Tracker
Tracker Width (TrackerWidth)float320.000000Tracker

RPG Saga Engine: Quests

Class URSEQuestSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Quest system rules (Project Settings -> RPG Saga Engine -> Quests).

SettingTypeDefaultCategoryRestartDescription
Ending Set (EndingSet)TSoftObjectPtr<URSEEndingSetData>NoneEndingsThe game's endings, key choices, hidden score and point of no return.
Auto Track Started Quests (bAutoTrackStartedQuests)boolTrueQuestsA newly started quest becomes the tracked quest when nothing is tracked.
Load Quests from Asset Manager (bLoadQuestsFromAssetManager)boolTrueQuestsLoad every quest registered with the Asset Manager (type RSEQuestData) when the game starts, so availability and auto-start are evaluated for all of them. Quest assets are small (heavy references must be soft).
Max Evaluation Passes (MaxEvaluationPasses)int3264QuestsSafety cap on chained re-evaluations in one update (effects that change state which completes more objectives...). Reaching it means content loops; it is logged as an error.

RPG Saga Engine: Reinforcements

Class URSEReinforcementSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Reinforcements and scripted battle events (D-117, docs/product/reinforcements.md): an enemy calls its friends, who appear out of sight and run to the fight; important battles pause for a line and a turn.

SettingTypeDefaultCategoryRestartDescription
Incoming Blackboard Key (IncomingBlackboardKey)FNameIncomingReinforcementsCallingThe AI team blackboard key that holds how many reinforcements are on their way for a team (D-056 blackboard): AI profile rules may read it (hold back, defend the caller) while help is coming. Empty = not written.
Interrupting Statuses (InterruptingStatuses)FGameplayTagContainer(GameplayTags=((TagName="Status.Silence"),(TagName="Status.Sleep"),(TagName="Status.Daze"),(TagName="Status.Stop")))CallingStatuses that stop a caller from calling (and, when its data says so, cancel a call in progress): silence, sleep, a daze. A caller that is not standing (fallen, gone) never calls.
Max Units Per Wave (MaxUnitsPerWave)int328CallingMost units one wave may bring (a safety cap over the data).
Reinforcements (bReinforcements)boolTrueGeneralOff = no reinforcement is ever called (the data stays; scripted battle events still run).
Scripted Events (bScriptedEvents)boolTrueGeneralOff = scripted battle events never run.
Grid Enter at Edge (bGridEnterAtEdge)boolTrueOther ModesGrid Tactics: reinforcements enter on the grid's edge tiles (the nearest to the caller), else next to the caller.
Classic Row (ClassicRow)ERSEATBRowFrontOther ModesATB / turn-based: the row reinforcements take when their data does not say.
Grid Min Party Tiles (GridMinPartyTiles)int323Other ModesGrid Tactics: edge tiles closer than this to a party unit are skipped (tiles, Manhattan).
Classic Act Now Shift (ClassicActNowShift)float1.000000Scripted EventsGrid Tactics, ATB and turn-based have no inserted turns: a scripted event's "acts now" moves the unit's next turn this much sooner (a fraction of a turn: 1 = a whole turn).
Max Events Per Step (MaxEventsPerStep)int324Scripted EventsMost scripted events that may fire at one safe point (a guard against events that trigger each other).
Hide from Party Sight (bHideFromPartySight)boolTrueSpawn PointsPoints must also be hidden from the party's line of sight (not only out of the camera's view).
Concealment Radius (ConcealmentRadius)float3.000000Spawn PointsHow far around a point obstacles count for the concealment preference (meters).
Concealment Weight (ConcealmentWeight)float0.600000Spawn PointsPreference for points next to tall obstacles (trees, rocks, walls): they come out of the forest. 0 = none.
Edge Weight (EdgeWeight)float1.000000Spawn PointsPreference for points far from the party (the edges of the battle area). 0 = none.
Max Samples (MaxSamples)int32800Spawn PointsMost candidate points tested per wave (each one runs a line of sight check per party member).
Min Party Distance (MinPartyDistance)float10.000000Spawn PointsSpawn points closer than this to any party member are never used (meters, 2D).
Sample Spacing (SampleSpacing)float1.000000Spawn PointsSpacing of the candidate points sampled around the caller (meters). Smaller = more candidates, more cost.
Unit Spacing (UnitSpacing)float0.800000Spawn PointsRoom between two units of the same wave (meters, edge to edge).

RPG Saga Engine: Reinforcements (Presentation)

Class URSEReinforcementPresentationSettings (module RSE), Project Settings, Project, RPG Saga Engine. How reinforcements and scripted battle events look and sound (D-117): the caller's bubble, the banner, the runners, the minimap markers, the lines of scripted events.

SettingTypeDefaultCategoryRestartDescription
Announce Sound (AnnounceSound)FGameplayTag(TagName="Audio.Battle.Reinforcement.Announce")AudioSound of the "Reinforcements!" banner.
Arrival Sound (ArrivalSound)FGameplayTag(TagName="Audio.Battle.Reinforcement.Arrive")AudioSound when a wave joins.
Call Sound (CallSound)FGameplayTag(TagName="Audio.Battle.Reinforcement.Call")AudioSound of a call when the data has none (an Audio.* tag of the sound catalog).
Bubble Back Color (BubbleBackColor)FRSEUIColor(Token="Primary",Alpha=0.820000,Lightness=-0.279664,Chroma=0.119391,Hue=21.873074,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Bubbles
Bubble Height (BubbleHeight)float70.000000BubblesHeight of a bubble above the unit's head (cm).
Bubble Text Color (BubbleTextColor)FRSEUIColor(Token="Text",Alpha=1.000000,Lightness=0.006437,Chroma=2.642451,Hue=162.667007,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Bubbles--- Bubbles ---
Bubble Wrap Width (BubbleWrapWidth)float320.000000BubblesWidest a bubble's text wraps at (px).
Announce Text (AnnounceText)FTextNSLOCTEXT("RSEReinforcementPresentation", "AnnounceText", "Reinforcements!")CallBanner when help is called (data without its own text).
Arrived Text (ArrivedText)FTextNSLOCTEXT("RSEReinforcementPresentation", "ArrivedText", "Reinforcements arrive!")CallBanner when a wave joins the battle. Empty = no banner.
Banner Seconds (BannerSeconds)float1.600000CallHow long the banners stay (real seconds).
Call Focus Seconds (CallFocusSeconds)float1.200000CallThe battle waits this long on the caller when a call starts (the camera shows it calling; game seconds).
Calling Color (CallingColor)FRSEUIColor(Token="Warning",Alpha=1.000000,Lightness=-0.016729,Chroma=1.097072,Hue=-1.844743,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Call
Calling Icon (CallingIcon)FTextINVTEXT("(!)")CallThe icon over a unit that is calling for help (a short text or symbol, shown in the bubble before the bark).
Cancelled Text (CancelledText)FTextNSLOCTEXT("RSEReinforcementPresentation", "CancelledText", "Cut off!")CallShown over the caller when its call was stopped ("Silenced!"). Empty = nothing.
Default Call Bark (DefaultCallBark)FTextNSLOCTEXT("RSEReinforcementPresentation", "DefaultCallBark", "To me!")CallWhat a caller shouts when its data has no bark.
Area Margin (AreaMargin)float4.000000RunnersExtra room around the farthest reinforcement point when the area grows (meters).
Grow Area for Reinforcements (bGrowAreaForReinforcements)boolTrueRunnersThe battle area grows to take the farthest reinforcement point (within Free Tactics (Presentation) -> Max Area Size).
Require Nav Mesh (bRequireNavMesh)boolTrueRunnersOn a map with a navigation mesh, spawn points must lie on it.
Camera Margin (CameraMargin)float4.000000RunnersMargin inside the screen edges a spawn point must stay out of (degrees of the view's half angles).
Leftover Behavior (LeftoverBehavior)TSoftObjectPtr<URSERoamingBehaviorData>/RPGSagaEngine/Data/Encounters/Roaming/DA_Roam_Aggressive.DA_Roam_AggressiveRunnersBehavior of reinforcements left in the world when the battle ended before they arrived (Leftover = Become Roaming). Empty = Aggressive.
Marker Category (MarkerCategory)FGameplayTag(TagName="Map.Marker.Reinforcement")RunnersThe minimap / compass category of units on their way (Map & Minimap categories).
Min Run Seconds (MinRunSeconds)float1.500000RunnersThey run at least this long before they may be handed to the battle (real seconds), so the player sees them come.
Run Speed (RunSpeed)float520.000000RunnersHow fast the reinforcements run in (cm/s).
Stop Distance (StopDistance)float3.000000RunnersThey stop running this far from the caller (meters).
Confirm Skips Line (bConfirmSkipsLine)boolTrueScripted EventsThe confirm input skips a scripted line (not a dialog: the dialog has its own input).
Show Speaker Banner (bShowSpeakerBanner)boolTrueScripted EventsThe speaker's name in front of a scripted line in the banner ("Varg: ...").
Cinematic Distance (CinematicDistance)float900.000000Scripted EventsCinematic camera of scripted events: the distance to the speaker (cm).
Script Line Seconds (ScriptLineSeconds)float2.800000Scripted EventsHow long a scripted line stays when its event does not say (real seconds).

RPG Saga Engine: Reward Feed

Class URSERewardFeedSettings (module RSE), Project Settings, Project, RPG Saga Engine. Reward feed (D-128).

SettingTypeDefaultCategoryRestartDescription
Announce Loot Placements (bAnnounceLootPlacements)boolTrueStyleD-143: loot dealt into the members' bags outside battles (chests, pick-ups, quests, shops) shows a toast per receiver ("Potion x2 -> Mira"), with the style's Items provider texts. Battle rewards name the receivers in their own toasts.
Kind Icons (KindIcons)TMap<FName,TSoftObjectPtr<UTexture2D> >(9 entries)StyleGlyph of each kind of toast without an icon of its own (tinted with the kind's color). The plugin's defaults use its glyphs.
Style (Style)TSoftObjectPtr<URSERewardFeedStyle>NoneStyleThe look, timings and providers. Empty = the built-in style.
Widget Class (WidgetClass)TSoftClassPtr<URSERewardFeedWidget>NoneStyleThe widget that shows the feed on each local player's screen. Empty = the built-in one (painted, no widget per toast).
ZOrder (ZOrder)int3212StyleViewport Z order of the feed (over the HUD, under modal screens).

RPG Saga Engine: Rules Profiles

Class URSERulesSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Rules profiles (D-035).

SettingTypeDefaultCategoryRestartDescription
Session Rule Options (SessionRuleOptions)TArray<FName>(4 entries)Co-opOption rows that change rules of play (D-139): in co-op their values are the host's for everyone (a guest sees them greyed out) and only the host changes them. Ids of the options screen's rows; add a game's own rule rows here.
Default Profile (DefaultProfile)TSoftObjectPtr<URSERulesProfile>/RPGSagaEngine/Data/Rules/DA_Rules_Default.DA_Rules_DefaultRules ProfilesProfile of a new game (and of saves that have none). Empty = the global settings only. Story effects ("Set Rules Profile") switch the game's profile later; encounters may override it per battle.

RPG Saga Engine: Save

Class URSESaveSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Save/load rules (D-010).

SettingTypeDefaultCategoryRestartDescription
Autosave Slot Count (AutosaveSlotCount)int321AutosaveAutosave slots in rotation: each autosave goes to an empty one, else overwrites the oldest. 1 = the usual single autosave (playtest 2026-09-28); the save screen lists extra autosave slots only once they hold a save.
Autosave in No Save Zones (bAutosaveInNoSaveZones)boolFalseAutosaveZone transition autosaves also in no-save areas (by default they are skipped there, like the save item).
Autosave on Zone Transition (bAutosaveOnZoneTransition)boolTrueAutosaveAutosave when the player arrives on another map through a zone exit, the world map or a story travel.
Min Seconds Between Autosaves (MinSecondsBetweenAutosaves)float30.000000AutosaveZone transition autosaves closer than this to the previous autosave are skipped (walking back and forth).
Zone Autosave Delay (ZoneAutosaveDelay)float0.500000AutosaveDelay after arriving before the zone transition autosave (the new map settles, the thumbnail shows it).
Backend (Backend)ERSESaveBackendTypeFileBackendWhere save slots are stored. File: our own files with checksum, atomic replace and backup (default, PC / Steam Deck). Save Game System: the engine's platform save system (ISaveGameSystem), which console SDKs implement. Custom: a C++ class implementing IRSESaveBackend.
Custom Backend Class (CustomBackendClass)TSoftClassPtr<UObject>NoneBackendThe backend class when Backend = Custom (a C++ class implementing IRSESaveBackend).
Suspend Flush Timeout (SuspendFlushTimeout)float2.000000BackendSeconds the app waits for save writes in flight when it is suspended (the platform may stop it right after).
Session Policy Class (SessionPolicyClass)TSoftClassPtr<URSESaveSessionPolicy>NoneCo-opWho may save and load during a co-op session and what a refused player reads (default: only the host; the host may load while guests are connected). Empty = RSE Save Session Policy.
Keep Backup (bKeepBackup)boolTrueFilesKeep the previous good save of each slot as a backup (.bak) that loads when the slot is damaged (File backend).
Min Free Disk Space MB (MinFreeDiskSpaceMB)int321FilesFree disk space a save must leave (File backend): a write that would go below it fails with No Space before touching the slot. 0 = no check.
Legacy Player Options Sections (LegacyPlayerOptionsSections)TArray<FString>(1 entries)Player OptionsOlder GameUserSettings.ini sections that held the player options (e.g. a section of an earlier version of the game). At the first access, when [RSE.PlayerOptions] is empty, their keys are copied into it and the old section is removed, so the players keep their options. Empty = nothing to migrate.
Autosave Slot Name (AutosaveSlotName)FStringAutosaveSlotsAutosave slot file name (never overwritten by manual saves, D-010). With several autosave slots the others are Name1, Name2... Empty = no autosave at all.
Slot Count (SlotCount)int323SlotsManual save slots offered by the save/load menus.
Slot Name Prefix (SlotNamePrefix)FStringSlotSlotsManual slot file names are Prefix + index (Slot0, Slot1...).
User Index (UserIndex)int320SlotsPlatform user index of the saves while no platform user is known (D-170: URSEPlatformUserSubsystem sets the primary user).

RPG Saga Engine: Save UI

Class URSESaveUISettings (module RSE), Project Settings, Project, RPG Saga Engine. Save/load user flow (D-010): save points, the save item, the slot screens and restoring the player on load.

SettingTypeDefaultCategoryRestartDescription
Map Area Names (MapAreaNames)TMap<TSoftObjectPtr<UWorld> ,FText>(0 entries)AreasArea name per map, used when the player stands in no ARSEAreaVolume.
Unknown Area Name (UnknownAreaName)FTextAreasArea name when neither a volume nor MapAreaNames names the place. Empty = the map's asset name.
Autosave at Save Points (bAutosaveAtSavePoints)boolTrueRulesSave points write the autosave slot as soon as they are used (D-010), before the slot screen opens.
Lock Screen After Save (bLockScreenAfterSave)boolTrueRulesAfter a successful save the slot screen only accepts closing (one save per use, so one item per save).
Restore Party at Save Points (bRestorePartyAtSavePoints)boolTrueRulesSave points fully restore the party (HP/MP, KO, statuses) before saving, RSE style rest.
Fallback Load Map (FallbackLoadMap)TSoftObjectPtr<UWorld>NoneRulesMap used when a save has no map (should not happen outside tests). Empty = Game Flow -> NewGameMap.
Save Point Interact Radius (SavePointInteractRadius)float0.000000Save PointsRange around the origin of save points that set no Interact Radius of their own. 0 = none: like any interactable with a body, the player uses it within the interaction reach of its body (Project Settings -> RPG Saga Engine -> Interaction).
Save Point Mesh (SavePointMesh)TSoftObjectPtr<UStaticMesh>/Engine/BasicShapes/Cone.ConeSave PointsPlaceholder look of save points that set no mesh of their own.
Save Point Mesh Scale (SavePointMeshScale)FVector(X=0.600000,Y=0.600000,Z=0.800000)Save Points
Screen Background Color (ScreenBackgroundColor)FRSEUIColor(Token="Primary",Alpha=0.780000,Lightness=-0.526921,Chroma=0.679858,Hue=0.163523,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))ScreenDims the world (and the menus) behind the slot screen.
Screen Vertical Anchor (ScreenVerticalAnchor)float0.500000ScreenNormalized screen height of the panel's center.
Screen Width (ScreenWidth)float720.000000Screen
Screen ZOrder (ScreenZOrder)int3250ScreenZ-order of the slot screen in the viewport (above HUDs and the party menu).
Slot Widget Class (SlotWidgetClass)TSoftClassPtr<URSEScreenWidget>NoneScreenSave / load slot screen (D-052). Empty = the built-in themed screen. A Widget Blueprint derived from RSEScreenWidget replaces it and receives a RSESaveSlotsViewModel (docs/product/custom-ui.md).
Autosave Label (AutosaveLabel)FTextNSLOCTEXT("RSESaveUISettings", "Autosave", "Autosave")Texts
Autosave Numbered Label Format (AutosaveNumberedLabelFormat)FTextNSLOCTEXT("RSESaveUISettings", "AutosaveNumbered", "Autosave {0}")TextsAutosave rows when there are several autosave slots. {0} = 1-based number.
Backup Slot Detail (BackupSlotDetail)FTextNSLOCTEXT("RSESaveUISettings", "BackupDetail", "Backup copy")TextsDetail of a damaged save whose backup copy is shown (and loads) instead.
Backup Slot Message (BackupSlotMessage)FTextNSLOCTEXT("RSESaveUISettings", "BackupMessage", "This save file is damaged. Its backup copy (the previous save in this slot) will be loaded.")TextsMessage on the load screen when the selected save is damaged and its backup will load.
Blocked Message (BlockedMessage)FTextNSLOCTEXT("RSESaveUISettings", "Blocked", "You cannot save here.")TextsSaving is not allowed here (battle, dialog, cutscene, no-save zone).
Busy Message (BusyMessage)FTextNSLOCTEXT("RSESaveUISettings", "Busy", "Please wait...")Texts
Corrupt Message (CorruptMessage)FTextNSLOCTEXT("RSESaveUISettings", "Corrupt", "This save is damaged and cannot be loaded.")TextsD-170: the save is damaged and has no readable backup.
Corrupt Slot Detail (CorruptSlotDetail)FTextNSLOCTEXT("RSESaveUISettings", "CorruptDetail", "Damaged")TextsDetail of a save file that is damaged and has no readable backup (it cannot be loaded).
Done Hint Text (DoneHintText)FTextTextsHint after a save, when the screen only accepts closing.
Empty Slot Text (EmptySlotText)FTextNSLOCTEXT("RSESaveUISettings", "Empty", "Empty")Texts
Incompatible Slot Detail (IncompatibleSlotDetail)FTextNSLOCTEXT("RSESaveUISettings", "Incompatible", "Newer version")TextsDetail of a save written by a newer game version.
Load Action Text (LoadActionText)FTextNSLOCTEXT("RSESaveUISettings", "LoadAction", "Load")TextsAction of the confirm key prompt on the load screen.
Load Failed Message (LoadFailedMessage)FTextNSLOCTEXT("RSESaveUISettings", "LoadFailed", "This save could not be loaded.")Texts
Load Hint Text (LoadHintText)FTextTexts
Load Title (LoadTitle)FTextNSLOCTEXT("RSESaveUISettings", "LoadTitle", "Load")Texts--- Texts ---
Member Level Format (MemberLevelFormat)FTextNSLOCTEXT("RSESaveUISettings", "MemberLevel", "{Name} {Term.LevelShort} {Level}")TextsA party member with its level on the slot screens. {Name}, {Level}.
Member Separator (MemberSeparator)FTextNSLOCTEXT("RSESaveUISettings", "MemberSeparator", ", ")TextsJoins party member names.
No Label (NoLabel)FTextNSLOCTEXT("RSESaveUISettings", "No", "No")Texts
No Space Message (NoSpaceMessage)FTextNSLOCTEXT("RSESaveUISettings", "NoSpace", "There is not enough free storage to save. Free some space and try again.")TextsD-170: the storage is full (the save was not written; the previous save is untouched).
Overwrite Prompt (OverwritePrompt)FTextNSLOCTEXT("RSESaveUISettings", "Overwrite", "Overwrite this save?")Texts
Play Time Format (PlayTimeFormat)FTextNSLOCTEXT("RSESaveUISettings", "PlayTime", "{Hours}:{Minutes}:{Seconds}")Texts{Hours}, {Minutes}, {Seconds}: minutes and seconds have two digits.
Protected Slot Detail (ProtectedSlotDetail)FTextNSLOCTEXT("RSESaveUISettings", "Protected", "Protected")TextsDetail of the autosave row on the save screen.
Protected Slot Message (ProtectedSlotMessage)FTextNSLOCTEXT("RSESaveUISettings", "ProtectedMessage", "The autosave slot cannot be overwritten.")Texts
Save Action Text (SaveActionText)FTextNSLOCTEXT("RSESaveUISettings", "SaveAction", "Save")TextsAction of the confirm key prompt on the save screen.
Saved Message (SavedMessage)FTextNSLOCTEXT("RSESaveUISettings", "Saved", "Game saved.")Texts
Save Failed Message (SaveFailedMessage)FTextNSLOCTEXT("RSESaveUISettings", "SaveFailed", "The game could not be saved.")Texts
Save Hint Text (SaveHintText)FTextTextsOptional line under the key prompts (empty = none).
Save Point Prompt (SavePointPrompt)FTextNSLOCTEXT("RSESaveUISettings", "SavePointPrompt", "Save")TextsAction of the interaction prompt on a save point ("[E] Save").
Save Title (SaveTitle)FTextNSLOCTEXT("RSESaveUISettings", "SaveTitle", "Save")Texts
Signed Out Message (SignedOutMessage)FTextNSLOCTEXT("RSESaveUISettings", "SignedOut", "The profile that owns these saves is signed out. Sign in to save or load.")TextsD-170: the platform user the saves belong to signed out.
Slot Label Format (SlotLabelFormat)FTextNSLOCTEXT("RSESaveUISettings", "SlotLabel", "Slot {0}")Texts{0} = 1-based slot number.
Slot Money Format (SlotMoneyFormat)FTextNSLOCTEXT("RSESaveUISettings", "SlotMoney", "{Money}")TextsMoney on the slot screens. {Money} = the amount in the Economy money format.
Yes Label (YesLabel)FTextNSLOCTEXT("RSESaveUISettings", "Yes", "Yes")Texts
Capture Thumbnails (bCaptureThumbnails)boolTrueThumbnailsSaves carry a screenshot of the scene (without UI) taken when the save was requested.
Show Thumbnails (bShowThumbnails)boolTrueThumbnailsThe slot screens show each save's thumbnail.
Thumbnail Capture Timeout (ThumbnailCaptureTimeout)float1.000000ThumbnailsA screenshot that has not arrived after this long is given up (the save goes on without a thumbnail).
Thumbnail Display Size (ThumbnailDisplaySize)FVector2D(X=112.000000,Y=63.000000)ThumbnailsSize of the thumbnail on the slot screens.
Thumbnail Placeholder Color (ThumbnailPlaceholderColor)FRSEUIColor(Token="White",Alpha=0.060000,Chroma=1.000000,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))ThumbnailsBackground of a slot without a thumbnail.
Thumbnail Quality (ThumbnailQuality)int3280ThumbnailsJPEG quality of the stored thumbnail (1-100).
Thumbnail Width (ThumbnailWidth)int32320ThumbnailsWidth the screenshot is downscaled to (the height keeps the aspect).

RPG Saga Engine: Scenes

Class URSESceneSettings (module RSE), Project Settings, Project, RPG Saga Engine. Story scenes played with Level Sequences (D-043, docs/design/scenes.md): skip, camera return, letterbox and the overlay.

SettingTypeDefaultCategoryRestartDescription
Default Blend Out Seconds (DefaultBlendOutSeconds)float1.000000CameraCamera blend back to gameplay at the end of a scene (scenes may override it).
Skip Blend Out Seconds (SkipBlendOutSeconds)float0.350000CameraCamera blend back after a skipped scene (a skip should feel quick).
Confirm Skip (bConfirmSkip)boolTrueInputSkipping asks for a confirmation first. Off = the key skips at once.
Skip Keys (SkipKeys)TArray<FKey>(2 entries)InputAsks to skip a skippable scene (also while one of its dialog lines is shown).
Hide Engine HUD (bHideEngineHUD)boolTrueOverlayHides the engine HUD (AHUD) while a scene plays. The RSE prompt and quest tracker always hide.
Letterbox Color (LetterboxColor)FRSEUIColor(Token="Black",Alpha=1.000000,Chroma=1.000000,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Overlay
Letterbox Fraction (LetterboxFraction)float0.100000OverlayHeight of each letterbox bar, as a fraction of the screen height. 0 = no letterbox.
Letterbox in Seconds (LetterboxInSeconds)float0.400000OverlaySeconds the letterbox bars take to slide in.
Overlay Widget Class (OverlayWidgetClass)TSoftClassPtr<URSEScreenWidget>NoneOverlayScene overlay (letterbox, skip hint and question) (D-052). Empty = the built-in themed screen. A Widget Blueprint derived from RSEScreenWidget replaces it and receives a RSESceneOverlayViewModel (docs/product/custom-ui.md).
Overlay ZOrder (OverlayZOrder)int3245OverlayZ-order in the viewport: above the HUDs, below the dialog box (URSEDialogUISettings::WidgetZOrder).
Skip Action Text (SkipActionText)FTextNSLOCTEXT("RSEScene", "SkipAction", "Skip")TextKey hint of a skippable scene ("[Tab] Skip").
Skip No Text (SkipNoText)FTextNSLOCTEXT("RSEScene", "SkipNo", "Keep watching")Text
Skip Question Text (SkipQuestionText)FTextNSLOCTEXT("RSEScene", "SkipQuestion", "Skip this scene?")Text
Skip Yes Text (SkipYesText)FTextNSLOCTEXT("RSEScene", "SkipYes", "Skip")Text

RPG Saga Engine: Seeds

Class URSESeedSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Where game randomness comes from (D-133).

SettingTypeDefaultCategoryRestartDescription
Fixed World Seed (FixedWorldSeed)int320SeedsWorld seed of every new game (replays, bug reports, automated runs). 0 = a new seed per game. The console variable RSE.Seed.World overrides it while it is not 0.
Headless World Seed (HeadlessWorldSeed)int321SeedsWorld seed used where no game instance exists (headless simulations and tests): their results are reproducible.

RPG Saga Engine: Starter Project

Class URSEStarterSliceSettings (module RSEEditor), Project Settings, Project, RPG Saga Engine. Starter project (D-177, docs/design/plugin-phase.md section 3): what -run=RSENewProject -Slice=Starter builds into the project's root: a small playable slice made from the plugin's own content and shapes: a hub village, one generated interior, one battle of every mode, a branching dialog and a two-s...

SettingTypeDefaultCategoryRestartDescription
Action Arena Location (ActionArenaLocation)FVector2D(X=0.000000,Y=-3800.000000)Battle SitesAction: the arena's middle, its radius and the pillars that mark it.
Action Arena Pillars (ActionArenaPillars)int3210Battle Sites
Action Arena Radius (ActionArenaRadius)float700.000000Battle Sites
ATBStage Location (ATBStageLocation)FVector2D(X=-4200.000000,Y=-4200.000000)Battle SitesATB: the stage the classic battles (random encounter and the gate fight) are fought on.
Gate Location (GateLocation)FVector2D(X=3000.000000,Y=-1200.000000)Battle SitesTurn-based gate fight: the gate (two pillars with the trigger between them).
Grass Half Size (GrassHalfSize)FVector2D(X=900.000000,Y=600.000000)Battle Sites
Grass Location (GrassLocation)FVector2D(X=-2600.000000,Y=1200.000000)Battle SitesATB random encounter: the tall grass (center and half size).
Live Group Location (LiveGroupLocation)FVector2D(X=-3300.000000,Y=3600.000000)Battle SitesLive Tactics (free movement on the live map): where the visible enemy group stands.
Tactics Trigger Location (TacticsTriggerLocation)FVector2D(X=2300.000000,Y=2300.000000)Battle Sites
Tactics Zone Location (TacticsZoneLocation)FVector2D(X=3600.000000,Y=3600.000000)Battle SitesGrid Tactics: the zone's middle and the trigger that starts the battle.
Enemies (Enemies)TArray<TSoftObjectPtr<URSECharacterData> >(2 entries)ContentEnemies of the starter battles. Empty = Project Settings -> Wizards -> Default Enemies.
Interior Template (InteriorTemplate)TSoftObjectPtr<URSEInteriorData>/RPGSagaEngine/Data/Interiors/Examples/DA_Interior_Example_HunterLodge.DA_Interior_Example_HunterLodgeContentThe interior copied into the project and entered from the first plot (a generated interior: D-158).
Live Group Behavior (LiveGroupBehavior)TSoftObjectPtr<URSERoamingBehaviorData>/RPGSagaEngine/Data/Encounters/Roaming/DA_Roam_Cautious.DA_Roam_CautiousContentThe roaming behavior of the live Tactics group.
Shop (Shop)TSoftObjectPtr<URSEShopData>/RPGSagaEngine/Data/Economy/DA_Shop_Starter_Z1.DA_Shop_Starter_Z1ContentThe shop the Shopkeeper opens.
Floor Size (FloorSize)float14000.000000HubThe hub floor's side (cm). Every battle site below stands on it.
Player Start Location (PlayerStartLocation)FVector2D(X=0.000000,Y=-500.000000)Hub
Plot Locations (PlotLocations)TArray<FVector2D>(4 entries)HubVillage plots (houses made of shapes): their centers (cm) and size (width, depth, height).
Plot Size (PlotSize)FVector(X=600.000000,Y=500.000000,Z=400.000000)Hub
Save Point Location (SavePointLocation)FVector2D(X=350.000000,Y=-450.000000)Hub
Shape Mesh (ShapeMesh)TSoftObjectPtr<UStaticMesh>/Engine/BasicShapes/Cube.CubeHubThe shape village plots, pillars and counters are made of (an engine shape by default).
Villagers (Villagers)TArray<FRSEStarterVillager>(5 entries)HubThe people of the village (Talker, Shopkeeper, QuestGiver).

RPG Saga Engine: Stealth

Class URSEStealthSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Stealth and detection of visible enemies (D-097, D-151, docs/design/free-tactics.md sections 4 and 28): the detection meter, sneaking, concealment, light, cover, noise, the alarm, takedowns and the return to stealth.

SettingTypeDefaultCategoryRestartDescription
Alarms (bAlarms)boolTrueAlarmAn enemy that becomes aware of the party raises the alarm: the groups within its radius join, the others stay unaware.
Ambush Delays Alarm (bAmbushDelaysAlarm)boolTrueAlarmIn the party's ambush the enemies were unaware: nobody is called at the start, and a surprised enemy raises the alarm only when it gets a turn of its own (kill it first and nobody comes).
Default Alarm Radius (DefaultAlarmRadius)float1200.000000AlarmThe alarm radius of a behavior that leaves Alarm Radius at -1 (cm; as Free Tactics -> Call For Help Radius by default).
Ambush Range (AmbushRange)float1400.000000AmbushThe party may spring an ambush on an unaware group this far from the leader (cm).
Placed Member Join Radius (PlacedMemberJoinRadius)float3000.000000AmbushMembers placed for an ambush fight from their places when they stand this close to the leader (cm), farther than the usual join radius.
Suspicious Looks Toward (bSuspiciousLooksToward)boolTrueAwarenessA suspicious enemy stops and turns toward where it saw or heard something (off: it keeps patrolling).
Suspicious Above (SuspiciousAbove)float0.350000AwarenessFrom this share of its meter an enemy is suspicious ("?"): it stops and looks toward what it noticed.
Concealment Tags (ConcealmentTags)TMap<FName,float>(2 entries)ConcealmentPlaces that hide the party: an actor or component tag (on a volume, a tall grass field, a shadowed area) and the multiplier it gives the enemies' sight and hearing distance there (0.5 = half). Several: the lowest counts.
Sneak Behind Cover Hides (bSneakBehindCoverHides)boolTrueCoverSneaking behind partial cover hides a party member from sight completely (crouched behind the wall).
Partial Cover Sight Multiplier (PartialCoverSightMultiplier)float0.600000CoverPartly behind cover (a low wall hides the body, the head shows): the enemies' sight reaches this share of its distance.
Use Detection Meter (bUseDetectionMeter)boolTrueDetectionVisible enemies notice the party through a detection meter that fills up to "!" (off = at once, as before D-097: the first moment they see or hear the party).
Decay Delay (DecayDelay)float1.500000DetectionSeconds without seeing or hearing anything before the meter starts to drain.
Decay Seconds (DecaySeconds)float5.000000DetectionSeconds for a full meter to drain back to empty.
Seconds to Fill Close (SecondsToFillClose)float0.800000DetectionSeconds to fill the meter for a party member right in front of the enemy (a quarter of the way to the edge of its senses or closer).
Seconds to Fill Far (SecondsToFillFar)float4.000000DetectionSeconds to fill the meter for a party member at the very edge of the enemy's sight or hearing.
Show Meter Above (ShowMeterAbove)float0.020000DetectionThe meter shows above an enemy once it passes this share (below: nothing shown).
Rules Class (RulesClass)TSoftClassPtr<URSEStealthRules>NoneExtendingThe rules object (a subclass of URSEStealthRules changes how takedowns, noise and alarms resolve). Empty = the built-in rules.
Dark Sight Multiplier (DarkSightMultiplier)float0.550000LightIn full darkness the enemies' sight reaches this share of its distance (light 1 = all of it).
Lamp Light Radius (LampLightRadius)float600.000000LightA party member within this distance of a lit lamp (a Night Light component that is on) stands in its light (cm).
Phase Light (PhaseLight)TMap<FGameplayTag,float>(3 entries)LightHow lit the world is in each phase of the day (Time.Phase.*; 1 = daylight). A phase not listed is lit. Use these or the Time & Weather Rules' sight multipliers for the night, not both (they multiply).
Weather Light (WeatherLight)TMap<FGameplayTag,float>(2 entries)LightLight multiplier of weathers (Weather.*: fog, storm); a parent tag covers its children; several: the lowest.
Ability Noise (AbilityNoise)TMap<TSoftObjectPtr<URSEAbilityData> ,float>(0 entries)NoiseAbilities with their own noise radius (cm): a thunder spell heard across the valley. Overrides Action Noise Radius.
Action Noise Radius (ActionNoiseRadius)float1500.000000NoiseIn a battle that began as the party's ambush, an action that is not silent is heard this far (cm; 0 = actions are silent).
Noise Gain at Edge (NoiseGainAtEdge)float0.400000NoiseA noise at the very edge of its radius fills this share.
Noise Gain at Source (NoiseGainAtSource)float1.000000NoiseA noise right next to an enemy fills this share of its meter at once (1 = it notices the party).
Silent Abilities (SilentAbilities)TArray<TSoftObjectPtr<URSEAbilityData> >(0 entries)NoiseAbilities that make no noise (a silenced shot, a sleeping spell).
Silent Tag (SilentTag)FGameplayTag(TagName="Stealth.Silent")NoiseThe tag that makes a unit's weapon attacks silent (a weapon's Granted Tags, a class or trait tag).
Return Only After Ambush (bReturnOnlyAfterAmbush)boolTrueReturn To StealthOnly after a battle the party opened unseen (its ambush, a failed takedown); off = after any battle.
Return to Stealth (bReturnToStealth)boolTrueReturn To StealthA won battle with nobody aware left standing (no alarm reached another group) gives the party back to sneaking, and the rest of the area stays as it was.
Run Hearing Multiplier (RunHearingMultiplier)float2.000000SneakHearing distance multiplier while running (running is loud).
Run Speed Share (RunSpeedShare)float0.700000SneakThe explorer counts as running above this share of its run speed.
Sneak Hearing Multiplier (SneakHearingMultiplier)float0.350000SneakHearing distance multiplier while sneaking.
Sneak Sight Multiplier (SneakSightMultiplier)float0.600000SneakSneaking: the enemies' sight reaches this share of its usual distance.
Sneak Speed Multiplier (SneakSpeedMultiplier)float0.450000SneakSneaking: movement speed multiplier (a slow, careful walk).
Still Hearing Multiplier (StillHearingMultiplier)float0.500000SneakHearing distance multiplier while standing still.
Walk Hearing Multiplier (WalkHearingMultiplier)float1.000000SneakHearing distance multiplier while walking.
Unseen Below (UnseenBelow)float0.750000SurpriseAttacking an enemy whose meter is below this share counts as attacking unseen (a surprise round for the party).
Takedown Gives Experience (bTakedownGivesExperience)boolTrueTakedownA takedown gives the target's experience to the party, split like a battle's.
Takedown Lone Targets Only (bTakedownLoneTargetsOnly)boolTrueTakedownOnly a lone enemy (its group has nobody else standing) can be taken down; a group is fought in an ambush instead.
Takedowns (bTakedowns)boolTrueTakedownSilent takedowns while sneaking: an unaware, isolated enemy is taken out without a battle when nobody sees or hears it.
Default Takedown (DefaultTakedown)FRSETakedownProfile(bAllowed=True,Reach=220.000000,MaxAngleFromBehind=80.000000,bRequireUnaware=True,NoiseRadius=1200.000000,WitnessHearingRadius=150.000000)TakedownMeans of an attacker without any listed tag (bare hands, a sword: loud). Not Allowed = only the listed means take down.
Takedown Profiles (TakedownProfiles)TMap<FGameplayTag,FRSETakedownProfile>(1 entries)TakedownMeans by tag (the attacker's: weapons' Granted Tags, class, traits): the first listed tag the attacker has wins.

RPG Saga Engine: Stealth (Presentation)

Class URSEStealthPresentationSettings (module RSE), Project Settings, Project, RPG Saga Engine. How stealth ambushes look and feel (D-151, docs/design/free-tactics.md section 28): the detection shapes on the ground (one decal over the area around the local player, the D-113 overlay material and look), the meters' suspicious mark, the takedown and ambush prompts, the keys, the notifications.

SettingTypeDefaultCategoryRestartDescription
Awareness Precision (AwarenessPrecision)float0.050000Co-opThe shared meters are rounded to this step (fewer updates sent).
Awareness Sync Interval (AwarenessSyncInterval)float0.200000Co-opSeconds between the authority's awareness writes to the shared stealth state (co-op meters and marks).
Area Size (AreaSize)float4400.000000Ground OverlaySide of the square around the local player the overlay covers (cm).
Cell Size (CellSize)float35.000000Ground OverlaySize of one mask cell (cm): smaller = finer shapes, more work.
Cone Rays (ConeRays)int3228Ground OverlayRays per sight cone: the cone stops at walls along each ray.
Height Stride (HeightStride)int323Ground OverlayThe ground heights are measured every this many cells (in between they are interpolated).
Height Tolerance (HeightTolerance)float60.000000Ground OverlayGround within this height of a cell's measured ground takes paint (cm): never walls or props.
Max Enemies (MaxEnemies)int3212Ground OverlayAt most this many enemies are drawn (the nearest).
Overlay Material (OverlayMaterial)TSoftObjectPtr<UMaterialInterface>NoneGround OverlayThe overlay material (it reads a mask texture: sight, hearing, aware sight, ground height). Empty = Free Tactics (Presentation) -> Overlay Material.
Overlay Mode (OverlayMode)ERSEStealthOverlayModeWhileSneakingGround Overlay--- Ground overlay ---
Refresh Interval (RefreshInterval)float0.120000Ground OverlaySeconds between redraws of the shapes (the enemies move, turn, see).
Smoothing (Smoothing)int321Ground OverlayHow far the edges are softened (mask cells).
Sort Order (SortOrder)int324Ground Overlay
Aware Fill Color (AwareFillColor)FRSEUIColor(Token="Negative",Alpha=0.180000,Lightness=-0.007488,Chroma=1.143559,Hue=21.617987,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Ground Overlay|LookSight cones of suspicious or alerted enemies.
Aware Outline Color (AwareOutlineColor)FRSEUIColor(Token="Negative",Alpha=0.950000,Lightness=0.012073,Chroma=1.020684,Hue=21.934082,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Ground Overlay|Look
Glow (Glow)float1.000000Ground Overlay|Look
Hearing Fill Color (HearingFillColor)FRSEUIColor(Token="Info",Lightness=0.094183,Chroma=0.417866,Hue=4.035979,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Ground Overlay|LookHearing circles: an outline only by default.
Hearing Outline Color (HearingOutlineColor)FRSEUIColor(Token="Info",Alpha=0.600000,Lightness=0.094183,Chroma=0.417866,Hue=4.035979,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Ground Overlay|Look
Outline Softness (OutlineSoftness)float6.000000Ground Overlay|Look
Outline Width (OutlineWidth)float12.000000Ground Overlay|LookOutline width on the ground (cm) and its softness (cm).
Sight Fill Color (SightFillColor)FRSEUIColor(Token="Accent",Alpha=0.100000,Lightness=0.056368,Chroma=0.358493,Hue=4.888667,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Ground Overlay|LookSight cones of unaware enemies.
Sight Outline Color (SightOutlineColor)FRSEUIColor(Token="Accent",Alpha=0.800000,Lightness=0.041558,Chroma=0.461881,Hue=0.020349,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Ground Overlay|Look
Input Priority (InputPriority)int322KeysPriority of the stealth keys' mapping context (above the exploration context).
Place Keys (PlaceKeys)TArray<FKey>(2 entries)KeysPlace: the character the player leads holds its spot and the next member is taken (while sneaking); not sneaking: everyone regroups.
Strike Keys (StrikeKeys)TArray<FKey>(2 entries)KeysStrike: a takedown on the enemy in reach, else springs the ambush on the unaware group in range.
Ambush Prompt (AmbushPrompt)FTextNSLOCTEXT("RSEStealthPresentation", "AmbushPrompt", "{Key} Ambush")MeterThe prompt over an unaware group the party can ambush.
Prompt Color (PromptColor)FRSEUIColor(Token="Text",Alpha=1.000000,Lightness=-0.000937,Chroma=4.794667,Hue=-58.577801,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Meter
Suspicious Color (SuspiciousColor)FRSEUIColor(Token="Warning",Alpha=1.000000,Lightness=-0.018861,Chroma=1.223331,Hue=2.236193,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))MeterThe meter's color while the enemy is suspicious, and the mark it shows.
Suspicious Mark (SuspiciousMark)FTextNSLOCTEXT("RSEStealthPresentation", "SuspiciousMark", "?")Meter
Takedown Prompt (TakedownPrompt)FTextNSLOCTEXT("RSEStealthPresentation", "TakedownPrompt", "{Key} Takedown")MeterThe prompt over an enemy the party can take down ({Key}: the key's name).
Alarm Callout Seconds (AlarmCalloutSeconds)float2.200000NotificationsSeconds the alarm's shout shows over the enemy that raised it (in the battle).
Alarm Color (AlarmColor)FRSEUIColor(Token="Negative",Alpha=1.000000,Lightness=-0.004980,Chroma=1.076515,Hue=14.498447,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Notifications
Alarm Text (AlarmText)FTextNSLOCTEXT("RSEStealthPresentation", "Alarm", "Alarm!")Notifications
Failed Takedown Text (FailedTakedownText)FTextNSLOCTEXT("RSEStealthPresentation", "FailedTakedown", "{Name} fights back!")Notifications
Noisy Takedown Text (NoisyTakedownText)FTextNSLOCTEXT("RSEStealthPresentation", "NoisyTakedown", "Someone noticed!")Notifications
Notice Color (NoticeColor)FRSEUIColor(Token="Info",Alpha=1.000000,Lightness=0.066506,Chroma=0.653430,Hue=-3.701602,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Notifications
Placed Text (PlacedText)FTextNSLOCTEXT("RSEStealthPresentation", "Placed", "{Name} holds this spot")NotificationsA member was placed ({Name}).
Regroup Text (RegroupText)FTextNSLOCTEXT("RSEStealthPresentation", "Regroup", "The party regroups")Notifications
Return to Stealth Text (ReturnToStealthText)FTextNSLOCTEXT("RSEStealthPresentation", "ReturnToStealth", "Back in the shadows")Notifications
Silent Takedown Text (SilentTakedownText)FTextNSLOCTEXT("RSEStealthPresentation", "SilentTakedown", "Silent takedown")Notifications--- Notifications ---
Takedown Corpse Seconds (TakedownCorpseSeconds)float0.000000NotificationsSeconds a taken-down enemy lies before it goes (0 = stays; as Free Tactics corpses otherwise).
Takedown Sound (TakedownSound)TSoftObjectPtr<USoundBase>NoneNotificationsPlayed at a takedown (empty = none).

RPG Saga Engine: Studio

Class URSEStudioSettings (module RSEEditor), Project Settings, Project, RPG Saga Engine. RPG Saga Studio (D-090, docs/product/studio.md): the project-wide settings of the Studio window, its explanations and the character sheet.

SettingTypeDefaultCategoryRestartDescription
Ability Preview Aim Color (AbilityPreviewAimColor)FLinearColor(R=1.000000,G=0.150000,B=0.100000,A=1.000000)Ability Preview
Ability Preview Area Color (AbilityPreviewAreaColor)FLinearColor(R=1.000000,G=0.550000,B=0.100000,A=1.000000)Ability Preview
Ability Preview Damage Color (AbilityPreviewDamageColor)FLinearColor(R=1.000000,G=0.920000,B=0.850000,A=1.000000)Ability PreviewColors of damage, healing and status numbers, and of the area telegraph (the aimed tile in Aim Color).
Ability Preview Exposure EV100 (AbilityPreviewExposureEV100)float-1.000000Ability PreviewFixed exposure of the preview (EV100; lower = brighter).
Ability Preview Field Of View (AbilityPreviewFieldOfView)float38.000000Ability PreviewVertical field of view of the preview camera.
Ability Preview Floor Material (AbilityPreviewFloorMaterial)TSoftObjectPtr<UMaterialInterface>NoneAbility PreviewIts material. Empty = the mesh's own.
Ability Preview Floor Mesh (AbilityPreviewFloorMesh)TSoftObjectPtr<UStaticMesh>/Engine/BasicShapes/Plane.PlaneAbility PreviewThe floor under the preview (a flat mesh, scaled to the scene). Empty = no floor.
Ability Preview Heal Color (AbilityPreviewHealColor)FLinearColor(R=0.450000,G=1.000000,B=0.550000,A=1.000000)Ability Preview
Ability Preview Loop Delay (AbilityPreviewLoopDelay)float0.800000Ability PreviewLoop: the pause between two plays (seconds).
Ability Preview Number Material (AbilityPreviewNumberMaterial)TSoftObjectPtr<UMaterialInterface>/Engine/EngineMaterials/UnlitText.UnlitTextAbility PreviewMaterial of the floating numbers (an unlit text material reads in any light). Empty = the engine's default text material.
Ability Preview Number Rise (AbilityPreviewNumberRise)float80.000000Ability Preview
Ability Preview Number Seconds (AbilityPreviewNumberSeconds)float1.400000Ability PreviewFloating numbers: how long they stay (seconds), how high they rise (cm) and their size (cm).
Ability Preview Number Size (AbilityPreviewNumberSize)float60.000000Ability Preview
Ability Preview Side Distance (AbilityPreviewSideDistance)float700.000000Ability PreviewClassic modes (ATB, turn-based): distance between the two sides (cm) and between units of a side (cm).
Ability Preview Status Color (AbilityPreviewStatusColor)FLinearColor(R=0.750000,G=0.600000,B=1.000000,A=1.000000)Ability Preview
Ability Preview Tile Size (AbilityPreviewTileSize)float160.000000Ability PreviewDistance between two grid tiles in the preview (cm).
Ability Preview Unit Spacing (AbilityPreviewUnitSpacing)float190.000000Ability Preview
Prompt Propagation on Archetype Save (bPromptPropagationOnArchetypeSave)boolTrueArchetypesAfter an archetype is saved, offer the propagation list when assets inherit fields that now differ (a notification with "Review changes"). Nothing is applied without the list (D-090 decision 2).
Difficulty Easy Win Rate (DifficultyEasyWinRate)float0.900000Difficulty EstimateThe party wins at least this often: "Easy".
Difficulty Hard Win Rate (DifficultyHardWinRate)float0.550000Difficulty EstimateThe party wins less often than this: "Hard" (between the two: "Fair"). Below half of it: "Very hard".
Difficulty Runs (DifficultyRuns)int3212Difficulty Estimate"How hard is it?" (New Enemy, New Battle): battles the simulator plays for the estimate.
Help Table (HelpTable)TSoftObjectPtr<UDataTable>/RPGSagaEngine/Data/Studio/DT_RSE_StudioHelp.DT_RSE_StudioHelpExplanationsThe explanations of the Studio, the wizards and the character sheet: a Data Table of Studio Help Rows (row name = the help id, e.g. "Character.Class"). Localizable: its texts are gathered with the plugin's texts. Copy it to rewrite the texts.
Starter Character Count (StarterCharacterCount)int320First StepsCharacters and battles in the project when the starter content was made: "Create a character" and "Create a battle" are done when there are more.
Starter Encounter Count (StarterEncounterCount)int320First Steps
Starter Root (StarterRoot)FDirectoryPath()First StepsThe content root of the starter slice (/Game/Starter). Empty = the project has no slice: playing the new-game map counts as playing.
Learn Links (LearnLinks)TArray<FRSEStudioLearnLink>(5 entries)LearnLinks of the Studio's Learn section, in order.
Ability List Max Level (AbilityListMaxLevel)int320New CharacterLevel of the New Character wizard's ability list: abilities up to this level are listed. 0 = every level.
Enemy Only Class Tags (EnemyOnlyClassTags)FGameplayTagContainer(GameplayTags=((TagName="Class.Foe"),(TagName="Class.Wyrm")))New CharacterClasses with one of these tags (or a child tag) are enemy classes: the New Character wizard offers them only for enemies.
Preview Turn Speed (PreviewTurnSpeed)float20.000000New CharacterHow fast the live 3D preview of the wizard and the character sheet turns (degrees per second). 0 = it stands still.
Warn when Editing Plugin Assets (bWarnWhenEditingPluginAssets)boolTruePlugin TemplatesWarn with a notification when a plugin asset (under the plugin's content folder) is changed in an editor: plugin assets are templates shared by every asset using them and are replaced when the plugin updates (D-090 11b).
Template Manifest File (TemplateManifestFile)FStringConfig/Studio/TemplateManifest.jsonPlugin TemplatesThe file listing the shipped state of the plugin's data assets (RSE.Studio.ExportTemplateManifest writes it), relative to the plugin folder. Validate All Data warns about plugin data assets that differ from it (modified locally).
Preview Shadows (bPreviewShadows)boolTruePreviewCharacter preview: the key light casts a soft shadow.
Preview Ambient (PreviewAmbient)float0.350000PreviewCharacter preview: soft ambient light from the sky (0 = none).
Preview Background Color (PreviewBackgroundColor)FLinearColor(R=0.045000,G=0.047000,B=0.052000,A=1.000000)PreviewCharacter preview: the background color (a neutral studio backdrop).
Preview Drag Degrees Per Pixel (PreviewDragDegreesPerPixel)float0.600000PreviewCharacter preview: dragging turns the character by this many degrees per pixel.
Preview Exposure EV100 (PreviewExposureEV100)float2.400000PreviewCharacter preview: fixed exposure (EV100; lower = brighter). The light rig's Exposure Bias is added.
Preview Field Of View (PreviewFieldOfView)float28.000000PreviewCharacter preview: vertical field of view (a narrow lens keeps proportions, like a studio photo).
Preview Framing Margin (PreviewFramingMargin)float1.120000PreviewCharacter preview: room above the head and below the feet (1 = the character fills the height).
Preview Key Light Size (PreviewKeyLightSize)float40.000000PreviewCharacter preview: size of the key light (larger = softer shadow edges).
Preview Light Rig (PreviewLightRig)FNameStudioPreviewCharacter preview (wizard, sheets): the lighting rig by name (Project Settings -> Portraits -> Light Rigs; key, fill and rim).
Preview Max Zoom (PreviewMaxZoom)float1.600000Preview
Preview Min Zoom (PreviewMinZoom)float0.350000PreviewCharacter preview: the mouse wheel zooms between these framings (1 = the whole character).
Preview Turn Resume Delay (PreviewTurnResumeDelay)float3.000000PreviewCharacter preview: after a drag, the slow turn waits this long before it goes on (seconds).
Role Fields (RoleFields)TArray<FRSEStudioRoleRule>(10 entries)RolesRole-aware views (D-098): which fields each role sees on the character sheet (Simple and Advanced), the Studio's wizards and their help. Party characters do not see enemy rewards or the bestiary; enemies do not see party-only settings. The generic asset editor always shows every field.
Max Recent Assets (MaxRecentAssets)int3210StudioHow many recently created or edited assets "Continue where you left off" shows.
Recent Thumbnail Size (RecentThumbnailSize)int3264StudioSize of the thumbnails in "Continue where you left off" (pixels).
Test Battle Mode (TestBattleMode)FGameplayTag(TagName="Battle.Mode.ATB")Test in BattleBattle mode of an enemy's test battle (the hero's test uses the Test Encounter's mode).
Test Encounter (TestEncounter)TSoftObjectPtr<URSEEncounterData>/RPGSagaEngine/Data/Encounters/DA_Encounter_Starter_Z1_Skirmish.DA_Encounter_Starter_Z1_SkirmishTest in BattleCharacter sheet "Test in battle": the battle the character's party fights (heroes).
Test Enemy Count (TestEnemyCount)int322Test in BattleCharacter sheet "Test in battle" of an enemy: how many of it the new-game party fights.
Test Runs (TestRuns)int3220Test in BattleBattles the simulator plays for "Test in battle" (the win rate and the length are averages).

RPG Saga Engine: Tactics Camera

Class URSETacticsCameraSettings (module RSE), Project Settings, Project, RPG Saga Engine. Tactical camera behaviour.

SettingTypeDefaultCategoryRestartDescription
Pan Speed (PanSpeed)float1500.000000PanPan speed at full input, in cm per second.
Rotation Step (RotationStep)float90.000000RotationYaw change per rotate input.
Focus Interp Speed (FocusInterpSpeed)float5.000000SmoothingHow fast the camera glides to a new focus (the unit whose turn starts). 0 = cut at once.
Interp Speed (InterpSpeed)float8.000000SmoothingHow fast yaw and zoom blend to their targets (higher is snappier).
Field Of View (FieldOfView)float35.000000ViewNarrow field of view flattens perspective toward an isometric look.
Initial Yaw (InitialYaw)float45.000000ViewYaw at start, in degrees. 45 gives the classic diagonal isometric view.
Pitch (Pitch)float-50.000000ViewDownward camera angle in degrees (negative looks down).
Initial Distance (InitialDistance)float2600.000000Zoom
Max Distance (MaxDistance)float5000.000000Zoom
Min Distance (MinDistance)float1200.000000Zoom
Zoom Step (ZoomStep)float300.000000ZoomDistance change per unit of zoom input (one mouse wheel notch).

RPG Saga Engine: Tactics Path Preview

Class URSEPathPreviewSettings (module RSE), Project Settings, Project, RPG Saga Engine. Look of the live movement path line and of the danger zone overlay in Tactics battles (D-033).

SettingTypeDefaultCategoryRestartDescription
Label Height (LabelHeight)float60.000000Cost LabelHeight of the Action Point label above the end of the path, in cm.
No Action Label Color (NoActionLabelColor)FRSEUIColor(Token="Neutral",Alpha=1.000000,Lightness=0.024668,Chroma=1.941756,Hue=-7.776914,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Cost LabelLabel color when the destination leaves too few Action Points to attack, or to act at all.
Arc Height (ArcHeight)float20.000000LineExtra height of the arc between two tiles of different height, above the higher one.
Hide Path Tiles with Line (bHidePathTilesWithLine)boolTrueLineHide the yellow path tiles while the line is drawn (the line replaces them).
Show Path Line (bShowPathLine)boolTrueLineDraw the path line while choosing a move destination.
Dashes Per Tile (DashesPerTile)float3.000000Line
Dash Speed (DashSpeed)float1.500000Line
Hazard Color (HazardColor)FRSEUIColor(Token="Charge",Alpha=1.000000,Lightness=-0.116643,Chroma=2.591229,Hue=117.309082,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))LineD-156 (Free Tactics): the part of an affordable path inside a dangerous surface (fire, poison, ice...).
Height Offset (HeightOffset)float12.000000LineHeight of the line above the tile surface.
Line Material (LineMaterial)TSoftObjectPtr<UMaterialInterface>/RPGSagaEngine/Materials/M_PathPreview.M_PathPreviewLineMaterial of the line. Parameters below are set when the material has them.
Line Mesh (LineMesh)TSoftObjectPtr<UStaticMesh>/Engine/BasicShapes/Cube.CubeLineMesh bent along the path by spline mesh components; its X axis runs along the path. A unit cube works.
Line Mesh Size (LineMeshSize)float100.000000LineSize of LineMesh along each axis, in cm (to scale it to LineWidth / LineThickness).
Line Thickness (LineThickness)float2.000000Line
Line Width (LineWidth)float12.000000Line
Over Budget Color (OverBudgetColor)FRSEUIColor(Token="Negative",Alpha=1.000000,Lightness=-0.072038,Chroma=1.357145,Hue=1.787338,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))LinePart of the path beyond the remaining Action Points.
Reachable Color (ReachableColor)FRSEUIColor(Token="Warning",Alpha=1.000000,Lightness=0.055424,Chroma=1.415302,Hue=23.530649,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))LineAffordable part of the path.
Color Parameter (ColorParameter)FNameColorLine|Material ParametersMaterial vector parameter receiving the line color.
Dash Count Parameter (DashCountParameter)FNameDashesPerTileLine|Material ParametersMaterial scalar parameter: dashes per tile.
Dash Speed Parameter (DashSpeedParameter)FNameDashSpeedLine|Material ParametersMaterial scalar parameter: dash scroll speed (tiles per second, 0 = still).
Segment Length Data Index (SegmentLengthDataIndex)int320Line|Material ParametersCustom primitive data index receiving each segment's length in tiles, so dashes keep their size on long straight segments (the material multiplies U by it). INDEX_NONE = not sent.
Click to Move from Menu (bClickToMoveFromMenu)boolFalseWhenIn the command menu, clicking a reachable tile moves there at once (a mouse shortcut past the Move command).
Preview Move in Menu (bPreviewMoveInMenu)boolFalseWhenShow the movement range and the path under the cursor in the command menu too, before Move is chosen. Off (classic tactical RPG style, playtest 2026-09-27): only the Move command shows them, so pointing at objects or units in the menu draws no path over them.

RPG Saga Engine: Tactics Zone

Class URSETacticsZoneSettings (module RSE), Project Settings, Project, RPG Saga Engine. Presentation and baking settings of tactics zones (grid baking from level geometry, grid visuals, placeholder units).

SettingTypeDefaultCategoryRestartDescription
Bake Ignore Tag (BakeIgnoreTag)FNameRSE.GridIgnoreBakingActors or components with this tag are skipped by the bake (props that must not become tiles).
Bake Max Skipped Hits (BakeMaxSkippedHits)int328BakingHow many skipped objects a single bake trace may pass through before it gives up on the tile.
Bake Min Surface Size (BakeMinSurfaceSize)float40.000000BakingObjects narrower than this (on either horizontal axis) are skipped by the bake: small rocks, rubble, bottles. 0 = keep everything.
Bake Trace Channel (BakeTraceChannel)TEnumAsByte<ECollisionChannel>ECC_VisibilityBakingCollision channel traced against level geometry when baking a grid.
Bake Trace Depth Below (BakeTraceDepthBelow)float500.000000BakingHow far below the zone origin the bake trace ends.
Bake Trace Height Above (BakeTraceHeightAbove)float2000.000000BakingHow far above the zone origin the bake trace starts.
Bake Only Pawn Blocking Surfaces (bBakeOnlyPawnBlockingSurfaces)boolTrueBakingThe bake skips what a character cannot stand on (D-088): surfaces that do not block pawns (grass, ivy, decoration you walk through), pawns, and actors or components tagged Bake Ignore Tag. The trace goes on to the ground below.
Bake Uses Combat Roles (bBakeUsesCombatRoles)boolTrueBakingThe bake follows combat roles (D-093, Project Settings -> Combat Roles): Ignore roles (decoration, clutter) are looked through, Standable roles are ground whatever their size, Block roles (cover, obstacles) close the tiles under them and Terrain roles give their tiles the role's terrain. Objects without a role keep the rules above.
Min Walkable Normal Z (MinWalkableNormalZ)float0.700000BakingMinimum surface normal Z to count as walkable (1 = flat, 0.7 ~ 45 degrees).
Required Clearance (RequiredClearance)float150.000000BakingFree space needed above a surface for a unit to stand on it.
Role Footprint Inset (RoleFootprintInset)float0.250000BakingShare of a tile's side left out at each edge when a Block or Terrain object's footprint is matched to tiles: an object must reach into the middle of a tile to affect it (a wall grazing a tile's edge leaves it open).
Show Blocked Tiles (bShowBlockedTiles)boolFalseGrid VisualsDraws the base grid's blocked tiles (walls, tree tops, props). Off by default: on a live map they often sit on partial meshes and read as red patches hanging in the air; the walkable grid alone already shows where units can go.
Danger Tile Scale (DangerTileScale)float1.000000Grid VisualsFraction of the tile covered by the danger zone layer. Above TileVisualScale it shows as a frame around the selection tiles.
Grid Visual Mode (GridVisualMode)ERSEGridVisualModeProjectedGrid VisualsHow zones draw the grid (a zone can override it). Projected follows the real ground; Tiles are meshes.
Highlight Colors (HighlightColors)TMap<ERSEGridHighlight,FRSEUIColor>(13 entries)Grid Visuals
Layer Height Offset (LayerHeightOffset)float1.000000Grid VisualsVertical offset of each highlight layer above the surface, to avoid z-fighting.
Tile Color Parameter (TileColorParameter)FNameColorGrid Visuals
Tile Material (TileMaterial)TSoftObjectPtr<UMaterialInterface>/Engine/BasicShapes/BasicShapeMaterial.BasicShapeMaterialGrid VisualsMaterial for tile visuals. Must expose a vector parameter named TileColorParameter.
Tile Mesh (TileMesh)TSoftObjectPtr<UStaticMesh>/Engine/BasicShapes/Plane.PlaneGrid VisualsMesh drawn per tile. Expected to be a 100x100 cm plane facing up.
Tile Visual Scale (TileVisualScale)float0.920000Grid VisualsFraction of the tile covered by its visual, leaving a visible gap between tiles.
Grid Decal Material (GridDecalMaterial)TSoftObjectPtr<UMaterialInterface>/RPGSagaEngine/Materials/Battle/M_RSE_GridDecal.M_RSE_GridDecalGrid Visuals|ProjectedDeferred decal material of the Projected mode (M_RSE_GridDecal). It reads the zone's tile state from a small texture (parameter GridState) and the zone's frame (Origin, AxisX, AxisY, AxisZ, Grid, Shape, Look, Glow, Opacity).
Projected Base Opacity (ProjectedBaseOpacity)float0.120000Grid Visuals|ProjectedOpacity of the base grid (walkable / blocked tiles) in the Projected mode. Its outlines are stronger (Edge Boost).
Projected Box Margin (ProjectedBoxMargin)float150.000000Grid Visuals|ProjectedExtra height of the projection box above the highest and below the lowest tile.
Projected Edge Boost (ProjectedEdgeBoost)float4.000000Grid Visuals|ProjectedThe outline is this many times more opaque than the tile's fill.
Projected Edge Width (ProjectedEdgeWidth)float0.060000Grid Visuals|ProjectedWidth of a tile's outline, as a fraction of the tile.
Projected Glow (ProjectedGlow)float1.500000Grid Visuals|ProjectedEmissive strength of the projected grid (reads in shadow and at night).
Projected Height Tolerance (ProjectedHeightTolerance)float30.000000Grid Visuals|ProjectedGround more than this above or below a tile's measured surface is not painted (walls, props, the level below).
Projected Highlight Opacity (ProjectedHighlightOpacity)float0.500000Grid Visuals|ProjectedOpacity of the selection highlights (range, path, target, area, cursor, danger) in the Projected mode.
Projected Marker Opacity (ProjectedMarkerOpacity)float0.800000Grid Visuals|ProjectedOpacity of the target markers (units targeted or left out, landing tiles) in the Projected mode.
Projected Min Normal Z (ProjectedMinNormalZ)float0.500000Grid Visuals|ProjectedSurfaces steeper than this are not painted (1 = only flat ground, 0 = walls too).
Projected Sort Order (ProjectedSortOrder)int325Grid Visuals|ProjectedSort order of the grid decal (under the ability target preview's decals).
Team Colors (TeamColors)TMap<FGameplayTag,FRSEUIColor>(2 entries)Placeholder UnitsColor per team (Team.*). Units of unlisted teams use UnknownTeamColor.
Unit Body Mesh (UnitBodyMesh)TSoftObjectPtr<UStaticMesh>/Engine/BasicShapes/Cube.CubePlaceholder Units--- Placeholder units ---
Unit Body Scale (UnitBodyScale)FVector(X=0.600000,Y=0.600000,Z=1.000000)Placeholder Units
Unit Facing Mesh (UnitFacingMesh)TSoftObjectPtr<UStaticMesh>/Engine/BasicShapes/Cone.ConePlaceholder UnitsSmall mesh on the front of the unit that shows its facing.
Unit Hop Height (UnitHopHeight)float40.000000Placeholder UnitsArc height of the hop between two tiles of different height.
Unit Material (UnitMaterial)TSoftObjectPtr<UMaterialInterface>/Engine/BasicShapes/BasicShapeMaterial.BasicShapeMaterialPlaceholder UnitsMaterial for placeholder units. Must expose TileColorParameter.
Unit Move Speed (UnitMoveSpeed)float4.000000Placeholder UnitsPresentation speed of unit movement, in tiles per second.
Unknown Team Color (UnknownTeamColor)FRSEUIColor(Token="Neutral",Alpha=1.000000,Lightness=-0.059238,Chroma=0.000002,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Placeholder Units
Unit Corner Radius (UnitCornerRadius)float45.000000Unit MovementCorners of a path are rounded over this distance (no stop at each tile). 0 = sharp.
Unit Ease Distance (UnitEaseDistance)float40.000000Unit MovementSpeeding up at the start and slowing down at the end of a walk, over this distance.
Unit Hop Min Step (UnitHopMinStep)float35.000000Unit MovementHeight steps up to this are walked as slopes; bigger ones are hops (Unit Hop Height).
Unit Turn Speed (UnitTurnSpeed)float600.000000Unit MovementHow fast a walking unit turns toward where it goes (degrees per second).
Unit Walk Speed (UnitWalkSpeed)float320.000000Unit MovementWalking speed along a path (cm/s): the locomotion blend space plays walk / jog from it. 0 = Unit Move Speed (tiles per second).

RPG Saga Engine: Target Preview

Class URSETargetPreviewSettings (module RSE), Project Settings, Project, RPG Saga Engine. The ability target preview (D-064): what an ability or item can hit and how far, shown while it is highlighted in the command menu and while aiming.

SettingTypeDefaultCategoryRestartDescription
Marker Tile Scale (MarkerTileScale)float0.550000ClassicSize of the target markers on the tile layers (fraction of a tile), so the area color still frames them.
Collision Color (CollisionColor)FRSEUIColor(Token="Negative",Alpha=1.000000,Lightness=-0.069953,Chroma=1.630424,Hue=-30.283195,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))DisplacementsLanding tile when the unit collides (wall, unit, object) or falls.
Displacement Color (DisplacementColor)FRSEUIColor(Token="Charge",Alpha=1.000000,Lightness=-0.107768,Chroma=2.050810,Hue=98.833572,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))DisplacementsKnockback / pull path (Modern) and landing tile marker.
Acting Unit Color (ActingUnitColor)FRSEUIColor(Token="Charge",Alpha=1.000000,Lightness=-0.021431,Chroma=1.486113,Hue=-7.032476,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))MarkersColor of the acting unit's ring (distinct from the target colors).
Classic Target Rings (bClassicTargetRings)boolFalseMarkersClassic battles: rings under the units the ability can target and under the ones it hits (D-064). Off by default (D-066): the bobbing cursor over the target (smaller ones over the others a row / all ability hits) and the target list say it alone; a ring and an arrow on the same unit read as two different things. Tactics keeps its markers (Mark Targets).
Mark Acting Unit (bMarkActingUnit)boolTrueMarkersClassic battles: a ring under the party member whose command menu is open (D-065).
Ignored Target Color (IgnoredTargetColor)FRSEUIColor(Token="Neutral",Alpha=1.000000,Lightness=-0.083984,Chroma=0.985413,Hue=15.365562,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))MarkersA unit in the area that the ability does not affect.
Marker Fill Opacity (MarkerFillOpacity)float0.150000Markers
Marker Follow Tolerance (MarkerFollowTolerance)float5.000000MarkersMarkers follow their unit when it moves more than this (a melee attacker running to its target).
Marker Ring Width (MarkerRingWidth)float0.140000Markers
Marker Tile Size (MarkerTileSize)float0.850000MarkersMarker ring diameter, as a fraction of a tile (Tactics).
Selected Target Color (SelectedTargetColor)FRSEUIColor(Token="Negative",Alpha=1.000000,Lightness=-0.025459,Chroma=1.207711,Hue=14.619749,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))MarkersThe unit the ability is aimed at now / a unit its area hits.
Stage Marker Size (StageMarkerSize)float130.000000MarkersMarker ring diameter under units on an ATB stage.
Valid Target Color (ValidTargetColor)FRSEUIColor(Token="Warning",Alpha=1.000000,Lightness=0.066483,Chroma=1.192767,Hue=23.327459,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))MarkersA unit the ability can target.
Area Color (AreaColor)FRSEUIColor(Token="Negative",Alpha=1.000000,Lightness=0.022890,Chroma=1.241273,Hue=43.380360,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Modern|Area--- Modern: area ---
Area Fill Opacity (AreaFillOpacity)float0.400000Modern|Area
Area Ring Width (AreaRingWidth)float0.120000Modern|Area
Edge Softness (EdgeSoftness)float0.040000Modern|AreaSoftness of every preview shape's edge (fraction of its half size).
Decal Depth (DecalDepth)float400.000000Modern|DecalsVertical depth of the decals' projection box (covers tile height changes under a shape).
Decal Material (DecalMaterial)TSoftObjectPtr<UMaterialInterface>/RPGSagaEngine/Materials/Battle/M_RSE_TargetPreviewDecal.M_RSE_TargetPreviewDecalModern|DecalsDeferred decal material (translucent). Parameters: Color (vector), Opacity, Shape (0 square, 1 diamond, 2 circle), RingWidth and Softness (fractions of the decal's half size), FillOpacity. Empty: the Modern style falls back to Classic.
Decal Sort Order (DecalSortOrder)int3210Modern|DecalsSort order of the decals (above the level's own decals).
Color Parameter (ColorParameter)FNameColorModern|Decals|Parameters
Fill Opacity Parameter (FillOpacityParameter)FNameFillOpacityModern|Decals|Parameters
Opacity Parameter (OpacityParameter)FNameOpacityModern|Decals|Parameters
Ring Width Parameter (RingWidthParameter)FNameRingWidthModern|Decals|Parameters
Shape Parameter (ShapeParameter)FNameShapeModern|Decals|Parameters
Softness Parameter (SoftnessParameter)FNameSoftnessModern|Decals|Parameters
Labels in Classic (bLabelsInClassic)boolTrueModern|LabelsThe Classic style shows the labels too (the classic forecast: the hit chance over the target, live as the cursor moves).
Show Labels (bShowLabels)boolTrueModern|LabelsHit chance and damage over the targets (the D-033 forecast).
Damage Label Format (DamageLabelFormat)FTextNSLOCTEXT("RSETargetPreview", "DamageLabel", "{Hit}% -{Damage}")Modern|LabelsLabel text. Arguments: {Hit} (percent), {Damage} (expected, or a range), {Heal}.
Heal Label Format (HealLabelFormat)FTextNSLOCTEXT("RSETargetPreview", "HealLabel", "+{Heal}")Modern|Labels
KOLabel Color (KOLabelColor)FRSEUIColor(Token="Negative",Alpha=1.000000,Lightness=-0.112868,Chroma=1.765735,Hue=3.107039,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Modern|Labels
KOLabel Suffix (KOLabelSuffix)FTextNSLOCTEXT("RSETargetPreview", "KOSuffix", " KO")Modern|LabelsAppended when the hit can knock the target out.
Label Color (LabelColor)FRSEUIColor(Token="Text",Alpha=1.000000,Lightness=-0.019709,Chroma=17.654202,Hue=163.570023,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Modern|Labels
Label Height (LabelHeight)float210.000000Modern|Labels
Label World Size (LabelWorldSize)float34.000000Modern|Labels
Blocked Color (BlockedColor)FRSEUIColor(Token="Neutral",Alpha=1.000000,Lightness=-0.477765,Chroma=2.294284,Hue=14.205691,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Modern|RangeTiles inside the range the ability cannot be aimed at: blocked by sight or height, or too close.
Blocked Opacity (BlockedOpacity)float0.550000Modern|Range
Range Color (RangeColor)FRSEUIColor(Token="Info",Alpha=1.000000,Lightness=0.020015,Chroma=1.244049,Hue=-19.015455,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Modern|Range--- Modern: range ring ---
Range Fill Opacity (RangeFillOpacity)float0.120000Modern|RangeSoft fill inside the range (0 = ring only).
Range Ring Width (RangeRingWidth)float0.035000Modern|RangeWidth of the ring at the edge of the range (fraction of the shape's half size).
Arc Segments (ArcSegments)int3212Modern|TrajectorySegments of an arc.
Blocked Trajectory Color (BlockedTrajectoryColor)FRSEUIColor(Token="Negative",Alpha=1.000000,Lightness=-0.079992,Chroma=1.299466,Hue=1.996110,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Modern|TrajectoryA trajectory an obstacle blocks (aimed at a blocked tile).
Show Trajectory (bShowTrajectory)boolTrueModern|TrajectoryDraw the path of ranged abilities and projectiles (the ability's projectile cue, else its line of sight rules).
Min Range for Trajectory (MinRangeForTrajectory)int322Modern|TrajectoryRanged abilities without a projectile cue draw a trajectory from this range on (1 = melee never does).
Trajectory Color (TrajectoryColor)FRSEUIColor(Token="White",Alpha=1.000000,Chroma=1.000000,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Modern|Trajectory
Trajectory Width (TrajectoryWidth)float6.000000Modern|Trajectory
Mark Targets (bMarkTargets)boolTrueRulesClassic and ATB: mark the units the ability can target (and, aimed, the ones its area hits or leaves out).
Preview While Highlighted (bPreviewWhileHighlighted)boolTrueRulesShow the preview while an ability or item is highlighted in the command menu, before it is chosen.
Show Displacements (bShowDisplacements)boolTrueRulesShow where knockback and pull effects would move the units they hit.
Default Style (DefaultStyle)ERSETargetPreviewStyleClassicRulesStyle for players who did not choose one in the options.
Aim Invalid Format (AimInvalidFormat)FTextNSLOCTEXT("RSETargetPreview", "AimInvalid", "{Ability}: cannot be aimed here")SummaryAimed at a tile it cannot reach (blocked, too close, nothing to target). Arguments: {Ability}.
Aim Summary Format (AimSummaryFormat)FTextNSLOCTEXT("RSETargetPreview", "AimSummary", "{Ability}: hits {Hit}, leaves out {Ignored}")SummaryAimed at a tile. Arguments: {Ability}, {Hit} (units affected), {Ignored} (units in the area left out).
Reach Summary Format (ReachSummaryFormat)FTextNSLOCTEXT("RSETargetPreview", "ReachSummary", "{Ability}: range {Min}-{Max}, {Targets} {Targets}|plural(one=target,other=targets) in reach")SummaryHighlighted in the menu. Arguments: {Ability}, {Min}, {Max} (range in tiles), {Targets} (units it can target now).
Turn Marker Color (TurnMarkerColor)FRSEUIColor(Token="Charge",Alpha=1.000000,Lightness=-0.021431,Chroma=1.486113,Hue=-7.032476,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Turn Marker
Turn Marker Style (TurnMarkerStyle)ERSETurnMarkerStyleFollowPreviewStyleTurn MarkerTactics: how the unit whose turn it is stands out (player and AI turns). It follows the unit as it moves.
Turn Pin Bob Amplitude (TurnPinBobAmplitude)float8.000000Turn Marker|PinUp / down bob of the pin (0 = still).
Turn Pin Bob Speed (TurnPinBobSpeed)float1.200000Turn Marker|PinBobs per second.
Turn Pin Height (TurnPinHeight)float235.000000Turn Marker|PinHeight of the pin's tip over the unit's feet.
Turn Pin Mesh (TurnPinMesh)TSoftObjectPtr<UStaticMesh>/Engine/BasicShapes/Cone.ConeTurn Marker|PinPin mesh (pointing up; it is turned over). Colored through Tactics Zone -> Unit Material.
Turn Pin Size (TurnPinSize)float22.000000Turn Marker|Pin
Turn Ring Fill Opacity (TurnRingFillOpacity)float0.080000Turn Marker|Ring
Turn Ring Opacity (TurnRingOpacity)float0.900000Turn Marker|Ring
Turn Ring Size (TurnRingSize)float110.000000Turn Marker|RingRing diameter.
Turn Ring Width (TurnRingWidth)float0.100000Turn Marker|Ring

RPG Saga Engine: Time & Weather Rules

Class URSETimeWeatherRules (module RSECore), Project Settings, Project, RPG Saga Engine. Gameplay rules of the time of day and the weather (D-101), a rules profile section (D-035): how roaming enemies behave by phase and weather, other encounter pools at night, and weather / time modifiers in battles.

SettingTypeDefaultCategoryRestartDescription
Battle Modifiers (BattleModifiers)TArray<FRSEEnvironmentBattleModifier>(5 entries)BattlesBattle modifiers by weather / phase; every matching entry multiplies in.
Environment Affects Battles (bEnvironmentAffectsBattles)boolTrueBattlesWeather and time change battles (the modifiers below).
Behavior Rules (BehaviorRules)TArray<FRSETimeBehaviorRule>(7 entries)Roaming EnemiesRoaming enemies by phase / weather: every matching rule multiplies in (URSETimeSubsystem::GetBehaviorModifiers).
Pool Swaps (PoolSwaps)TArray<FRSEEncounterPoolSwap>(0 entries)Roaming EnemiesOther encounter pools at some times / weather (the first matching swap wins).

RPG Saga Engine: Time of Day

Class URSETimeSettings (module RSECore), Project Settings, Project, RPG Saga Engine. The game clock (D-101, docs/design/time-weather.md): day length, phases of the day, seasons, when the clock stops, how the time is written.

SettingTypeDefaultCategoryRestartDescription
Clock Enabled (bClockEnabled)boolTrueClockThe clock runs (off: the time only changes through effects, commands and rests).
Day Length Minutes (DayLengthMinutes)float60.000000ClockReal minutes for one game day at speed 1 (60 = one real hour per game day).
Max Advance Hours (MaxAdvanceHours)float240.000000ClockLongest single Advance Time / Set Time jump, in game hours (a safety net for data mistakes).
Start Day (StartDay)int321ClockDay of a new game.
Start Hour (StartHour)float8.000000ClockHour of a new game (8.5 = 08:30).
Update Interval (UpdateInterval)float0.100000ClockReal seconds between clock steps (events fire at most this often). Lower is smoother, not costlier in practice.
Am Text (AmText)FTextNSLOCTEXT("RSETimeSettings", "Am", "AM")Display
Use 24Hour Clock (bUse24HourClock)boolTrueDisplay24-hour clock (14:05); off: 2:05 PM.
Clock 12Format (Clock12Format)FTextNSLOCTEXT("RSETimeSettings", "Clock12", "{Hour}:{Minute} {AmPm}")Display{Hour} {Minute} {AmPm}.
Clock 24Format (Clock24Format)FTextNSLOCTEXT("RSETimeSettings", "Clock24", "{Hour}:{Minute}")Display{Hour} {Minute} (two digits).
Day Format (DayFormat)FTextNSLOCTEXT("RSETimeSettings", "DayFormat", "Day {Day}")Display{Day}.
Pm Text (PmText)FTextNSLOCTEXT("RSETimeSettings", "Pm", "PM")Display
Pause in Battle (bPauseInBattle)boolTruePauseThe clock stops while a battle runs (live-map battles included).
Pause in Cutscenes (bPauseInCutscenes)boolTruePauseThe clock stops while a story scene (cutscene) plays.
Pause in Dialog (bPauseInDialog)boolTruePauseThe clock stops while a dialog runs.
Pause with Play Time (bPauseWithPlayTime)boolTruePauseThe clock stops when the play time stops (menus that pause the play time, the main menu).
Phases (Phases)TArray<FRSEDayPhaseDef>(4 entries)PhasesPhases of the day in order of their start hour; each lasts until the next one starts (the last one wraps past midnight).
Inn Rest Advances Time (bInnRestAdvancesTime)boolTrueRestResting at an inn moves the clock to the next Rest Wake Hour (the inn's fade covers the jump).
Rest Wake Hour (RestWakeHour)float7.000000RestThe hour a rest ends (7 = 07:00 the next morning).
Days Per Season (DaysPerSeason)int320SeasonsDays in each season (0 = no seasons); after the last season the first comes again.
Seasons (Seasons)TArray<FGameplayTag>(0 entries)SeasonsSeasons in order (Time.Season.* content tags). Empty = no seasons.

RPG Saga Engine: Time of Day Visuals

Class URSETimeOfDayVisualSettings (module RSE), Project Settings, Project, RPG Saga Engine. The sky, sun, moon, fog and grading of the Time of Day actor (D-101, docs/design/time-weather.md).

SettingTypeDefaultCategoryRestartDescription
Parameter Collection (ParameterCollection)TSoftObjectPtr<UMaterialParameterCollection>/RPGSagaEngine/Visual/MPC_RSEWeather.MPC_RSEWeatherAssetsGlobal material parameters every material can read (TimeOfDay, NightAmount, Wetness, SnowCover, Wind...).
Sky Dome Material (SkyDomeMaterial)TSoftObjectPtr<UMaterialInterface>/RPGSagaEngine/Visual/Weather/M_RSE_SkyDome.M_RSE_SkyDomeAssets
Sky Dome Mesh (SkyDomeMesh)TSoftObjectPtr<UStaticMesh>/Engine/EngineSky/SM_SkySphere.SM_SkySphereAssetsSky dome with stars, moon glow and the 2D cloud layer.
Sky Dome Scale (SkyDomeScale)float100.000000AssetsScale of the dome mesh (the engine's sky sphere is 40.96 m: 100 = 4 km).
Volumetric Cloud Material (VolumetricCloudMaterial)TSoftObjectPtr<UMaterialInterface>/Engine/EngineSky/VolumetricClouds/m_SimpleVolumetricCloud_Inst.m_SimpleVolumetricCloud_InstAssetsMaterial of the volumetric clouds (the engine's simple clouds by default).
Clock on Minimap (bClockOnMinimap)boolTrueHUDShows the time under the minimap (D-104, Map & Minimap -> Minimap Info Lines), on levels with a sky actor and a map.
Clock Shows Weather (bClockShowsWeather)boolTrueHUDShows the weather's name next to the time.
Hide Clock Panel with Minimap (bHideClockPanelWithMinimap)boolTrueHUDThe clock panel hides while the minimap shows the time (no second clock on screen).
Show Clock Widget (bShowClockWidget)boolTrueHUDShows the clock / weather widget while exploring.
Show Time in Party Menu (bShowTimeInPartyMenu)boolTrueHUDShows the time in the party menu header (next to the money).
Clock Anchor (ClockAnchor)FVector2D(X=0.985000,Y=0.340000)HUDNormalized screen point of the clock (top right by default, under the minimap region).
Clock Widget Class (ClockWidgetClass)TSoftClassPtr<URSEScreenWidget>NoneHUDReplaces the built-in clock (a Widget Blueprint derived from RSEScreenWidget reading an RSEClockViewModel).
Clock ZOrder (ClockZOrder)int3240HUD
Minimap Clock Format (MinimapClockFormat)FTextNSLOCTEXT("RSETimeVisualSettings", "MinimapClock", "{Time} {Day} {Weather}")HUDThe line under the minimap: {Day} {Time} {Phase} {Weather}.
Party Menu Time Format (PartyMenuTimeFormat)FTextNSLOCTEXT("RSETimeVisualSettings", "PartyMenuTime", "{Day} {Time} {Weather}")HUD{Day} {Time} {Phase} {Weather}.
Suppress Other Sky Actors (bSuppressOtherSkyActors)boolTrueLookOther sky actors in the level (directional lights marked as atmosphere sun, sky lights, atmospheres, height fogs, clouds) are hidden while a Time of Day actor drives the sky.
Default Profile (DefaultProfile)TSoftObjectPtr<URSETimeOfDayProfile>/RPGSagaEngine/Data/TimeOfDay/DA_TimeOfDay_BrightStylized.DA_TimeOfDay_BrightStylizedLookProfile of Time of Day actors that name none.
Post Process Priority (PostProcessPriority)float50.000000LookPriority of the actor's post process (the visual style's layer, 100 by default, stays on top).
Max Dynamic Night Lights (MaxDynamicNightLights)int328Night LightsNight lights that stay real lights at the same time on High / Epic (nearest to the camera first); the rest glow only.
Max Dynamic Night Lights Low (MaxDynamicNightLightsLow)int324Night LightsThe same on Low / Medium (Steam Deck). 0 = emissive only.
Night Light Focus Ahead (NightLightFocusAhead)float1000.000000Night LightsThe real lights are the nearest to a point this far in front of the camera (D-111), not to the camera itself: the lamps around the party and ahead of it light the view, the ones behind the camera give their place up. 0 = the camera.
Night Light Update Rate (NightLightUpdateRate)float12.000000Night LightsNight light updates per second (fades and flicker; the schedule is cheap).
Volumetric Clouds on High (bVolumetricCloudsOnHigh)boolTruePerformanceVolumetric clouds on High / Epic (Low / Medium draw the cheap cloud layer of the sky dome only).
Volumetric Fog on High (bVolumetricFogOnHigh)boolFalsePerformanceVolumetric fog on High / Epic (never on Low / Medium).
High Quality From (HighQualityFrom)int322PerformanceEffects quality at or above which the High path is used (Low 0, Medium 1, High 2, Epic 3).
Sky Light Recapture Interval (SkyLightRecaptureInterval)float20.000000PerformanceSeconds between throttled sky light recaptures (phase changes, skips and weather changes also recapture).
Sky Light Recapture Look Delta (SkyLightRecaptureLookDelta)float0.100000PerformanceThrottled path: the sky light is also recaptured as soon as the weather's look moved this much since the last capture (sky light, sky brightness or cloud cover; D-104: a storm no longer keeps the clear sky's ambient for 20 s).
Sky Light Update (SkyLightUpdate)ERSESkyLightUpdateRealTimeCapturePerformanceSky light on High / Epic.
Sky Light Update Low (SkyLightUpdateLow)ERSESkyLightUpdateRealTimeCapturePerformanceSky light on Low / Medium. D-111: real-time capture here too. It captures only the sky (the sky dome's 2D clouds are excluded from captures either way), time-sliced over frames: the same look as Throttled, no hitch, no measurable GPU cost.
Update Rate (UpdateRate)float20.000000PerformanceLight, sky and fog updates per second on High / Epic (the sun moves smoothly; no work between updates).
Update Rate Low (UpdateRateLow)float10.000000PerformanceUpdates per second on Low / Medium (Steam Deck).

RPG Saga Engine: Toolkit Presentation

Class URSEToolkitPresentationSettings (module RSE), Project Settings, Project, RPG Saga Engine. Presentation of the Ability Toolkit v2 on the Tactics grid (D-055): unit motions (leap arcs, slides, teleports), the default look of zones and field objects.

SettingTypeDefaultCategoryRestartDescription
Reveal Enemy Traps (bRevealEnemyTraps)boolFalseFieldTraps are drawn for the player's side only when the player's team created them (Tile Zone: Hidden From Enemies).
Color Parameter (ColorParameter)FNameColorFieldName of the color parameter set on field materials.
Default Material (DefaultMaterial)TSoftObjectPtr<UMaterialInterface>/Engine/BasicShapes/BasicShapeMaterial.BasicShapeMaterialFieldMaterial with a "Color" vector parameter (the engine's basic shape material has one).
Default Object Mesh (DefaultObjectMesh)TSoftObjectPtr<UStaticMesh>/Engine/BasicShapes/Cube.CubeField
Default Projectile Material (DefaultProjectileMaterial)TSoftObjectPtr<UMaterialInterface>/RPGSagaEngine/Visual/Feel/M_RSE_FXGlow.M_RSE_FXGlowFieldD-184: the material of Projectile cues without one (empty = Default Material). The plugin sets its glow (Color, Intensity), so a projectile reads as a bright bolt, not a grey ball.
Default Projectile Mesh (DefaultProjectileMesh)TSoftObjectPtr<UStaticMesh>/RPGSagaEngine/Visual/Weapons/SM_RSE_ProjectileCore.SM_RSE_ProjectileCoreFieldProjectile cues without a mesh fly this one.
Default Zone Mesh (DefaultZoneMesh)TSoftObjectPtr<UStaticMesh>/Engine/BasicShapes/Plane.PlaneField--- Default look of zones and objects (engine assets; replace per zone / object with a Field Visual asset) ---
Object Height Scale (ObjectHeightScale)float1.000000Field
Object Tile Scale (ObjectTileScale)float0.700000FieldObjects: size relative to a tile (the cube's height is scaled by Object Height Scale).
Projectile Intensity (ProjectileIntensity)float6.000000FieldBrightness given to the projectile material's "Intensity" parameter (when it has one).
Zone Height Offset (ZoneHeightOffset)float3.000000Field
Zone Tile Scale (ZoneTileScale)float0.900000FieldZone plates: size relative to a tile, and height above the tile surface (cm).
Dash Speed (DashSpeed)float1400.000000Motion
Leap Arc Height Per Tile (LeapArcHeightPerTile)float40.000000MotionHeight of a leap arc per tile of distance (cm), plus the minimum.
Leap Arc Min Height (LeapArcMinHeight)float120.000000Motion
Leap Hop Seconds (LeapHopSeconds)float0.450000MotionSeconds of one leap hop (arc).
Slide Speed (SlideSpeed)float900.000000MotionSpeed of knockbacks, pulls, slides and dashes (cm/s).
Swap Seconds (SwapSeconds)float0.500000MotionSwap: seconds of the two arcs.
Teleport Fade Seconds (TeleportFadeSeconds)float0.200000MotionTeleport: seconds to vanish, then to reappear.

RPG Saga Engine: Touch

Class URSETouchSettings (module RSE), Project Settings, Project, RPG Saga Engine. Touch controls (D-180, docs/product/mobile.md).

SettingTypeDefaultCategoryRestartDescription
Control Opacity Range (ControlOpacityRange)FVector2D(X=0.200000,Y=1.000000)ControlsRange of the player's Touch Controls Opacity option.
Control Scale Range (ControlScaleRange)FVector2D(X=0.750000,Y=1.300000)ControlsRange of the player's Touch Controls Size option.
Pressed Opacity (PressedOpacity)float0.950000ControlsOpacity of a control while touched.
Rest Opacity (RestOpacity)float0.550000ControlsOpacity of the controls at rest (the player's Touch Controls Opacity option multiplies it).
Stick Dead Zone (StickDeadZone)float0.120000ControlsJoystick deflection (0..1) under which it sends nothing (controls may set their own).
Double Tap Seconds (DoubleTapSeconds)float0.350000GesturesTwo taps closer in time than this (and within Tap Confirm Radius) are a double tap.
Drag Full Rate MMPer Second (DragFullRateMMPerSecond)float80.000000GesturesDrags as a rate (camera pans): finger speed in millimetres per second that gives full value.
Long Press Seconds (LongPressSeconds)float0.500000GesturesA touch held still this long is a long press (details and tooltips of rows, inventory items).
Pinch Step Ratio (PinchStepRatio)float1.150000GesturesPinch: change of the distance between the fingers that makes one zoom step (1.15 = 15 %).
Rotate Step Degrees (RotateStepDegrees)float30.000000GesturesTwo-finger rotate: degrees of turn that make one rotate step.
Tap Confirm Radius MM (TapConfirmRadiusMM)float6.000000GesturesCursor Then Confirm and double taps: how close the second tap must be to the first.
Tap Max Seconds (TapMaxSeconds)float0.300000GesturesA touch held longer than this is not a tap.
Tap Slop MM (TapSlopMM)float3.000000GesturesA touch that moves less than this is a tap / long press.
Default Touch Hint (DefaultTouchHint)FTextNSLOCTEXT("RSETouch", "DefaultTouchHint", "Tap")Key Prompts
Mouse After Touch Guard Seconds (MouseAfterTouchGuardSeconds)float0.600000Key PromptsMouse events this soon after a touch are the platform's copy of the touch (Windows touch screens) and do not switch the prompts to the mouse.
Touch Hints (TouchHints)TMap<FKey,FText>(8 entries)Key PromptsTouch hints of key prompts: the text a prompt shows for a gamepad key while the player uses touch, when no on-screen control presses that key's action (a control's label wins). Keys without a hint show Default Touch Hint for the face button bottom, nothing otherwise.
Context Poll Seconds (ContextPollSeconds)float0.250000LayoutsSeconds between two looks at the moment of play (exploration, the battle kind, an open screen). The screens' open / close events also update it at once.
Controls Widget Class (ControlsWidgetClass)TSoftClassPtr<URSETouchControlsWidget>NoneLayoutsThe widget that draws the controls (a subclass of RSE Touch Controls Widget). Empty = the built-in one.
Controls ZOrder (ControlsZOrder)int324LayoutsZ order of the controls in the player's screen (under the menus, which hide them anyway).
Layouts (Layouts)TMap<ERSETouchContext,TSoftObjectPtr<URSETouchLayout> >(5 entries)LayoutsThe layout of each moment of play. A context without one shows no controls and takes no gestures.
Show Controls (ShowControls)ERSETouchControlsModeAutoLayouts
Move to Accept Radius (MoveToAcceptRadius)float60.000000Tap To MoveTap-to-move stops this close to the tapped point (cm).
Move to Timeout Seconds (MoveToTimeoutSeconds)float6.000000Tap To MoveTap-to-move gives up after this long (blocked by a wall).
Debug Touches (bDebugTouches)boolFalseTestingDraws the touches and recognised gestures on screen (RSE.Input.Touch.Debug).
Emulate Touch with Mouse (bEmulateTouchWithMouse)boolFalseTestingPIE and PC builds: the left mouse button acts as a finger (Slate's fake touch events), so every touch path can be tried without a phone; hold Alt to add a second finger mirrored around the screen centre (pinch, rotate). RSE.Input.Touch.Emulate switches it at run time.

RPG Saga Engine: Translate with AI

Class URSETranslateSettings (module RSEEditor), Project Settings, Project, RPG Saga Engine. Translate with AI (D-163): export the game's texts for an AI, validate what comes back, import and compile.

SettingTypeDefaultCategoryRestartDescription
Register Culture (bRegisterCulture)boolTrueCompileAfter a compile, add the culture to the target's gather configs, the project's cultures to stage and the Options menu's languages.
Gather Timeout Seconds (GatherTimeoutSeconds)int321800CompileSeconds the Gather step may take before it is stopped (when it runs as a separate editor process).
Include Glossary (bIncludeGlossary)boolTrueExportPut the content names (abilities, items, characters, enemies...) into the prompt and the Glossary.csv.
Only Untranslated (bOnlyUntranslated)boolTrueExportExport only the texts that have no translation yet in the culture (a re-export after new content is small).
Resolve Speakers (bResolveSpeakers)boolTrueExportLook the speaker of a dialog line up in the asset (adds "speaker" to the entry's context). Loads the assets that hold texts.
Do Not Translate (DoNotTranslate)TArray<FString>(3 entries)ExportTerms that stay as they are in every language (stat abbreviations, brand names). Checked on import.
Format (Format)ERSETranslateFormatJsonExport
Max Chars Per Chunk (MaxCharsPerChunk)int3212000ExportMost source characters in one chunk file: keeps each request inside the AI's context window.
Max Entries Per Chunk (MaxEntriesPerChunk)int32120ExportMost entries in one chunk file (one AI request).
Max Glossary Terms in Prompt (MaxGlossaryTermsInPrompt)int32300ExportMost glossary terms listed in the prompt (the Glossary.csv has all of them).
Output Folder (OutputFolder)FStringSaved/TranslateExportFolder (relative to the project) that receives the export packs and the import reports.
Max Length Factor (MaxLengthFactor)float1.500000LengthLength limit = source length x this factor, for texts longer than "Short Text Length". Translations are often longer than English.
Min Extra Length (MinExtraLength)int326LengthCharacters always allowed on top of the factor (so a 3 letter source can become a 5 letter word).
Short Label Fields (ShortLabelFields)TArray<FString>(5 entries)LengthProperty names whose texts are always short labels (the short factor applies whatever the length).
Short Text Factor (ShortTextFactor)float1.300000LengthLength limit factor of short texts (a 6 letter word has little room, but a longer word is common).
Short Text Length (ShortTextLength)int3224LengthTexts up to this many characters (names, buttons) are "short": they get the short factor below.
New Target Asset Filters (NewTargetAssetFilters)TArray<FString>(1 entries)TargetProject folders a created target gathers assets from (long package paths with a trailing wildcard, e.g. "Content").
New Target Name (NewTargetName)FStringGameTargetName of the target created when the project has none (Create target). The Localization Dashboard shows it as well.
New Target Native Culture (NewTargetNativeCulture)FStringenTargetNative (source) culture of a target created by Create target.
Target Name (TargetName)FStringTargetLocalization target to translate (the name of its Config/Localization/<Name>_Gather.ini). Empty = the project's first target (the project's own content), else the RPG Saga Engine target (the plugin's texts).
Edge Whitespace Severity (EdgeWhitespaceSeverity)ERSETranslateSeverityWarningValidationWhat leading or trailing whitespace that differs from the source counts as.
Extra Id Severity (ExtraIdSeverity)ERSETranslateSeverityWarningValidationWhat an entry with an id the export did not contain counts as (the entry is ignored either way).
Extra Plural Severity (ExtraPluralSeverity)ERSETranslateSeverityWarningValidationWhat an extra plural category (one the language does not use) counts as. Missing categories are always errors.
Invalid Policy (InvalidPolicy)ERSETranslateInvalidPolicySkipInvalidEntriesValidationWhat happens to entries with errors.
Too Long Severity (TooLongSeverity)ERSETranslateSeverityWarningValidationWhat a translation longer than its limit counts as.
Untranslated Min Letters (UntranslatedMinLetters)int325ValidationIdentical texts shorter than this many letters are not flagged as untranslated (names, "OK", "Yes").
Untranslated Severity (UntranslatedSeverity)ERSETranslateSeverityWarningValidationWhat a translation that looks untranslated (identical to a source with letters, not a do-not-translate term) counts as.

RPG Saga Engine: Travel

Class URSETravelSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Zone navigation and fast travel rules (D-044, docs/design/zones-travel.md).

SettingTypeDefaultCategoryRestartDescription
Discover on Visit (bDiscoverOnVisit)boolTrueDiscoveryBeing in an area marks it (and its visit-discovered places) as discovered. Off: only effects and flags discover places.
Fast Travel Enabled (bFastTravelEnabled)boolTrueFast TravelThe world map can be used to travel between discovered places (areas may still forbid it).

RPG Saga Engine: Travel UI

Class URSETravelUISettings (module RSE), Project Settings, Project, RPG Saga Engine. Presentation of zone navigation and fast travel (D-044, docs/design/zones-travel.md): the fades and the loading screen of a map change, the area banner, zone exits and the world map screen.

SettingTypeDefaultCategoryRestartDescription
Area Check Interval (AreaCheckInterval)float0.250000AreasHow often the player's area is checked on maps with ARSEAreaVolumes linked to areas (no timer on other maps).
Banner Anchor (BannerAnchor)FVector2D(X=0.500000,Y=0.200000)BannerWhere the banner sits (normalized screen point, banner centered on it).
Banner Delay (BannerDelay)float0.200000Banner
Banner Fade Seconds (BannerFadeSeconds)float0.450000Banner
Banner Seconds (BannerSeconds)float2.400000BannerTime fully shown.
Banner on Area Change (bBannerOnAreaChange)boolTrueBannerThe area name when the player walks into another area of the same map (an ARSEAreaVolume with an Area).
Banner on Arrival (bBannerOnArrival)boolTrueBannerThe area name after a travel (at the end of the fade-in).
Banner on Map Start (bBannerOnMapStart)boolTrueBannerThe area name when a map starts without a travel (new game, load).
Banner Shows Description (bBannerShowsDescription)boolFalseBannerThe area's description under its name.
Confirm No Text (ConfirmNoText)FTextNSLOCTEXT("RSETravelUI", "ConfirmNo", "No")Exits
Confirm Travel Format (ConfirmTravelFormat)FTextNSLOCTEXT("RSETravelUI", "ConfirmTravelFormat", "Go to {Place}?")ExitsQuestion of exits that ask first. {Place} = the destination area.
Confirm Yes Text (ConfirmYesText)FTextNSLOCTEXT("RSETravelUI", "ConfirmYes", "Yes")Exits
Default Blocked Message (DefaultBlockedMessage)FTextNSLOCTEXT("RSETravelUI", "DefaultBlockedMessage", "The way is blocked.")ExitsSaid when an exit's conditions fail and the exit has no lines of its own.
Default Exit Prompt (DefaultExitPrompt)FTextNSLOCTEXT("RSETravelUI", "DefaultExitPrompt", "Go")ExitsPrompt of exits used with Interact ("Go"). An exit's own PromptText wins.
Blocked Area Text (BlockedAreaText)FTextNSLOCTEXT("RSETravelUI", "BlockedArea", "The map can\'t be used here.")Texts
Blocked Battle Text (BlockedBattleText)FTextNSLOCTEXT("RSETravelUI", "BlockedBattle", "Not during a battle.")Texts
Blocked Busy Text (BlockedBusyText)FTextNSLOCTEXT("RSETravelUI", "BlockedBusy", "Not now.")Texts
Blocked Disabled Text (BlockedDisabledText)FTextNSLOCTEXT("RSETravelUI", "BlockedDisabled", "Fast travel is not available.")Texts
Blocked Traveling Text (BlockedTravelingText)FTextNSLOCTEXT("RSETravelUI", "BlockedTraveling", "Already on the way.")Texts
Locked Text (LockedText)FTextNSLOCTEXT("RSETravelUI", "Locked", "You can\'t go there now.")TextsDetail of a discovered place that cannot be reached now.
Need Map Item Text (NeedMapItemText)FTextNSLOCTEXT("RSETravelUI", "NeedMapItem", "You have no map.")TextsParty menu entry when WorldMapItem is missing.
No Places Text (NoPlacesText)FTextNSLOCTEXT("RSETravelUI", "NoPlaces", "No places discovered yet.")Texts
Party Menu Entry Hint (PartyMenuEntryHint)FTextNSLOCTEXT("RSETravelUI", "PartyMenuEntryHint", "Travel to a place you have already visited.")Texts
Party Menu Entry Text (PartyMenuEntryText)FTextNSLOCTEXT("RSETravelUI", "PartyMenuEntry", "World map")TextsThe party menu row.
Travel Action Text (TravelActionText)FTextNSLOCTEXT("RSETravelUI", "TravelAction", "Travel")TextsKey hint of Confirm.
World Map Title (WorldMapTitle)FTextNSLOCTEXT("RSETravelUI", "WorldMapTitle", "World Map")Texts--- Texts ---
You Are Here Text (YouAreHereText)FTextNSLOCTEXT("RSETravelUI", "YouAreHere", "You are here.")TextsDetail of the place the party is in.
Show Loading Area Name (bShowLoadingAreaName)boolTrueTransitionThe destination's area name on the black loading screen.
Fade Color (FadeColor)FLinearColor(R=0.000000,G=0.000000,B=0.000000,A=1.000000)Transition
Fade in Seconds (FadeInSeconds)float0.600000TransitionFade from FadeColor once the new map is in. 0 = cut.
Fade Out Seconds (FadeOutSeconds)float0.450000TransitionFade to FadeColor before the map changes. 0 = cut.
Loading Hold Seconds (LoadingHoldSeconds)float0.150000TransitionTime spent fully faded, with the destination's name shown, before the map opens (the loading screen).
Loading Text Anchor (LoadingTextAnchor)FVector2D(X=0.500000,Y=0.500000)TransitionWhere the loading name sits (normalized screen point).
Overlay Widget Class (OverlayWidgetClass)TSoftClassPtr<URSEScreenWidget>NoneTransitionFade / loading / banner overlay (D-052). Empty = the built-in screen. A Widget Blueprint derived from RSEScreenWidget replaces it and receives a RSETravelOverlayViewModel (docs/product/custom-ui.md).
Overlay ZOrder (OverlayZOrder)int3290TransitionZ-order of the overlay (above every HUD and menu).
Backdrop Color (BackdropColor)FRSEUIColor(Token="Primary",Alpha=0.700000,Lightness=-0.526921,Chroma=0.679858,Hue=0.163523,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))World MapDims the world behind the map.
World Map in Party Menu (bWorldMapInPartyMenu)boolTrueWorld MapThe party menu offers the world map (Options page).
Current Marker Color (CurrentMarkerColor)FRSEUIColor(Token="Info",Alpha=1.000000,Lightness=0.069244,Chroma=0.841473,Hue=-23.016491,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))World Map
Current Marker Glyph (CurrentMarkerGlyph)FTextNSLOCTEXT("RSETravelUI", "CurrentMarkerGlyph", "★")World MapMarker of the place the party is in.
List Width (ListWidth)float280.000000World MapWidth of the place list next to the map.
Locked Marker Color (LockedMarkerColor)FRSEUIColor(Token="Neutral",Alpha=1.000000,Lightness=-0.114986,Chroma=0.432908,Hue=15.523865,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))World Map
Map Background (MapBackground)TSoftObjectPtr<UTexture2D>NoneWorld MapPicture of the world under the markers. Empty = a plain themed panel.
Map Background Tint (MapBackgroundTint)FLinearColor(R=1.000000,G=1.000000,B=1.000000,A=1.000000)World Map
Map Fill Color (MapFillColor)FRSEUIColor(Token="Primary",Alpha=1.000000,Lightness=-0.207849,Chroma=0.243229,Hue=-14.189053,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))World MapMap color without a picture.
Map Size (MapSize)FVector2D(X=640.000000,Y=400.000000)World MapSize of the map area (the markers' MapPosition is relative to it).
Marker Color (MarkerColor)FRSEUIColor(Token="Text",Alpha=1.000000,Lightness=-0.042130,Chroma=6.947662,Hue=169.558411,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))World Map
Marker Glyph (MarkerGlyph)FTextNSLOCTEXT("RSETravelUI", "MarkerGlyph", "◆")World Map
Selected Marker Color (SelectedMarkerColor)FRSEUIColor(Token="Accent",Alpha=1.000000,Chroma=1.000000,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))World Map
World Map Item (WorldMapItem)TSoftObjectPtr<URSEItemData>NoneWorld MapWhen set, the party menu entry needs this item in the inventory (a map). Signposts work without it.
World Map Widget Class (WorldMapWidgetClass)TSoftClassPtr<URSEScreenWidget>NoneWorld MapWorld map screen (D-052). Empty = the built-in themed screen. A Widget Blueprint derived from RSEScreenWidget replaces it and receives a RSEWorldMapViewModel (docs/product/custom-ui.md).
World Map ZOrder (WorldMapZOrder)int3256World MapZ-order of the world map (above the party menu).

RPG Saga Engine: Traversal

Class URSETraversalSettings (module RSE), Project Settings, Project, RPG Saga Engine. Traversal (D-121, docs/design/traversal.md): ladders, ropes, swimming, jumps, vaults and drops in exploration and in Free Tactics.

SettingTypeDefaultCategoryRestartDescription
Default Anims (DefaultAnims)TMap<FGameplayTag,FRSECharacterAnim>(0 entries)AnimationTraversal slot (Traversal.Anim.*) -> clip, for characters whose anim set has none (and its parent tags have none). Empty = the body moves along the traversal in its current pose.
Loop Blend Out Seconds (LoopBlendOutSeconds)float0.200000AnimationBlend out (seconds) of a traversal loop when the body gets off.
Battle Swim Sink Fallback (BattleSwimSinkFallback)float100.000000BattleFree Tactics playback: the swimmer's body hangs this far below the battle position (cm) when its kind gives no offset.
Capture Links (bCaptureLinks)boolTrueBattlePlaced traversal links (ladders, ropes, jumps...) become nav links in Free Tactics battles.
Capture Volumes (bCaptureVolumes)boolTrueBattlePlaced swim volumes become traversal volumes in Free Tactics battles.
End Start Distance (EndStartDistance)float160.000000ExplorationHow far from an end a body may be to start the link from it (cm, from the capsule's feet to the end point).
End Use Radius (EndUseRadius)float110.000000ExplorationRadius of the interaction sphere at each end of a link (cm): standing in it shows the prompt.
Swim Move Threshold (SwimMoveThreshold)float30.000000ExplorationHorizontal speed (cm/s) above which a swimmer plays the move loop instead of the idle one.
Volume Check Interval (VolumeCheckInterval)float0.100000ExplorationSeconds between checks while a body is inside a traversal volume (depth, banks, swim idle or move).
Follower Approach Speed (FollowerApproachSpeed)float350.000000FollowersWalking speed of a follower going to a link (cm/s).
Follower Check Interval (FollowerCheckInterval)float0.200000FollowersSeconds between the follower order checks (a timer, no Tick).
Follower Stagger Seconds (FollowerStaggerSeconds)float0.600000FollowersSeconds between followers starting the same link (they climb one after the other).
Follower Start Distance (FollowerStartDistance)float120.000000FollowersA follower sent to a link starts it once this close to its start end (cm).
Follower Timeout Seconds (FollowerTimeoutSeconds)float8.000000FollowersSeconds a follower has to reach the link before it is brought to the far end.
Default Ladder Kind (DefaultLadderKind)TSoftObjectPtr<URSETraversalLinkKindData>/RPGSagaEngine/Data/Traversal/DA_Traversal_Ladder.DA_Traversal_LadderKinds--- Default kinds (placed actors without their own) ---
Default Link Kind (DefaultLinkKind)TSoftObjectPtr<URSETraversalLinkKindData>/RPGSagaEngine/Data/Traversal/DA_Traversal_Jump.DA_Traversal_JumpKindsA Traversal Link actor without a kind (usually a jump).
Default Rope Kind (DefaultRopeKind)TSoftObjectPtr<URSETraversalLinkKindData>/RPGSagaEngine/Data/Traversal/DA_Traversal_Rope.DA_Traversal_RopeKinds
Default Swim Kind (DefaultSwimKind)TSoftObjectPtr<URSETraversalVolumeKindData>/RPGSagaEngine/Data/Traversal/DA_Traversal_Swim.DA_Traversal_SwimKinds
Rope Mesh (RopeMesh)TSoftObjectPtr<UStaticMesh>NonePlaceholdersLook of a rope without its own mesh (a 1 m cube scaled along the rope). Empty = the engine cylinder.

RPG Saga Engine: Turn Order Bar

Class URSETurnOrderSettings (module RSE), Project Settings, Project, RPG Saga Engine. The live battle's turn order bar (D-147, docs/design/battle-menus.md): portraits with an HP bar under each, the acting unit first and larger.

SettingTypeDefaultCategoryRestartDescription
Active Frame Color (ActiveFrameColor)FRSEUIColor(Token="Accent",Alpha=1.000000,Lightness=0.013676,Chroma=0.827775,Hue=0.129302,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors
Enemy Frame Color (EnemyFrameColor)FRSEUIColor(Token="Negative",Alpha=1.000000,Lightness=-0.018272,Chroma=1.010696,Hue=-1.060005,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors
Enemy HPColor (EnemyHPColor)FRSEUIColor(Token="Negative",Alpha=1.000000,Lightness=-0.034214,Chroma=1.006407,Hue=0.868554,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors
Hidden HPColor (HiddenHPColor)FRSEUIColor(Token="Neutral",Alpha=0.800000,Lightness=-0.102636,Chroma=1.665689,Hue=3.202312,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors
HPBack Color (HPBackColor)FRSEUIColor(Token="Black",Alpha=0.700000,Chroma=1.000000,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors
Low HPColor (LowHPColor)FRSEUIColor(Token="Warning",Alpha=1.000000,Lightness=-0.016729,Chroma=1.097072,Hue=-1.844743,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Colors
Low HPShare (LowHPShare)float0.300000Colors
Party Frame Color (PartyFrameColor)FRSEUIColor(Token="Info",Alpha=1.000000,Lightness=0.031412,Chroma=1.025162,Hue=-12.566440,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))ColorsFrames: party, enemies, the acting unit.
Party HPColor (PartyHPColor)FRSEUIColor(Token="Health",Alpha=1.000000,Lightness=0.022416,Chroma=0.945263,Hue=0.075144,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))ColorsHP bars: party fill, enemy fill, low HP (below Low HP Share), the empty part, and a hidden bar (not scanned).
Portrait Back Color (PortraitBackColor)FRSEUIColor(Token="Primary",Alpha=0.950000,Lightness=-0.172664,Chroma=0.334008,Hue=10.670621,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))ColorsBehind a portrait without art (the initials show on it).
Active Scale (ActiveScale)float1.250000Look
Show Names (bShowNames)boolFalseLookThe unit's name under its portrait (off: the portrait and the HP bar only; the name shows on the acting unit's panel).
Corner Radius (CornerRadius)float6.000000LookCorner radius of the portrait frames, and the frame's width.
Frame Width (FrameWidth)float2.000000Look
Hidden HPText (HiddenHPText)FTextNSLOCTEXT("RSETurnOrderSettings", "HiddenHP", "?")LookShown on a hidden HP bar.
HPBar Height (HPBarHeight)float6.000000LookHeight of the HP bar under a portrait and the gap between portraits (pixels at 1080p).
Portrait Size (PortraitSize)float52.000000LookSide of a portrait (pixels at 1080p) and the acting unit's size (multiplier).
Spacing (Spacing)float6.000000Look
Steam Deck Scale (SteamDeckScale)float1.100000LookScale on a Steam Deck.

RPG Saga Engine: Turn-Based Battle

Class URSETurnBattleSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Turn-based battles (D-050, docs/design/turn-based.md) and the choice of the classic mode.

SettingTypeDefaultCategoryRestartDescription
Classic Encounters Enabled (bClassicEncountersEnabled)boolTrueModesOff: encounter triggers that lead to a classic stage start no battle (Tactics-only games). Tactics triggers are not affected.
Classic Mode Override (ClassicModeOverride)FGameplayTag()ModesMode of every battle on a classic stage (ATB director). Empty = each encounter's BattleMode (ATB unless it says Turn). Battle.Mode.ATB or Battle.Mode.Turn switches all classic battles at once: the genre presets use this.
Reorder on Speed Change (bReorderOnSpeedChange)boolTrueTurn OrderRound: a Speed change (haste, slow) reorders the fighters still waiting this round. Off = the order is fixed at the round's start.
Charge Delay Scale (ChargeDelayScale)float1.000000Turn OrderCTB: an ability's charge time (ATB rules) becomes extra waiting before its user's next turn, times this. The action itself resolves at once. 0 = every action costs the same. Round battles ignore charge times.
Initiative Variance (InitiativeVariance)float0.100000Turn OrderRound: initiative = Speed x (1 +/- this), rolled per fighter each round. 0 = strict Speed order.
Tie Break (TieBreak)ERSETurnTieBreakPlayerFirstTurn OrderTie-break after initiative (Round) or waiting time (CTB), then Speed. The unit id decides last.
Turn Order Preview Count (TurnOrderPreviewCount)int328Turn OrderUpcoming turns shown in the HUD's turn order strip (and returned by URSETurnBattle::GetTurnOrderPreview by default).
Turn Order Style (TurnOrderStyle)ERSETurnOrderStyleRoundTurn Order--- Turn order ---

RPG Saga Engine: Tutorial UI

Class URSETutorialUISettings (module RSE), Project Settings, Project, RPG Saga Engine. Presentation of the tutorials (D-047): the tutorial screen and the party menu's Help page.

SettingTypeDefaultCategoryRestartDescription
Help Column Text (HelpColumnText)FTextNSLOCTEXT("RSETutorialUI", "HelpColumn", "Tutorials")Help Page--- Help page (party menu) ---
Help Details Width (HelpDetailsWidth)float460.000000Help PageWidth of the preview panel.
Help Disabled Text (HelpDisabledText)FTextNSLOCTEXT("RSETutorialUI", "HelpDisabled", "New tutorials are turned off (Options, Game tab).")Help PageUnder the list when the player turned tutorials off.
Help Empty Text (HelpEmptyText)FTextNSLOCTEXT("RSETutorialUI", "HelpEmpty", "No tutorials yet. They appear here once you have seen them.")Help Page
Help Hint Text (HelpHintText)FTextNSLOCTEXT("RSETutorialUI", "HelpHint", "Choose a tutorial to read it again.")Help PageUnder the list.
Help Pages Format (HelpPagesFormat)FTextNSLOCTEXT("RSETutorialUI", "HelpPages", "{Count} {Count}|plural(one=page,other=pages)")Help Page{Count} pages.
Backdrop Color (BackdropColor)FRSEUIColor(Token="Primary",Alpha=0.550000,Lightness=-0.526921,Chroma=0.679858,Hue=0.163523,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))ScreenDims the game behind the tutorial.
Pause Game (bPauseGame)boolTrueScreenThe game pauses while a tutorial is open (battles stop: ATB time, animations, AI).
Image Max Height (ImageMaxHeight)float220.000000ScreenLargest height of a page picture (its width follows its aspect, capped by the window).
Max Width (MaxWidth)float760.000000Screen
Min Width (MinWidth)float560.000000ScreenWindow width: grows with the text between the two, then the text wraps.
Open Delay Frames (OpenDelayFrames)int322ScreenFrames to wait before opening a requested tutorial, so the screen that triggered it (shop, lock) is open underneath.
Widget Class (WidgetClass)TSoftClassPtr<URSEScreenWidget>NoneScreenTutorial screen (D-052). Empty = the built-in themed screen. A Widget Blueprint derived from RSEScreenWidget replaces it and receives a RSETutorialViewModel (docs/product/custom-ui.md).
ZOrder (ZOrder)int3270ScreenZ-order in the viewport: above the HUDs, the shop, the card table and the options.
Close Text (CloseText)FTextNSLOCTEXT("RSETutorialUI", "Close", "Got it")TextsButton and key prompt that close the last page.
Header Text (HeaderText)FTextNSLOCTEXT("RSETutorialUI", "Header", "Tutorial")TextsSmall heading above the title.
Next Text (NextText)FTextNSLOCTEXT("RSETutorialUI", "Next", "Next")Texts
Page Format (PageFormat)FTextNSLOCTEXT("RSETutorialUI", "PageFormat", "{Page} / {Count}")Texts{Page} of {Count}.
Previous Text (PreviousText)FTextNSLOCTEXT("RSETutorialUI", "Previous", "Previous")Texts
Turn Page Action Text (TurnPageActionText)FTextNSLOCTEXT("RSETutorialUI", "TurnPage", "Page")TextsKey prompt of the page keys.
Screen Triggers (ScreenTriggers)TMap<TSoftClassPtr<UUserWidget> ,FGameplayTag>(4 entries)TriggersD-147: screens that fire a tutorial trigger when they open (widget class -> trigger; a subclass matches too): the inventory and stash, the growth board, the companion commands, the area map. A new screen's tutorial = one row here and a Tutorial Data asset with that trigger.

RPG Saga Engine: Tutorials

Class URSETutorialSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Tutorial rules (D-047, Project Settings -> RPG Saga Engine -> Tutorials).

SettingTypeDefaultCategoryRestartDescription
Enabled by Default (bEnabledByDefault)boolTrueRulesTutorials show unless the player turns them off in the options (the project default; not stored for the player).
Load from Asset Manager (bLoadFromAssetManager)boolTrueRulesEvery Tutorial Data asset of the Asset Manager can be triggered. Off: only tutorials registered from code.
Story Tutorials Follow Option (bStoryTutorialsFollowOption)boolTrueRulesStory effects (Show Tutorial) also respect the player's option. Off: a story tutorial always shows (once).
Ability Target Trigger (AbilityTargetTrigger)FGameplayTag(TagName="Tutorial.Trigger.Tactics.FirstAbility")TriggersTactics: the player aims an ability or item (range, area, line of sight, forecast).
Action Command Trigger (ActionCommandTrigger)FGameplayTag(TagName="Tutorial.Trigger.ActionCommand")TriggersThe timing window of the player's own action command is about to open (D-034): the battle holds, the tutorial shows, and the window starts only after it closes.
Battle Mode Triggers (BattleModeTriggers)TMap<FGameplayTag,FGameplayTag>(3 entries)TriggersTrigger fired when a battle of a mode starts (Battle.Mode.* -> Tutorial.Trigger.*). Tactics: at a manual deployment (an auto-deployed battle has no deployment to explain). Just-in-time tutorials about playing the battle belong in First Command Triggers.
Block Prompt Trigger (BlockPromptTrigger)FGameplayTag(TagName="Tutorial.Trigger.BlockPrompt")TriggersA block window is about to open (defensive action command, D-034): the attack freezes, the tutorial shows, and the window starts only after it closes (its time is not counted against the press).
Card Match Trigger (CardMatchTrigger)FGameplayTag(TagName="Tutorial.Trigger.CardMatch")Triggers
First Command Triggers (FirstCommandTriggers)TMap<FGameplayTag,FGameplayTag>(4 entries)TriggersTrigger fired the first time the player can give a command in a battle of a mode (D-064): the Tactics command menu of the player's first turn, the first ATB command menu, the first command of a turn-based battle's first round.
Level Up Trigger (LevelUpTrigger)FGameplayTag(TagName="Tutorial.Trigger.LevelUp")Triggers
Move Trigger (MoveTrigger)FGameplayTag(TagName="Tutorial.Trigger.Tactics.FirstMove")TriggersTactics: the player chooses Move (reachable tiles, path line, costs).
Resonance Full Trigger (ResonanceFullTrigger)FGameplayTag(TagName="Tutorial.Trigger.ResonanceFull")TriggersA party member with a full Resonance gets its command menu (the summon can be used now).
Screen Triggers (ScreenTriggers)TMap<TSoftClassPtr<UObject> ,FGameplayTag>(2 entries)TriggersScreens opened through a screen request (the Open Shop / Open Code Lock effects) that fire a trigger: the class of the requested asset -> the trigger. A subclass matches too.
Ability Triggers (AbilityTriggers)TArray<FRSETutorialAbilityTrigger>(5 entries)Triggers|Live BattleAn ability aimed in battle fires these (in order): first area ability, first heal on allies, first surface, first Scan...
Battle Event Triggers (BattleEventTriggers)TMap<ERSEBattleEventType,FGameplayTag>(1 entries)Triggers|Live BattlePresented battle events of every mode fire these (a reinforcement joins: Unit Joined).
Entry Aim Triggers (EntryAimTriggers)TMap<FName,FGameplayTag>(1 entries)Triggers|Live BattleBattle menu entries (by id, or the part before the first dot: "Jump", "Overwatch", "Door") fire these when the player aims them, and those of Entry Offer Triggers the first time the menu offers them.
Entry Offer Triggers (EntryOfferTriggers)TMap<FName,FGameplayTag>(1 entries)Triggers|Live Battle
Live Aim Trigger (LiveAimTrigger)FGameplayTag(TagName="Tutorial.Trigger.Live.FirstAim")Triggers|Live BattleLive battles (Free Tactics): the player aims an ability or item (range, cover, height, the estimate).
No Actions Left Trigger (NoActionsLeftTrigger)FGameplayTag(TagName="Tutorial.Trigger.Live.NoActionsLeft")Triggers|Live BattleLive battles: the active unit can still decide but has nothing left to use (End Turn).

RPG Saga Engine: UI

Class URSEUISettings (module RSE), Project Settings, Project, RPG Saga Engine. Look of the game UI.

SettingTypeDefaultCategoryRestartDescription
Action Banner Top Offset (ActionBannerTopOffset)float138.000000Battle BannersDistance of the action banner ("Brute — Strike", D-065) from the top of the screen, in screen units at the 1080-unit reference height (D-083): below the top bar (turn order, enemy chips). Scales with the screen like the rest of the UI (1280x800 and 1920x1080 alike).
Target Card Portrait Size (TargetCardPortraitSize)float48.000000Battle HUDPortrait on the classic battle target card (D-075). 0 = none.
Turn Chip Portrait Size (TurnChipPortraitSize)float28.000000Battle HUDPortrait on turn order chips (D-075; units with a portrait). 0 = names only.
Battle Camera Blend Time (BattleCameraBlendTime)float0.500000CameraBlend time when switching to and from an ATB stage camera.
Accent Color (AccentColor)FLinearColor(R=1.000000,G=0.780000,B=0.250000,A=1.000000)Colors
Damage Text Color (DamageTextColor)FLinearColor(R=1.000000,G=0.350000,B=0.300000,A=1.000000)Colors
Defeat Color (DefeatColor)FLinearColor(R=0.850000,G=0.200000,B=0.200000,A=1.000000)Colors
Dim Text Color (DimTextColor)FLinearColor(R=0.600000,G=0.620000,B=0.680000,A=1.000000)Colors
Disabled Text Color (DisabledTextColor)FLinearColor(R=0.350000,G=0.360000,B=0.400000,A=1.000000)Colors
Heal Text Color (HealTextColor)FLinearColor(R=0.350000,G=1.000000,B=0.450000,A=1.000000)Colors
HPColor (HPColor)FLinearColor(R=0.250000,G=0.800000,B=0.350000,A=1.000000)Colors
Low HPColor (LowHPColor)FLinearColor(R=0.900000,G=0.250000,B=0.200000,A=1.000000)Colors
MPColor (MPColor)FLinearColor(R=0.300000,G=0.500000,B=1.000000,A=1.000000)Colors
Panel Color (PanelColor)FLinearColor(R=0.020000,G=0.025000,B=0.050000,A=0.820000)Colors
Panel Highlight Color (PanelHighlightColor)FLinearColor(R=0.120000,G=0.160000,B=0.300000,A=0.950000)Colors
Text Color (TextColor)FLinearColor(R=0.930000,G=0.930000,B=0.950000,A=1.000000)Colors
Victory Color (VictoryColor)FLinearColor(R=1.000000,G=0.850000,B=0.300000,A=1.000000)Colors
Companion Menu Style (CompanionMenuStyle)ERSECompanionMenuStyleRadialCompanion CommandsThe companion command menu (G): the companion radial (default) or the single ring of D-097.
Companion Radial Style (CompanionRadialStyle)TSoftObjectPtr<URSEBattleMenuStyle>NoneCompanion CommandsThe companion radial's look and presenter: a Radial battle menu style asset (any URSEBattleMenuStyle). Empty = the built-in companion look (URSECompanionRadialStyle: the battle radial at full size, names on the slices).
Companion Radial Widget Class (CompanionRadialWidgetClass)TSoftClassPtr<URSEScreenWidget>NoneCompanion CommandsThe companion radial's screen (D-052). Empty = the built-in one; a Widget Blueprint derived from RSECompanionRadialWidget.
Companion Radial ZOrder (CompanionRadialZOrder)int3220Companion Commands
Floating Fade Start (FloatingFadeStart)float0.600000Floating TextThe fade starts at this share of the text's duration.
Floating Hit Height (FloatingHitHeight)float115.000000Floating TextWorld height above the unit's origin where combat numbers appear: the hit point (D-083). The timing grade shows higher, above the head (Battle Presentation -> Grade Height).
Floating Lane Release (FloatingLaneRelease)float0.550000Floating TextA lane is free again once its text has lived this share of its duration (it has risen out of the way).
Floating Lane Shift (FloatingLaneShift)float16.000000Floating TextLanes above the first also step sideways, alternately right and left, by this many screen units.
Floating Lane Spacing (FloatingLaneSpacing)float46.000000Floating TextTexts on the same unit never overlap (D-083): each takes the lowest free lane, lanes this many screen units apart (numbers stack upwards, status tags downwards).
Floating Pop Time (FloatingPopTime)float0.120000Floating TextSeconds of the pop (from Pop Scale to the text's size).
Floating Stagger (FloatingStagger)float0.140000Floating TextTexts on the same unit start at least this far apart (several hits at once come one after another).
Floating Tag Lane Spacing (FloatingTagLaneSpacing)float24.000000Floating TextStatus tags are smaller: their lanes are this far apart.
Floating Text Duration (FloatingTextDuration)float1.200000Floating Text--- Floating combat text ---
Floating Text Height (FloatingTextHeight)float160.000000Floating TextWorld height above the unit's origin of markers over units (target markers).
Floating Text Rise (FloatingTextRise)float60.000000Floating TextRise in screen pixels over the text's lifetime.
Floating Text Styles (FloatingTextStyles)TMap<ERSEFloatingTextKind,FRSEFloatingTextStyle>(7 entries)Floating TextStyle of each kind of combat text (D-083). Missing kinds use Damage's.
Bar Height (BarHeight)float8.000000Layout
Log Lines (LogLines)int326Layout
Log Max Width (LogMaxWidth)float420.000000LayoutWidest line of the battle logs (longer lines are shortened), so the log never runs into the turn order.
Panel Padding (PanelPadding)float12.000000Layout
Screen Margin (ScreenMargin)float24.000000Layout--- Layout ---
Side Panel Max Width (SidePanelMaxWidth)float440.000000Layout
Side Panel Width (SidePanelWidth)float320.000000LayoutWidth of the battle side panels (unit, command menu, deployment, forecast). They grow with longer text up to SidePanelMaxWidth, then wrap or shorten it.
Turn Order Length (TurnOrderLength)int328Layout
Enemy HPBar Width (EnemyHPBarWidth)float90.000000Layout|ATB
Gauge Width (GaugeWidth)float160.000000Layout|ATB
Party HPBar Width (PartyHPBarWidth)float150.000000Layout|ATB
Party MPWidth (PartyMPWidth)float70.000000Layout|ATB
Party Name Width (PartyNameWidth)float130.000000Layout|ATBATB party panel column widths and bar heights.
Text Column Growth (TextColumnGrowth)float1.600000Layout|ATBATB party panel and enemy chips: text columns grow up to this factor of their width.
Bestiary Portrait Size (BestiaryPortraitSize)float128.000000Party MenuPortrait of the bestiary page (0 = none).
Uniform Party Menu Size (bUniformPartyMenuSize)boolTrueParty MenuD-132: every page of the party menu uses one window size, so switching tabs never resizes the window. With the grid inventory (Inventory UI -> Style: Grid) that size is Inventory UI -> Menu Width / Menu Height (its largest page), otherwise Party Menu Width / Party Menu Height. The window still shrinks as a whole on small screens (Screen Margin). Off: only the grid page uses the larger size (D-123).
Party Menu Ability Groups (PartyMenuAbilityGroups)TArray<FRSEAbilityGroupLabel>(4 entries)Party MenuGroups of the party menu's ability list (D-073), in order: abilities whose AbilityType matches a group's tag are listed under its label (the command menu groups of D-065). The rest follow under PartyMenuOtherAbilitiesLabel.
Party Menu Background Color (PartyMenuBackgroundColor)FLinearColor(R=0.020000,G=0.025000,B=0.050000,A=0.960000)Party Menu
Party Menu Blocked Hint (PartyMenuBlockedHint)FTextNSLOCTEXT("RSEUISettings", "PartyMenuBlockedHint", "Use items from the battle menu")Party Menu
Party Menu Blocked Text (PartyMenuBlockedText)FTextNSLOCTEXT("RSEUISettings", "PartyMenuBlocked", "Menu not available in battle")Party MenuShown when the menu key is pressed during a battle and the menu stays closed (a toast of the reward feed: the line, and the hint above it).
Party Menu Column Width (PartyMenuColumnWidth)float340.000000Party MenuWidth of one list column (members, slots, candidates).
Party Menu Height (PartyMenuHeight)float620.000000Party Menu
Party Menu in Battle (PartyMenuInBattle)ERSEPartyMenuBattleAccessBlockedParty MenuD-128: the party menu during a battle (Free Tactics, Tactics, ATB). Blocked by default: items are used through the battle menu. Each local player's menu asks for itself (URSEPartyMenuViewModel::GetBattleAccess), so co-op guests follow the same rule on their own screens.
Party Menu Other Abilities Label (PartyMenuOtherAbilitiesLabel)FTextNSLOCTEXT("RSEUISettings", "GroupOther", "Other")Party Menu
Party Menu Portrait Size (PartyMenuPortraitSize)float44.000000Party MenuPortrait beside each member row and on the bestiary page (D-075; the character's Portrait or generated art). 0 = none.
Party Menu Stats (PartyMenuStats)TArray<FGameplayTag>(0 entries)Party MenuStats listed on the equipment page and in the shop, in order. Empty = the attribute registry's visible attributes, in UI order (D-054).
Party Menu View Only Text (PartyMenuViewOnlyText)FTextNSLOCTEXT("RSEUISettings", "PartyMenuViewOnly", "Nothing can be changed during battle. Use items from the battle menu.")Party MenuShown when a change is tried in the view-only menu during a battle.
Party Menu Width (PartyMenuWidth)float1100.000000Party Menu
Stat Decrease Color (StatDecreaseColor)FLinearColor(R=1.000000,G=0.400000,B=0.350000,A=1.000000)Party Menu
Stat Increase Color (StatIncreaseColor)FLinearColor(R=0.350000,G=1.000000,B=0.450000,A=1.000000)Party Menu
Tag Labels (TagLabels)TMap<FGameplayTag,FText>(0 entries)Party MenuOptional overrides of stat and resource names in menus. Missing tags use the attribute registry's display names (D-054).
Back Row Color (BackRowColor)FRSEUIColor(Token="Info",Alpha=1.000000,Chroma=1.000000,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Party Menu|Formation Page
Enemy Side Color (EnemySideColor)FRSEUIColor(Token="Negative",Alpha=1.000000,Lightness=-0.061080,Chroma=1.063807,Hue=-6.477600,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Party Menu|Formation Page
Formation Page (FormationPage)ERSEFormationPageModeAutoParty Menu|Formation PageD-155: what the Formation tab shows. Auto: the classic formation (battle party, front / back rows) where classic battles can start (the level has an ATB battle director), else Party (leader, order and the exploration formation: live-only games).
Formation Portrait Size (FormationPortraitSize)float64.000000Party Menu|Formation PagePortrait size of the member tiles (Formation and Party pages).
Formation Preview Ground Color (FormationPreviewGroundColor)FRSEUIColor(Token="Primary",Alpha=1.000000,Lightness=-0.199310,Chroma=0.205483,Hue=-19.591469,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Party Menu|Formation PageThe ground of the Formation page's top-down preview.
Formation Preview Portrait Size (FormationPreviewPortraitSize)float40.000000Party Menu|Formation PagePortrait size in the battle and exploration previews.
Front Row Color (FrontRowColor)FRSEUIColor(Token="Warning",Alpha=1.000000,Lightness=-0.018197,Chroma=0.849770,Hue=-8.843429,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Party Menu|Formation PageColors of the rows in the Formation page's diagram and preview, and of the enemy side.
Party Page Label (PartyPageLabel)FTextNSLOCTEXT("RSEUISettings", "PartyPageLabel", "Party")Party Menu|Formation PageThe tab's label when it is the Party page.
Party Preview Range (PartyPreviewRange)float500.000000Party Menu|Formation PageWorld distance from the leader to the preview's edge (cm): the follower places are drawn to this scale.
Party Preview Size (PartyPreviewSize)float260.000000Party Menu|Formation PageSide of the Party page's top-down preview (pixels at 1080p).
Fallen Color (FallenColor)FRSEUIColor(Token="Negative",Alpha=1.000000,Lightness=-0.047762,Chroma=1.193834,Hue=-1.875349,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Party Menu|Status Page
Fallen Portrait Tint (FallenPortraitTint)FRSEUIColor(Token="Neutral",Alpha=0.850000,Lightness=-0.182117,Chroma=0.522234,Hue=15.480350,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Party Menu|Status PageA fallen member's portrait is tinted with this (greyed), and its mark and name use Fallen Color.
Fallen Text (FallenText)FTextNSLOCTEXT("RSEUISettings", "StatusFallen", "KO")Party Menu|Status PageThe mark on a fallen member ("KO").
Growth Button Text (GrowthButtonText)FTextNSLOCTEXT("RSEUISettings", "StatusGrowthButton", "Open growth board")Party Menu|Status PageLabel of the button to the member's Growth page.
Growth Points Color (GrowthPointsColor)FRSEUIColor(Token="Positive",Alpha=1.000000,Lightness=0.000965,Chroma=0.733272,Hue=1.974552,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Party Menu|Status PageColor of the growth points badge and button (points to spend).
Growth Points Format (GrowthPointsFormat)FTextNSLOCTEXT("RSEUISettings", "StatusGrowthPoints", "{Points} points to spend")Party Menu|Status Page"{Points} points to spend" ({Points}).
Portrait Backdrop Color (PortraitBackdropColor)FRSEUIColor(Token="Primary",Alpha=1.000000,Lightness=-0.174197,Chroma=0.275893,Hue=8.668930,Override=(R=1.000000,G=1.000000,B=1.000000,A=1.000000))Party Menu|Status PageThe plate behind a member portrait (also the whole portrait when the character has none).
Status Card Column Width (StatusCardColumnWidth)float400.000000Party Menu|Status PageWidth of the member card column.
Status Card Portrait Size (StatusCardPortraitSize)float64.000000Party Menu|Status PagePortrait size of the member cards (left) and of the selected member (right), pixels at 1080p.
Status Page Stats (StatusPageStats)TArray<FGameplayTag>(0 entries)Party Menu|Status PageStats on the Status page, in order. Empty = the menu stats (Party Menu Stats).
Status Portrait Size (StatusPortraitSize)float132.000000Party Menu|Status Page
Party Menu Page Actions (PartyMenuPageActions)TArray<FRSEPartyMenuPageAction>(4 entries)Party Menu|TabsD-148: keys that open the menu straight on a page (I = Items, J = Journal, M = Map, K = Growth by default; the same key closes it again). Add a row to give any page its own key; the actions are rebound in Options -> Controls (list them in Options -> Action Names). The actions must be mapped in the menu mapping context (Input -> Menu Mapping Context).
Party Menu Start Page (PartyMenuStartPage)ERSEPartyMenuPageStatusParty Menu|TabsD-148: the page the menu opens on with the menu key (Tab, Esc, the gamepad's Start). Not offered = the first tab.
Party Menu Tab Order (PartyMenuTabOrder)TArray<ERSEPartyMenuPage>(12 entries)Party Menu|TabsD-148: the tabs of the party menu, left to right. A page left out is not offered (its key does nothing); Growth, Map and Equipment still hide themselves when they do not apply (Classic progression, no map on the level, the grid inventory). Empty = every page in its enum order.
ATB HUD Widget Class (ATBHUDWidgetClass)TSoftClassPtr<URSEScreenWidget>NoneScreensClassic battle HUD (ATB and turn-based, D-052). Empty = the built-in themed HUD. A Widget Blueprint derived from RSEScreenWidget replaces it and receives a RSEATBHUDViewModel (docs/product/custom-ui.md).
Modal Screen Pending Grace (ModalScreenPendingGrace)float5.000000ScreensD-152, the safety net of the modal screen stacks: a widget registered as an open screen that has not been shown (not in the viewport, not built) after this long is forgotten, so a screen registered and never shown cannot block the menus and hide the HUD forever. A screen that was shown and then left the screen without closing is forgotten at once. 0 = only shown screens are checked.
Party Menu Page Widget Classes (PartyMenuPageWidgetClasses)TMap<ERSEPartyMenuPage,TSoftClassPtr<URSEScreenWidget> >(0 entries)ScreensOne page of the built-in party menu replaced by a Widget Blueprint derived from RSEScreenWidget (D-052): the menu keeps its tabs, footer and key prompts and shows the widget as the page body. The widget receives the menu's RSEPartyMenuViewModel and gets Confirm / Back / Navigate first (Back returning false closes the menu).
Party Menu Widget Class (PartyMenuWidgetClass)TSoftClassPtr<URSEScreenWidget>NoneScreensParty menu screen (D-052). Empty = the built-in themed screen. A Widget Blueprint derived from RSEScreenWidget replaces it and receives a RSEPartyMenuViewModel (docs/product/custom-ui.md).
Screen Close Input Guard (ScreenCloseInputGuard)float0.350000ScreensAfter a modal screen (menu, dialog, shop, card table...) closes, world actions (Interact, the menu key) are ignored this long, so the confirm press that closed the screen never reaches the world and reopens it.
Tactics Deployment Panel Class (TacticsDeploymentPanelClass)TSoftClassPtr<URSEScreenWidget>NoneScreensOnly the deployment panel and start confirmation of the built-in Tactics HUD (D-018): a Widget Blueprint receiving the RSETacticsHUDViewModel.
Tactics Forecast Panel Class (TacticsForecastPanelClass)TSoftClassPtr<URSEScreenWidget>NoneScreensOnly the attack forecast panel of the built-in Tactics HUD (D-033): a Widget Blueprint receiving the RSETacticsHUDViewModel.
Tactics HUD Widget Class (TacticsHUDWidgetClass)TSoftClassPtr<URSEScreenWidget>NoneScreensTactics battle HUD (D-052). Empty = the built-in themed HUD. A Widget Blueprint derived from RSEScreenWidget replaces it and receives a RSETacticsHUDViewModel (docs/product/custom-ui.md).
Banner Font Size (BannerFontSize)int3254Text
Floating Font Size (FloatingFontSize)int3226Text
Large Font Size (LargeFontSize)int3220Text
Normal Font Size (NormalFontSize)int3215Text
Small Font Size (SmallFontSize)int3214Text--- Text ---

RPG Saga Engine: UI Layouts

Class URSEUILayoutSettings (module RSE), Project Settings, Project, RPG Saga Engine. Sizes the built-in screen layouts use (P61).

SettingTypeDefaultCategoryRestartDescription
Group Spacing (GroupSpacing)float8.000000Battle HUDSpace between grouped panels (compact corner, bottom bar).
Shooter Edge Inset (ShooterEdgeInset)float18.000000Battle HUDShooter minimal: space between the panels and the screen edge.
Shooter Forecast Anchor Y (ShooterForecastAnchorY)float0.500000Battle HUDShooter minimal: height of the forecast on the right edge (0 = top, 1 = bottom).
Shooter Scrim Opacity (ShooterScrimOpacity)float0.350000Battle HUDShooter minimal: opacity of the soft dark backing behind the frameless panels (0 = text only).
Bubble Gap (BubbleGap)float8.000000DialogBubble dialog: space between the speaker's head and the bubble's tail.
Bubble Width (BubbleWidth)float560.000000DialogBubble dialog: width of the bubble (layout units, 1080p reference).
Cinematic Bottom Margin (CinematicBottomMargin)float18.000000DialogCinematic dialog: space between the line and the bottom of the screen.
Cinematic Text Width Fraction (CinematicTextWidthFraction)float0.720000DialogCinematic dialog: width share of the line.
Novel Box Width Fraction (NovelBoxWidthFraction)float0.900000DialogNovel portrait dialog: width share of the box.
Novel Portrait Inset (NovelPortraitInset)float60.000000DialogNovel portrait dialog: how far the portrait stands in from the screen's side.
Novel Portrait Size (NovelPortraitSize)FVector2D(X=420.000000,Y=600.000000)DialogNovel portrait dialog: size of the large portrait.
Side Tab Width (SideTabWidth)float210.000000Party MenuParty menu with side tabs: width of the tab column.

RPG Saga Engine: UI Style Editor

Class URSEUIStyleEditorSettings (module RSEEditor), Project Settings, Project, RPG Saga Engine. The Style Editor (P65, D-162 addendum; docs/product/ui-styles.md "Editing styles"): where its copies go, the map and the screens of "Preview in game", and the captures.

SettingTypeDefaultCategoryRestartDescription
Gallery Folder (GalleryFolder)FDirectoryPath()CaptureWhere Capture gallery saves its shots (<folder>/<StyleId>/<shot>.png). Empty = Saved/RSE/UIStyleGallery.
Thumbnail Shot (ThumbnailShot)FString01_party_menuCaptureThe shot of the gallery used as the style's thumbnail in the Studio's UI Styles page.
Project Styles Folder (ProjectStylesFolder)FDirectoryPath(set per project)DuplicateWhere "Duplicate to project" puts its copies (plugin content is read-only when the plugin is installed from Fab).
Loop Preview (bLoopPreview)boolTruePreviewRepeat the gallery while Preview in game runs (edit the style and watch the screens come round again).
Gallery Commands (GalleryCommands)TArray<FString>(29 entries)PreviewThe UI gallery: console commands run one by one in the preview game, opening the main screens in sequence. "wait <seconds>" pauses, "shot <name>" saves a screenshot with the UI (Capture gallery only; skipped by Preview in game).
Gallery Start Delay (GalleryStartDelay)float4.000000PreviewSeconds the preview game waits before the gallery starts (the map loads, the party spawns).
Preview Map (PreviewMap)TSoftObjectPtr<UWorld>/RPGSagaEngine/Examples/Maps/L_RSE_StarterExample.L_RSE_StarterExamplePreviewThe map "Preview in game" and "Capture gallery" play (an example map of the plugin with a party).
Hue Slider Range (HueSliderRange)float180.000000ToolbarRange of the toolbar's Hue slider (degrees either way).

RPG Saga Engine: UI Theme

Class URSEUIThemeSettings (module RSE), Project Settings, Project, RPG Saga Engine. The UI theme (D-032): the UI style the game uses (D-162), key prompt labels, spacing and the minimum font size.

SettingTypeDefaultCategoryRestartDescription
Accessibility (Accessibility)FRSEUIAccessibilitySettings(SafePositive=(R=0.093059,G=0.456411,B=0.814847,A=1.000000),SafeNegative=(R=0.830770,G=0.155926,B=0.006995,A=1.000000),SafeWarning=(R=0.871367,G=0.775822,B=0.05...AccessibilityColors of the accessibility transforms (color vision remap, high contrast), D-164.
Minimum Font Size (MinimumFontSize)int3214FontsNo text of the game UI is drawn smaller than this, whatever a role or a screen asks for: small labels (costs, captions, key caps) stay readable at 1280x800 (Steam Deck, D-037), where the UI scale is 0.9.
Back Action Text (BackActionText)FTextNSLOCTEXT("RSEUITheme", "ActionBack", "Back")Key Prompts
Close Action Text (CloseActionText)FTextNSLOCTEXT("RSEUITheme", "ActionClose", "Close")Key Prompts
Confirm Action Text (ConfirmActionText)FTextNSLOCTEXT("RSEUITheme", "ActionConfirm", "Confirm")Key PromptsGeneric action names for prompts.
Key Labels (KeyLabels)TMap<FKey,FText>(47 entries)Key PromptsShort key labels in prompts ("A" instead of "Gamepad Face Button Bottom", arrows for arrow keys). Gamepad keys here are the Xbox label set. Missing keys use the engine name.
Key Separator (KeySeparator)FTextNSLOCTEXT("RSEUITheme", "KeySeparator", "/")Key PromptsBetween the keys of one prompt (keyboard and gamepad).
Page Action Text (PageActionText)FTextNSLOCTEXT("RSEUITheme", "ActionPage", "Page")Key Prompts
Select Action Text (SelectActionText)FTextNSLOCTEXT("RSEUITheme", "ActionSelect", "Select")Key Prompts
Play Station Key Labels (PlayStationKeyLabels)TMap<FKey,FText>(14 entries)Key Prompts|Gamepad Label SetsPlayStation label set: gamepad labels that differ from KeyLabels (face buttons, shoulders, triggers, Create / Options).
Steam Deck Key Labels (SteamDeckKeyLabels)TMap<FKey,FText>(10 entries)Key Prompts|Gamepad Label SetsSteam Deck label set: gamepad labels that differ from KeyLabels (L1 / R1, L2 / R2, View / Menu).
Body (Body)FRSEUIFontStyle(Typeface="Regular",Size=17,OutlineColor=(R=0.000000,G=0.000000,B=0.000000,A=0.850000),Color=(R=0.950000,G=0.930000,B=0.880000,A=1.000000),bShadow=True)Legacy|Fonts
Caption (Caption)FRSEUIFontStyle(Typeface="Regular",Size=14,LetterSpacing=20,OutlineColor=(R=0.000000,G=0.000000,B=0.000000,A=0.850000),Color=(R=0.620000,G=0.660000,B=0.760000,A=1.000000),bSha...Legacy|Fonts
Display (Display)FRSEUIFontStyle(Typeface="Black",Size=76,LetterSpacing=180,OutlineSize=2,OutlineColor=(R=0.050000,G=0.030000,B=0.000000,A=0.900000),Color=(R=1.000000,G=0.700000,B=0.260000,A=1...Legacy|Fonts--- Fonts ---
Heading (Heading)FRSEUIFontStyle(Typeface="Bold",Size=15,LetterSpacing=140,OutlineColor=(R=0.000000,G=0.000000,B=0.000000,A=0.850000),Color=(R=0.620000,G=0.660000,B=0.760000,A=1.000000),bShado...Legacy|Fonts
Key Cap (KeyCap)FRSEUIFontStyle(Typeface="Bold",Size=14,LetterSpacing=40,OutlineColor=(R=0.000000,G=0.000000,B=0.000000,A=0.850000),Color=(R=0.020000,G=0.025000,B=0.050000,A=1.000000))Legacy|Fonts
Label (Label)FRSEUIFontStyle(Typeface="Medium",Size=17,LetterSpacing=20,OutlineColor=(R=0.000000,G=0.000000,B=0.000000,A=0.850000),Color=(R=0.950000,G=0.930000,B=0.880000,A=1.000000),bShad...Legacy|Fonts
Numeric (Numeric)FRSEUIFontStyle(Typeface="Bold",Size=16,LetterSpacing=30,OutlineColor=(R=0.000000,G=0.000000,B=0.000000,A=0.850000),Color=(R=0.950000,G=0.930000,B=0.880000,A=1.000000),bShadow...Legacy|Fonts
Text Shadow Color (TextShadowColor)FLinearColor(R=0.000000,G=0.000000,B=0.000000,A=0.750000)Legacy|Fonts
Text Shadow Offset (TextShadowOffset)FVector2D(X=1.000000,Y=1.500000)Legacy|FontsDrop shadow of texts whose role has bShadow.
Title (Title)FRSEUIFontStyle(Typeface="Bold",Size=26,LetterSpacing=120,OutlineColor=(R=0.000000,G=0.000000,B=0.000000,A=0.850000),Color=(R=1.000000,G=0.700000,B=0.260000,A=1.000000),bShado...Legacy|Fonts
Key Cap Fill (KeyCapFill)FLinearColor(R=0.850000,G=0.860000,B=0.900000,A=0.950000)Legacy|Key Prompts--- Key prompts ---
Key Cap Text Color (KeyCapTextColor)FLinearColor(R=0.020000,G=0.025000,B=0.050000,A=1.000000)Legacy|Key Prompts
Key Hint Text Color (KeyHintTextColor)FLinearColor(R=0.620000,G=0.660000,B=0.760000,A=1.000000)Legacy|Key Prompts
Backdrop Color (BackdropColor)FLinearColor(R=0.000000,G=0.000000,B=0.010000,A=0.720000)Legacy|PanelsScreen dim behind modal screens (save, album).
Divider Color (DividerColor)FLinearColor(R=0.450000,G=0.520000,B=0.750000,A=0.350000)Legacy|PanelsThin separator lines.
Divider Thickness (DividerThickness)float1.000000Legacy|Panels
Hud Panel (HudPanel)FRSEUIPanelStyle(FillTop=(R=0.020000,G=0.030000,B=0.090000,A=0.780000),FillBottom=(R=0.005000,G=0.008000,B=0.025000,A=0.700000),OutlineColor=(R=0.500000,G=0.580000,B=0.800000,A...Legacy|Panels
Inset Panel (InsetPanel)FRSEUIPanelStyle(FillTop=(R=0.000000,G=0.000000,B=0.010000,A=0.350000),FillBottom=(R=0.000000,G=0.000000,B=0.010000,A=0.500000),OutlineColor=(R=0.400000,G=0.470000,B=0.700000,A...Legacy|Panels
Plain Panel Corner Radius (PlainPanelCornerRadius)float6.000000Legacy|PanelsCorner radius of plain panels (MakePanel with a single color).
Plain Panel Outline Color (PlainPanelOutlineColor)FLinearColor(R=0.420000,G=0.500000,B=0.720000,A=0.450000)Legacy|PanelsOutline of plain panels.
Plain Panel Outline Width (PlainPanelOutlineWidth)float1.000000Legacy|Panels
Plate Panel (PlatePanel)FRSEUIPanelStyle(FillTop=(R=0.070000,G=0.100000,B=0.250000,A=0.970000),FillBottom=(R=0.020000,G=0.030000,B=0.090000,A=0.970000),OutlineColor=(R=0.720000,G=0.600000,B=0.300000,A...Legacy|Panels
Window Panel (WindowPanel)FRSEUIPanelStyle(FillTop=(R=0.030000,G=0.050000,B=0.140000,A=0.950000),FillBottom=(R=0.006000,G=0.008000,B=0.030000,A=0.960000),OutlineColor=(R=0.440000,G=0.520000,B=0.760000,A...Legacy|Panels--- Panels ---
Button Fill (ButtonFill)FLinearColor(R=0.100000,G=0.140000,B=0.300000,A=0.950000)Legacy|RowsButtons (card table, album).
Button Hover Fill (ButtonHoverFill)FLinearColor(R=0.180000,G=0.260000,B=0.550000,A=1.000000)Legacy|Rows
Chip Fill Opacity (ChipFillOpacity)float0.200000Legacy|RowsChips and badges (D-073: "LEVEL UP!", new abilities, rare drops, elements): a small rounded tag tinted with the color it is given. Fill and outline are that color at these opacities.
Chip Outline Opacity (ChipOutlineOpacity)float0.750000Legacy|Rows
Chip Padding (ChipPadding)FMargin(Left=8.000000,Top=1.000000,Right=8.000000,Bottom=1.000000)Legacy|Rows
Rows (Rows)FRSEUIRowStyle(SelectedFill=(R=0.140000,G=0.240000,B=0.550000,A=0.680000),ActiveFill=(R=0.350000,G=0.260000,B=0.060000,A=0.550000),HoverFill=(R=1.000000,G=1.000000,B=1.000000...Legacy|Rows--- Rows ---
Tab Fill (TabFill)FLinearColor(R=1.000000,G=1.000000,B=1.000000,A=0.040000)Legacy|RowsTabs (party menu pages, item categories, journal tabs).
Tab Selected Fill (TabSelectedFill)FLinearColor(R=0.140000,G=0.240000,B=0.550000,A=0.950000)Legacy|Rows
Open Seconds (OpenSeconds)float0.180000Legacy|TransitionsPanels fade in and rise into place when a screen opens. 0 = no transition.
Open Slide (OpenSlide)float14.000000Legacy|TransitionsDistance a panel rises while it opens.
Selection Seconds (SelectionSeconds)float0.120000Legacy|TransitionsA newly selected row slides in from the left over this time. 0 = none.
Selection Slide (SelectionSlide)float6.000000Legacy|Transitions
Spacing (Spacing)FRSEUISpacing(XS=2.000000,S=4.000000,M=8.000000,L=14.000000,XL=24.000000)Spacing--- Spacing ---
Background Drift Seconds (BackgroundDriftSeconds)float14.000000TransitionsPeriod of the title screen's slow background drift.
Pulse Seconds (PulseSeconds)float1.600000TransitionsPeriod of the "press any key" pulse.
Player Can Choose Style (bPlayerCanChooseStyle)boolTrueUI StyleThe player may pick a style in the options (when there is more than one).
Default Style (DefaultStyle)TSoftObjectPtr<URSEUIStyle>/RPGSagaEngine/UI/Styles/DA_UIStyle_Classic.DA_UIStyle_ClassicUI StyleThe game's UI style. Empty = a style made from the Legacy settings below (the look from before UI styles).
Frame Material (FrameMaterial)TSoftObjectPtr<UMaterialInterface>/RPGSagaEngine/UI/Materials/M_RSE_UIFrame.M_RSE_UIFrameUI StyleThe procedural frame material (M_RSE_UIFrame). Empty or not loadable = frames are drawn as rounded boxes.
Selectable Styles (SelectableStyles)TArray<TSoftObjectPtr<URSEUIStyle> >(10 entries)UI StyleStyles the player can pick in the options. Empty = only the default style.

RPG Saga Engine: Visual Editors

Class URSEGraphEditorSettings (module RSEEditor), Project Settings, Project, RPG Saga Engine. The visual dialog and quest editors (D-061, docs/design/editors.md): layout spacing, node colors and previews.

SettingTypeDefaultCategoryRestartDescription
Comment Color (CommentColor)FLinearColor(R=1.000000,G=1.000000,B=1.000000,A=0.900000)ColorsNew comment boxes.
Default Node Color (DefaultNodeColor)FLinearColor(R=0.250000,G=0.250000,B=0.250000,A=1.000000)Colors
Dialog Node Colors (DialogNodeColors)TMap<TSoftClassPtr<URSEDialogNode> ,FLinearColor>(7 entries)ColorsTitle color of dialog node types. A type not listed (e.g. a custom node class) uses Default Node Color.
Quest Fail Rules Color (QuestFailRulesColor)FLinearColor(R=0.500000,G=0.300000,B=0.050000,A=1.000000)ColorsThe quest's failure rules node.
Quest Failure Color (QuestFailureColor)FLinearColor(R=0.650000,G=0.150000,B=0.120000,A=1.000000)Colors
Quest Stage Color (QuestStageColor)FLinearColor(R=0.120000,G=0.300000,B=0.600000,A=1.000000)Colors
Quest Success Color (QuestSuccessColor)FLinearColor(R=0.150000,G=0.550000,B=0.200000,A=1.000000)Colors
Start Node Color (StartNodeColor)FLinearColor(R=0.100000,G=0.450000,B=0.100000,A=1.000000)ColorsStart node of both editors (dialog entry, quest start).
Column Spacing (ColumnSpacing)float420.000000LayoutHorizontal distance between the columns of an automatic layout (nodes of the same depth from the start).
Quest Row Scale (QuestRowScale)float1.600000LayoutExtra rows between the nodes of a quest stage (stages are taller: they list their objectives).
Row Spacing (RowSpacing)float190.000000LayoutVertical distance between the rows of an automatic layout.
Pin Label Max Chars (PinLabelMaxChars)int3236NodesLongest pin label (choice option text, condition summary).
Preview Max Chars (PreviewMaxChars)int32110NodesLongest text preview shown inside a node (line text, journal entry); longer texts end with "...".
Start PIEFor Preview (bStartPIEForPreview)boolTruePreviewPlay from Here: start Play In Editor when no session runs (off = the button needs a running PIE session).
Preview Start Delay (PreviewStartDelay)float0.500000PreviewSeconds to wait after PIE starts before the preview dialog opens (the game mode and HUD need a moment).
Validate on Change (bValidateOnChange)boolTrueValidationCheck the asset again after every change and show the problems on the nodes (off = only with the Validate button).

RPG Saga Engine: Visual Style

Class URSEVisualStyleSettings (module RSE), Project Settings, Project, RPG Saga Engine. Visual styles (D-037): the default style of the game, the style parameter collection, the order of the presets for cycling and the developer switch (hotkey + toast).

SettingTypeDefaultCategoryRestartDescription
Show Toast (bShowToast)boolTrueDeveloperShows a toast with the style's name when it changes.
Cycle Keys (CycleKeys)TArray<FKey>(1 entries)DeveloperKeys that cycle the presets in development builds (Shift = previous). Empty = no hotkey.
Toast Anchor (ToastAnchor)FVector2D(X=0.500000,Y=0.060000)DeveloperNormalized screen point of the toast.
Toast Seconds (ToastSeconds)float2.000000Developer
Toast Widget Class (ToastWidgetClass)TSoftClassPtr<URSEScreenWidget>NoneDeveloperVisual style toast (D-052). Empty = the built-in screen. A Widget Blueprint derived from RSEScreenWidget replaces it and receives a RSENoticeViewModel (docs/product/custom-ui.md).
Toast ZOrder (ToastZOrder)int32900Developer
Area Check Interval (AreaCheckInterval)float0.250000RenderingHow often the player's position is checked against area volumes that override the style.
Parameter Collection (ParameterCollection)TSoftObjectPtr<UMaterialParameterCollection>/RPGSagaEngine/Visual/MPC_RSEStyle.MPC_RSEStyleRenderingMaterial parameter collection the styles write to (ScalarParameters / VectorParameters of a style). Every parameter not set by the active style is reset to the collection's default. Empty = styles set no parameters.
Post Process Priority (PostProcessPriority)float100.000000RenderingPriority of the style's unbound post-process layer. Level volumes with a higher priority still win over it (a dark cave keeps its grading); keep it above the levels' global volumes so the style is visible everywhere.
Allow User Choice (bAllowUserChoice)boolTrueStylesWhether the player's choice is honored (off = only area overrides and the default).
Cycle Styles (CycleStyles)TArray<TSoftObjectPtr<URSEVisualStyle> >(4 entries)StylesOrder of the presets for RSE.Visual.Style Next and the dev hotkey. Empty = every RSEVisualStyle asset, by name.
Default Style (DefaultStyle)TSoftObjectPtr<URSEVisualStyle>/RPGSagaEngine/Data/Visual/DA_Style_Realistic.DA_Style_RealisticStylesStyle of a new player (no saved choice) outside every area override. Empty = no style (the levels' own look).

RPG Saga Engine: Weapon Hold

Class URSEWeaponHoldSettings (module RSE), Project Settings, Project, RPG Saga Engine. How weapons are held (D-185, docs/product/weapons.md): Project Settings -> RPG Saga Engine -> Weapon Hold.

SettingTypeDefaultCategoryRestartDescription
Body Muzzle Socket Patterns (BodyMuzzleSocketPatterns)TArray<FString>(4 entries)Body Mesh WeaponsD-185 addendum 2: socket or bone name patterns of a gun's muzzle on a body mesh that includes its weapon (hero-shooter style characters, leader-pose weapon parts). Wildcards * and ?, case-insensitive; a plain word matches when the name contains it.
Body Tip Socket Patterns (BodyTipSocketPatterns)TArray<FString>(6 entries)Body Mesh WeaponsSocket or bone name patterns of a melee weapon's tip on a body mesh that includes its weapon.
Fit Search Folders (FitSearchFolders)TArray<FString>(1 entries)Fit WeaponWhere Fit Weapon's Apply to Category looks for looks, items, weapon presentations and skeletons (long package paths).
Fit Weapon Min Confidence (FitWeaponMinConfidence)float0.500000Fit WeaponThe Fit Weapon tab lists meshes the weapon library classifies as weapons with at least this confidence (plus every mesh a weapon presentation uses).
Max Grip Offset (MaxGripOffset)float10.000000Fit WeaponValidate: the weapon's grip must sit within this distance of the palm (else the weapon is reported as offset).
Weapon Socket Angle Tolerance (WeaponSocketAngleTolerance)float3.000000Fit WeaponApply to Category: ... and within this angle.
Weapon Socket Tolerance (WeaponSocketTolerance)float1.000000Fit WeaponApply to Category: a weapon whose pivot would sit within this distance of its category socket's needs no socket of its own.
Generated Holds (GeneratedHolds)TArray<FRSEGeneratedHoldRule>(7 entries)Generated HoldsHow each hold type is generated from a skeleton's reference pose (skeletons without a profile, Generate Holds).
Enabled (bEnabled)boolTrueHoldWeapon parts of looks and worn weapon items attach through the hold: the hand socket of the hold type, the weapon's grip, then the part's own transform as a fine offset. Off = parts attach with their raw transform (before D-185). CVar: RSE.Weapons.Hold.
Fallback Hold Type (FallbackHoldType)ERSEWeaponHoldTypeOneHandMeleeHoldHold of weapons whose presentation and kind say nothing (a weapon part without a presentation).
Profiles (Profiles)TArray<TSoftObjectPtr<URSEWeaponHoldProfile> >(0 entries)HoldHold profiles of the project's skeletons (a look without its own uses the one whose Skeleton matches its body).
Procedural Recoil (bProceduralRecoil)boolTrueRecoilD-185 addendum 2: guns without a fire clip kick with a procedural recoil (spine and arm pitch). CVar: RSE.Weapons.Recoil.
Recoil Arm Bone Names (RecoilArmBoneNames)TArray<FString>(7 entries)RecoilNames of the weapon arm bone the recoil pitches up (the right upper arm), tried in order.
Recoil Defaults (RecoilDefaults)TArray<FRSEWeaponRecoilDefault>(3 entries)RecoilThe kick per hold type (a hold profile may override it). Hold types without an entry use the recoil struct's defaults.
Recoil Spine Bone Names (RecoilSpineBoneNames)TArray<FString>(6 entries)RecoilNames of the bone the recoil pitches back (the upper spine), tried in order.
Use Skeleton Sockets (bUseSkeletonSockets)boolTrueSkeleton SocketsSkeleton sockets drive the right hand (D-185 addendum, Tools -> RPG Saga Engine -> Fit Weapon): a skeleton that has the socket of a weapon's hold type (Hold Sockets), or that weapon's own socket (Weapon Socket Prefix + mesh name), holds the weapon with its PIVOT on that socket, exactly as the Skeleton Editor previews it. Without one, the profile / generated hold applies. CVar: RSE.Weapons.Hold.SkeletonSockets.
Hold Sockets (HoldSockets)TArray<FRSEHoldSocketName>(7 entries)Skeleton SocketsThe socket name of each hold type on the skeletons (parented to the hand bone of the hold: bows in the left hand).
Weapon Socket Prefix (WeaponSocketPrefix)FStringRSE_W_Skeleton SocketsPrefix of a weapon's own socket on a skeleton (prefix + the weapon mesh's name, e.g. RSE_W_SK_AR4): for weapons whose pivot sits elsewhere than their category's. It wins over the hold type's socket. Apply to Category writes them.
Index Finger Words (IndexFingerWords)TArray<FString>(2 entries)Skeletons
Left Hand Bone Names (LeftHandBoneNames)TArray<FString>(8 entries)Skeletons
Metacarpal Words (MetacarpalWords)TArray<FString>(1 entries)SkeletonsWords of metacarpal bones (they start at the wrist, not at the knuckles): skipped when the knuckles are measured.
Middle Finger Words (MiddleFingerWords)TArray<FString>(2 entries)SkeletonsFinger bone words (children of the hand) used to generate holds: the middle finger, the index, the pinky, the thumb.
Pinky Finger Words (PinkyFingerWords)TArray<FString>(4 entries)Skeletons
Right Hand Bone Names (RightHandBoneNames)TArray<FString>(8 entries)SkeletonsNames of the right hand bone, tried in order (exact, case-insensitive, then contained).
Thumb Words (ThumbWords)TArray<FString>(1 entries)Skeletons
Upper Body Bone Names (UpperBodyBoneNames)TArray<FString>(5 entries)SkeletonsNames of the first upper body bone (stance overlays, procedural recoil).
Default Ready Mode (DefaultReadyMode)ERSEStanceReadyModeUpperBodyStanceD-185 addendum 2: how stance Ready clips play for looks without a hold profile (profiles have their own Default Ready Mode).
Gun Reject Clip Words (GunRejectClipWords)TArray<FString>(20 entries)StanceWords that keep a clip from playing as a gun's shot (melee swings mis-sorted as attacks): matched against the clip name's words like Idle Reject Words. A gun without a fitting fire clip kicks with the procedural recoil instead.
Stance Blend Time (StanceBlendTime)float0.200000StanceSeconds the upper body stance blends in and out (it fades while attacks, hits and knock-outs play).
Idle Reject Words (IdleRejectWords)TArray<FString>(24 entries)Stance IdleWords that make a clip unfit as a standing stance idle (prone, crouch, death, sit...): matched against the words of the clip's name (split on _ - spaces, digits and capitals; a word matches when it starts with one of these). The Fit Weapon preview, the Workbench and the character pack idle mapping skip such clips; without a fitting idle, the reference pose shows.
Support Hand IK (bSupportHandIK)boolTrueSupport Hand IKThe support hand reaches the weapon (two-bone IK) for holds that ask for it. CVar: RSE.Weapons.SupportHandIK.
Support Hand Rotation (bSupportHandRotation)boolTrueSupport Hand IKD-185 addendum 2: the support hand also turns to the weapon's LeftHand socket rotation (the Hand Rotation node after the Two Bone IK), so the fingers wrap under the handguard. Off = the IK places the wrist only. CVar: RSE.Weapons.SupportHandRotation.
Support Hand Rotations (SupportHandRotations)TArray<FRSESupportHandRotation>(2 entries)Support Hand IKThe support hand's orientation per hold type, relative to the weapon's LeftHand socket (a hold profile may override it).
Min Barrel Forward Dot (MinBarrelForwardDot)float0.700000ValidationValidation: the barrel must point forward in the ready pose (dot of grip-to-muzzle with the character's forward at least this).
Support Hand Tolerance (SupportHandTolerance)float8.000000ValidationValidation: the support hand must end within this distance of the weapon's support point (Fit Weapon's Validate checks it in the stance idle).
Grip Heuristics (GripHeuristics)TArray<FRSEGripHeuristic>(7 entries)Weapon GripsWhere grips are measured on meshes without sockets or a stored grip, per hold type.
Grip Socket Words (GripSocketWords)TArray<FString>(3 entries)Weapon GripsSocket or bone words of a weapon's grip (where the palm holds it; X forward, Z up).
Support Socket Words (SupportSocketWords)TArray<FString>(5 entries)Weapon GripsSocket or bone words of a weapon's support point (where the other hand goes).
Tip Socket Words (TipSocketWords)TArray<FString>(4 entries)Weapon GripsSocket or bone words of a muzzle or blade tip.
Weapon Grip Socket (WeaponGripSocket)FNameGripWeapon SocketsSocket on a weapon mesh where the right hand holds it (X = barrel / blade forward, Z = top / edge). Wins over stored and measured grips.
Weapon Muzzle Socket (WeaponMuzzleSocket)FNameMuzzleWeapon SocketsSocket on a gun where shots leave.
Weapon Support Socket (WeaponSupportSocket)FNameLeftHandWeapon SocketsSocket on a weapon mesh where the support (left) hand goes: the support hand IK target. Move it in the mesh editor to tweak the left hand.
Weapon Tip Socket (WeaponTipSocket)FNameTipWeapon SocketsSocket on a melee weapon at its tip (blade or head).

RPG Saga Engine: Weapon Library

Class URSEWeaponLibrarySettings (module RSEEditor), Project Settings, Project, RPG Saga Engine. Weapon Library settings (D-184): how weapon meshes are classified and where their presentations are written.

SettingTypeDefaultCategoryRestartDescription
Anim Weapons (AnimWeapons)TArray<FRSEWeaponKindAnimTag>(12 entries)AnimationsThe library's weapon tag of each kind (its fire, aim, reload and attack clips are picked by it).
Accessory Words (AccessoryWords)TArray<FString>(18 entries)ClassificationWords of parts and accessories that are not weapons (magazines, scopes, holsters, ammo).
Shape Overrides Name (bShapeOverridesName)boolTrueClassificationD-185 addendum 2: a mesh named like a melee weapon whose SHAPE is a handgun (a grip hanging below a short barrel, flat sideways) is a Pistol (pack names like "..._Mace" for a revolver). Off = the name alone decides.
Folder Weight (FolderWeight)float0.500000Classification
Gun Outline Ratio (GunOutlineRatio)float2.500000ClassificationShape check: how much more the bottom must step between the two ends than the top (a gun's grip hangs below a level slide).
Max Handgun Length (MaxHandgunLength)float45.000000ClassificationShape check: the longest a handgun can be (cm); longer gun shapes stay what their name says.
Max Handgun Width Ratio (MaxHandgunWidthRatio)float0.550000ClassificationShape check: a handgun is at most this wide relative to its height (flat sideways; a mace head is round).
Review Threshold (ReviewThreshold)float0.500000ClassificationBelow this confidence the classification is reported for review (it is still used).
Rules (Rules)TArray<FRSEWeaponWordRule>(15 entries)ClassificationName words per weapon kind (name words count fully, folder words at Folder Weight).
Shape Check Kinds (ShapeCheckKinds)TArray<ERSEWeaponKind>(2 entries)ClassificationShape check: the name kinds the shape may overrule (a "mace" or an unnamed mesh shaped like a revolver). Blades and axes are left out: a hatchet's head steps down like a pistol grip.
Output Folder (OutputFolder)FDirectoryPath()OutputFolder of the weapon presentations made for meshes (empty = the Animation & FX Library folder + /Weapons). Project content only.
Muzzle Socket Words (MuzzleSocketWords)TArray<FString>(4 entries)SocketsSocket name words of a muzzle (the first socket whose name holds one is the muzzle).
Shell Socket Words (ShellSocketWords)TArray<FString>(4 entries)SocketsSocket name words of a shell ejection port.
Hold Anim Weapons (HoldAnimWeapons)TArray<FRSEHoldAnimWeapons>(7 entries)Stance SuggestionsD-185 addendum 2: the library weapon tags of each hold type (Suggest Stance Animations picks their clips).
Max Swing Variants (MaxSwingVariants)int323Stance SuggestionsHow many clips a swing slot takes (the first is the main clip, the others its variants).
Stance Reject Flags (StanceRejectFlags)FGameplayTagContainer(GameplayTags=((TagName="AnimLibrary.Flag.Crouch"),(TagName="AnimLibrary.Flag.Air")))Stance SuggestionsLibrary flags that keep a clip out of every stance slot (crouched, airborne).
Stance Role Categories (StanceRoleCategories)TArray<FRSEStanceRoleCategory>(7 entries)Stance SuggestionsThe library categories that fill each stance slot.

RPG Saga Engine: Weapon Presentation

Class URSEWeaponPresentationSettings (module RSE), Project Settings, Project, RPG Saga Engine. How weapons look in battles (D-184, docs/product/weapons.md): the presentations per weapon kind and equipment type, the defaults for units without a weapon of their own, the surfaces of units and of the world, and the shared tracer look.

SettingTypeDefaultCategoryRestartDescription
Decal Lifetime (DecalLifetime)float8.000000ShotsSeconds a world decal (bullet hole, scorch) stays.
Default Tracer Material (DefaultTracerMaterial)TSoftObjectPtr<UMaterialInterface>/RPGSagaEngine/Visual/Feel/M_RSE_FXGlow.M_RSE_FXGlowShotsMaterial of tracers without their own (its "Color" and "Intensity" parameters are set).
Default Tracer Mesh (DefaultTracerMesh)TSoftObjectPtr<UStaticMesh>/RPGSagaEngine/Visual/Weapons/SM_RSE_TracerStreak.SM_RSE_TracerStreakShotsMesh of tracers and projectiles without their own (a glowing streak).
Max Tracers Per Attack (MaxTracersPerAttack)int3224ShotsMost tracers one attack draws (bursts times pellets; performance cap on low-end hardware).
Tracer Intensity (TracerIntensity)float8.000000ShotsBrightness given to the tracer material's "Intensity".
Unarmed Shot Anchor (UnarmedShotAnchor)FGameplayTag(TagName="Appearance.Anchor.Chest")ShotsD-185 addendum 2: where units that hold no gun fire ranged attacks from (the chest or a hand; a look's Unarmed Shot Anchor wins). Units holding a gun or a bow fire from its muzzle.
Default Unit Surface (DefaultUnitSurface)FGameplayTag(TagName="Surface.Flesh")SurfacesThe surface of units (unless their actor tags or the character's Personal Traits name a Surface.* tag). Blood-free by default.
Default World Surface (DefaultWorldSurface)FGameplayTag(TagName="Surface.Stone")SurfacesThe surface of world hits whose physical material has no entry below.
Physical Surfaces (PhysicalSurfaces)TArray<FRSEPhysicalSurfaceTag>(0 entries)Surfaces
Approach Defaults (bApproachDefaults)boolTrueWeaponsUnits with no weapon presentation (monsters, placeholder units) still show a swing or a shot: melee attacks use Default Melee, ranged attacks Default Ranged. Off = they keep the plain procedural pose.
Enabled (bEnabled)boolTrueWeaponsAttacks show their weapon (animations, flashes, tracers, trails, impacts) in timelines built by default and in Weapon Attack cues.
Default Melee (DefaultMelee)TSoftObjectPtr<URSEWeaponPresentation>/RPGSagaEngine/Data/Weapons/DA_WeaponPresentation_DefaultMelee.DA_WeaponPresentation_DefaultMeleeWeapons
Default Ranged (DefaultRanged)TSoftObjectPtr<URSEWeaponPresentation>/RPGSagaEngine/Data/Weapons/DA_WeaponPresentation_DefaultRanged.DA_WeaponPresentation_DefaultRangedWeapons
Equipment Type Kinds (EquipmentTypeKinds)TArray<FRSEEquipmentTypeWeaponKind>(7 entries)WeaponsThe weapon kind of equipment types (items without a presentation of their own).
Kind Presentations (KindPresentations)TArray<FRSEWeaponKindPresentation>(13 entries)WeaponsThe presentation of each weapon kind (an item without its own uses its kind's).

RPG Saga Engine: Weather

Class URSEWeatherSettings (module RSECore), Project Settings, Project, RPG Saga Engine. The weather (D-101): the weather types, the default weather table, transitions.

SettingTypeDefaultCategoryRestartDescription
Weather Enabled (bWeatherEnabled)boolTrueWeatherThe weather changes on its own (off: only effects and commands change it).
Default Table (DefaultTable)TSoftObjectPtr<URSEWeatherTableData>/RPGSagaEngine/Data/Weather/DA_WeatherTable_Temperate.DA_WeatherTable_TemperateWeatherTable of levels that name none (per level: the Time of Day actor or a weather volume).
Default Transition Seconds (DefaultTransitionSeconds)float30.000000WeatherTransition of Set Weather when neither the effect nor the weather type gives one.
Default Weather (DefaultWeather)FGameplayTag(TagName="Weather.Clear")WeatherWeather of a new game when no table gives one.
Seed (Seed)int320WeatherSeed of the weather rolls (0 = a new random seed for each new game).
Weather Types (WeatherTypes)TArray<TSoftObjectPtr<URSEWeatherTypeData> >(6 entries)WeatherEvery weather type of the game (a tag not listed here cannot be set).

RPG Saga Engine: Weather Visuals

Class URSEWeatherVisualSettings (module RSE), Project Settings, Project, RPG Saga Engine. Weather presentation (D-101): precipitation around the camera, ground wetness and snow, wind, lightning and thunder, weather sounds, where weather is hidden.

SettingTypeDefaultCategoryRestartDescription
Weather Darkness Kept (WeatherDarknessKept)float0.200000ExposureShare of the sunlight a weather takes away (its Sun Light) that eye adaptation does not give back, by day. 0 = the camera adapts fully (a noon storm looks almost as bright as a clear day, washed out and white); 1 = no adaptation.
Drying Rate (DryingRate)float0.010000GroundDrying per second toward a drier weather.
Snow Melt Rate (SnowMeltRate)float0.008000Ground
Snow Settle Rate (SnowSettleRate)float0.020000Ground
Wetting Rate (WettingRate)float0.050000GroundGround wetness per second toward a wetter weather (0..1 a second).
Flash Color (FlashColor)FLinearColor(R=0.750000,G=0.820000,B=1.000000,A=1.000000)Lightning
Flash Exposure (FlashExposure)float0.150000LightningExposure added at the peak of a flash (EV).
Flash Light Intensity (FlashLightIntensity)float2.500000LightningLightning flash brightness of the sky light and the key light (x the weather's Flash Intensity). D-104: 2.5 (was 30, which lit a storm like a sunny noon for the length of a strike).
Flash Seconds (FlashSeconds)float0.600000LightningLength of a strike (two quick flickers).
Flash Sky Brightness (FlashSkyBrightness)float1.500000LightningHow much a flash brightens the sky itself (the atmosphere's luminance: 1 + Flash x this).
Covered Sound Volume (CoveredSoundVolume)float0.450000OcclusionWeather sounds under a roof (0..1).
Occlusion Channel (OcclusionChannel)TEnumAsByte<ECollisionChannel>ECC_VisibilityOcclusion
Occlusion Check Interval (OcclusionCheckInterval)float0.250000OcclusionHow often the camera checks for a roof or a no-weather volume.
Occlusion Trace Distance (OcclusionTraceDistance)float3000.000000OcclusionA roof within this height above the camera hides the rain (0 = volumes only).
Full Particles From (FullParticlesFrom)int322PrecipitationEffects quality below which the weather types' Particles Low are used (Low 0, Medium 1, High 2, Epic 3).
Precipitation Fade Seconds (PrecipitationFadeSeconds)float1.500000PrecipitationPrecipitation fades in / out over this time (weather changes, going under a roof).
Sound Fade Seconds (SoundFadeSeconds)float2.000000SoundWeather sounds fade (seconds).
Wind Direction (WindDirection)FVector2D(X=1.000000,Y=0.350000)WindDirection the wind blows toward (world X / Y).

RPG Saga Engine: Wizards

Class URSEWizardSettings (module RSEEditor), Project Settings, Project, RPG Saga Engine. Defaults of the "Create New" wizards and of the New RPG Project wizard (D-061, docs/design/editors.md).

SettingTypeDefaultCategoryRestartDescription
Ability Templates (AbilityTemplates)TArray<FRSEWizardAbilityTemplate>(18 entries)AbilityTemplates of the Ability wizard (and of the Item wizard's use ability).
Enemy Character Template (EnemyCharacterTemplate)TSoftObjectPtr<URSECharacterData>(set per project)CharacterTemplate of an enemy (AI profile, loot, bestiary fields).
Party Character Template (PartyCharacterTemplate)TSoftObjectPtr<URSECharacterData>(set per project)CharacterTemplate of a party character (main or secondary).
Blank Class Stats (BlankClassStats)TMap<FGameplayTag,FRSEStatGrowth>(11 entries)ClassStat growth of a blank class (no template). Must give MaxHP, Speed and Action Points a Base above 0.
Class Tag Root (ClassTagRoot)FStringClassClassParent of new class tags: typed in the Class wizard, or made by the Studio for a class made from a hero archetype ("Class" -> Class.Paladin, D-136).
Class Tag Source (ClassTagSource)FStringFF_Characters.iniClassTag file of the project (Config/Tags/<file>) new class tags are written to. Must not be the name of a plugin's tag file (the plugin's own are RSE_Characters.ini, RSE_Abilities.ini...): wizards never write into plugins (D-136).
Class Template (ClassTemplate)TSoftObjectPtr<URSEClassData>NoneClassClass copied by the Class wizard (empty = a blank class with the stats below).
Default Speaker (DefaultSpeaker)TSoftObjectPtr<URSESpeakerData>NoneDialogSpeaker of the first line (empty = narrator).
Dialog End Node Id (DialogEndNodeId)FNameendDialog
Dialog Entry Node Id (DialogEntryNodeId)FNamestartDialog--- Dialog ---
Default Battle Mode (DefaultBattleMode)FGameplayTag(TagName="Battle.Mode.Tactics")Encounter--- Encounter ---
Default Enemies (DefaultEnemies)TArray<TSoftObjectPtr<URSECharacterData> >(2 entries)EncounterEnemies pre-filled in a new encounter.
Deployment Step (DeploymentStep)FRSEGridCoord(X=1)Encounter
Deployment Tile Count (DeploymentTileCount)int326Encounter
Enemy Step (EnemyStep)FRSEGridCoord(X=1)Encounter
Enemy Team (EnemyTeam)FGameplayTag(TagName="Team.Enemy")Encounter
First Deployment Coord (FirstDeploymentCoord)FRSEGridCoord(X=4,Y=1)EncounterTactics: first deployment tile of the player; the next ones follow DeploymentStep.
First Enemy Coord (FirstEnemyCoord)FRSEGridCoord(X=4,Y=9)EncounterTactics: tile of the first enemy; the next ones follow EnemyStep.
Player Team (PlayerTeam)FGameplayTag(TagName="Team.Player")Encounter
Open After Create (bOpenAfterCreate)boolTrueGeneralDefault of the wizards' "Open after create" box.
Register Folders with Asset Manager (bRegisterFoldersWithAssetManager)boolTrueGeneralDefault of the wizards' "Register folder with the Asset Manager" box: when the chosen folder is not scanned for the asset's primary asset type, it is added (Project Settings -> Asset Manager, DefaultGame.ini). Without it the game cannot find the asset by its id (saves, rules profiles, bestiary).
Save After Create (bSaveAfterCreate)boolTrueGeneralDefault of the wizards' "Save" box (off = the new asset stays unsaved in the editor).
Writable Roots (WritableRoots)TArray<FString>(1 entries)GeneralContent roots new assets may go to besides project plugins (never engine or marketplace plugins, which are read-only).
Consumable Ability Template (ConsumableAbilityTemplate)FNameItemHealItemAbility template of a new consumable's use ability (an Id of Ability Templates).
Default Equipment Slot (DefaultEquipmentSlot)FGameplayTag(TagName="Equip.Slot.Weapon")Item
Default Equipment Type (DefaultEquipmentType)FGameplayTag(TagName="Equip.Type.Weapon.Sword")Item
Default Item Price (DefaultItemPrice)int3250ItemShop price of a new consumable or equipment piece.
Equipment Template (EquipmentTemplate)TSoftObjectPtr<URSEEquipmentData>/RPGSagaEngine/Data/Items/DA_Equip_IronSword.DA_Equip_IronSwordItemEquipment copied by the Item wizard (empty = blank equipment with the slot and type below).
ATBStage Offset (ATBStageOffset)FVector(X=-900.000000,Y=-1000.000000,Z=0.000000)New Project
Classic Trigger Offset (ClassicTriggerOffset)FVector(X=1000.000000,Y=-600.000000,Z=0.000000)New Project
Data Subfolder (DataSubfolder)FStringDataNew ProjectData subfolder of the project root (content types go to <Root>/<Data>/<type folder>).
Default Cultures (DefaultCultures)TArray<FString>(1 entries)New ProjectCulture codes proposed for localization (the first is the native one).
Default Project Root (DefaultProjectRoot)FDirectoryPath(set per project)New ProjectContent root proposed by the New RPG Project wizard.
Example Map (ExampleMap)TSoftObjectPtr<UWorld>/RPGSagaEngine/Examples/Maps/L_RSE_StarterExample.L_RSE_StarterExampleNew ProjectThe framework's example map (D-070: the starter set's zone 1): the wizard offers to open it, or to start the project from a copy of it (Start From Example Map) instead of an empty first map.
Exploration Game Mode (ExplorationGameMode)TSoftClassPtr<AGameModeBase>/Script/RSE.RSEExplorationGameModeNew Project
First Map Name (FirstMapName)FStringL_StartNew Project
Floor Mesh (FloorMesh)TSoftObjectPtr<UStaticMesh>/Engine/BasicShapes/Cube.CubeNew ProjectFloor of the starter maps (an engine shape by default).
Floor Scale (FloorScale)FVector(X=40.000000,Y=40.000000,Z=1.000000)New Project
Genre Presets (GenrePresets)TArray<FRSEWizardGenrePreset>(5 entries)New Project
Main Menu Game Mode (MainMenuGameMode)TSoftClassPtr<AGameModeBase>/Script/RSE.RSEFrontEndGameModeNew Project
Main Menu Map Name (MainMenuMapName)FStringL_MainMenuNew Project
Maps Subfolder (MapsSubfolder)FStringMapsNew Project
NPCOffset (NPCOffset)FVector(X=500.000000,Y=300.000000,Z=0.000000)New Project
Save Point Offset (SavePointOffset)FVector(X=400.000000,Y=-300.000000,Z=0.000000)New ProjectStarter map layout, relative to the PlayerStart (cm). The Tactics zone and the classic stage stand on the floor (Z = 0) and must fit on it with the stage's camera (FloorScale x 100 cm square, D-072).
Starter Content Folders (StarterContentFolders)TArray<FDirectoryPath>(0 entries)New ProjectFolders copied into the project root by "Copy starter content" (references between them are kept).
Starter Party Templates (StarterPartyTemplates)TArray<TSoftObjectPtr<URSECharacterData> >(3 entries)New ProjectCharacters copied as the starter party (they become Party -> Starting Members).
Tactics Trigger Offset (TacticsTriggerOffset)FVector(X=1000.000000,Y=600.000000,Z=0.000000)New Project
Tactics Zone Offset (TacticsZoneOffset)FVector(X=700.000000,Y=700.000000,Z=0.000000)New Project
Theme Presets (ThemePresets)TArray<FRSEWizardThemePreset>(3 entries)New Project
Default Summon Character (DefaultSummonCharacter)TSoftObjectPtr<URSECharacterData>(set per project)PactSummoned unit pre-filled in a new Pact (not a main character).
Summon Ability Template (SummonAbilityTemplate)TSoftObjectPtr<URSEAbilityData>(set per project)PactAbility copied as a new Pact's summon ability (must have a Summon effect and target Self).
Default Quest Category (DefaultQuestCategory)FGameplayTag(TagName="Quest.Category.Side")Quest--- Quest ---
First Objective Id (FirstObjectiveId)FNameObjective1Quest
First Stage Id (FirstStageId)FNameStartQuest
Success Outcome Id (SuccessOutcomeId)FNameSuccessQuest
Default Shop Stock (DefaultShopStock)TArray<TSoftObjectPtr<URSEItemData> >(3 entries)ShopStock pre-filled in a new shop (items without a price are skipped).

RPG Saga Engine: World Partition

Class URSEWorldPartitionSettings (module RSE), Project Settings, Project, RPG Saga Engine. World Partition support (D-174, docs/design/save-system.md "World Partition"): Project Settings -> RPG Saga Engine -> World Partition.

SettingTypeDefaultCategoryRestartDescription
Battle Streaming Margin (BattleStreamingMargin)float2000.000000BattlesKept loaded beyond the battle area's own radius (cm).
Keep Battle Cells Loaded (bKeepBattleCellsLoaded)boolTrueBattlesA battle on the live map keeps the cells around it loaded (a streaming source at the battle's center) until it ends, so its units, cover and doors do not unload while the camera or the party moves away. Off: the players' streaming sources only.
Min Battle Streaming Radius (MinBattleStreamingRadius)float5000.000000BattlesThe smallest radius kept loaded around a battle (cm): battles whose area has no size (Free Tactics) use it.
Auto Assign State Keys (bAutoAssignStateKeys)boolTrueEditorThe editor gives every placed or duplicated object that keeps saved state (triggers, spawners, traps, locks, interactables, building entrances) its own State Key, unique in the map. Off: keys only from RPG Saga Engine -> Fix State Keys.
Keep Exterior Loaded Inside (bKeepExteriorLoadedInside)boolTrueInteriorsWhile the party is inside, the cells around the building entrance stay loaded (a streaming source at the door), so the way out is there at once and the entrance, its neighbours and their saved state do not unload and reload. Off: the cells stream out, and the way out waits under the blackout until the door streamed in again (Exit Stream Wait Seconds).
Move Interiors Off the Map (bMoveInteriorsOffTheMap)boolTrueInteriorsSeparate interiors on a partitioned map load at Interior Origin (below) instead of the Buildings settings' origin: the player's streaming source goes there with the party, and the Buildings origin can lie over real cells of a large map (they would load for nothing while the party is inside). Off: the Buildings settings' origin.
Exit Stream Poll Interval (ExitStreamPollInterval)float0.100000InteriorsHow often the way out checks whether the cells at the door loaded (s).
Exit Stream Wait Seconds (ExitStreamWaitSeconds)float15.000000InteriorsThe way out of an interior waits (under the blackout) for the cells at the door to load, at most this long (s); then it goes on anyway.
Exterior Streaming Radius (ExteriorStreamingRadius)float3000.000000InteriorsThe radius of cells kept loaded around the door while inside, and waited for on the way out (cm).
Interior Origin (InteriorOrigin)FVector(X=1000000.000000,Y=1000000.000000,Z=100000.000000)InteriorsWhere the first interior's level instance sits on a partitioned map (cm). Keep it away from the playable area (no cells there) and within about 10 km of the origin (floats stay precise); the Buildings settings' spacing and slots apply from here.
Entrance Stream Wait Seconds (EntranceStreamWaitSeconds)float10.000000SavesA save made inside an interior: seconds the interior waits for its building entrance to stream in (a partitioned world loads the cells around the party after the map begins play). After that the visit is over and the party stands outside.

RPG Saga Engine: World Reactions

Class URSEWorldReactionSettings (module RSECore), Project Settings, Project, RPG Saga Engine. Project Settings -> RPG Saga Engine -> World Reactions (D-157): the rules, the reach of field casts, the texts.

SettingTypeDefaultCategoryRestartDescription
Battle Radius Padding (BattleRadiusPadding)float150.000000BattleBattle: an ability that lands within its area (Free Tactics radius) plus this padding changes the world objects there (cm).
Battle Abilities React (bBattleAbilitiesReact)boolTrueBattleBattle abilities change the world on the live map (off = only field casts do).
Default Field Radius (DefaultFieldRadius)float900.000000FieldField casts of abilities without their own World Radius reach this far around the caster (cm).
Max Targets Per Cast (MaxTargetsPerCast)int3212FieldAt most this many objects react to one cast (the nearest first; 0 = no limit).
Rules (Rules)TArray<FRSEWorldReactionRule>(6 entries)RulesThe rules (higher Priority first, then in order). The first rule an object matches decides.
Nothing Reacts Text (NothingReactsText)FTextNSLOCTEXT("RSEWorldReactions", "NothingReacts", "Nothing here reacts to it.")TextsSaid when a field cast finds nothing that reacts (nothing is spent).
Surroundings Target Text (SurroundingsTargetText)FTextNSLOCTEXT("RSEWorldReactions", "SurroundingsTarget", "The surroundings")TextsThe party menu's target entry for a cast on the surroundings.

RPG Saga Engine: World Tools

Class URSEWorldToolsSettings (module RSEEditor), Project Settings, Project, RPG Saga Engine. World tools of D-076 (docs/product/world-tools.md): "Make Battle Zone Here" (a ready Tactics battle site, optionally with an ATB stage) and "Populate Zone" (random areas, visible enemies, chests, a save point, a trader, placeholders).

SettingTypeDefaultCategoryRestartDescription
Add Stage by Default (bAddStageByDefault)boolTrueBattle Site|ATB StageAlso looks for a flat, clear place for a classic battle stage next to the zone.
Stage Camera View Distance (StageCameraViewDistance)float6000.000000Battle Site|ATB StageThe stage camera must see the level within this distance.
Stage Clearance (StageClearance)float200.000000Battle Site|ATB StageFree height above every slot (no roof, branch or wall over the formation).
Stage Gap (StageGap)float300.000000Battle Site|ATB StageFree space kept between the zone and the stage's area.
Stage Search Angles (StageSearchAngles)int3216Battle Site|ATB StageDirections tried on each ring.
Stage Search Radius (StageSearchRadius)float5000.000000Battle Site|ATB StageHow far from the zone the stage may go.
Stage Search Step (StageSearchStep)float250.000000Battle Site|ATB StageDistance between two search rings.
Stage Slot Tolerance (StageSlotTolerance)float5.000000Battle Site|ATB StageLargest distance between a formation slot and the ground under it (the stage is flat).
Add Trigger by Default (bAddTriggerByDefault)boolTrueBattle Site|EncounterAdds an encounter trigger on the deployment tiles (walking in starts the battle).
Deployment Tile Count (DeploymentTileCount)int328Battle Site|EncounterDeployment tiles painted on the player's side (at least the encounter's Max Deployed Units).
Enemy Area Depth (EnemyAreaDepth)float0.650000Battle Site|EncounterWhere the enemy group gathers (D-088), from the deployment (0) to the farthest tile the party can walk to (1). The group stays together around one tile, not along the back line. A request's Enemy Area Center overrides it.
Enemy Area Depth Tolerance (EnemyAreaDepthTolerance)float0.150000Battle Site|EncounterAny tile within this share of the farthest walking distance from Enemy Area Depth is as good (other preferences decide).
Enemy Edge Margin (EnemyEdgeMargin)int321Battle Site|EncounterThe enemy group keeps this many tiles away from the zone's border when the grid allows it.
Enemy High Ground Preference (EnemyHighGroundPreference)float1.000000Battle Site|EncounterHow much the enemy group prefers high ground (per height step above the deployment). 0 = ignore height.
Enemy Min Distance from Deployment (EnemyMinDistanceFromDeployment)int324Battle Site|EncounterEnemies stand at least this many tiles from any deployment tile when the grid allows it.
Enemy Min Spacing (EnemyMinSpacing)int322Battle Site|EncounterEnemies stand at least this many tiles apart (Manhattan) when the grid allows it.
Generated Enemy Count (GeneratedEnemyCount)int320Battle Site|EncounterEnemies of a group generated from a progression zone; 0 = the pool's group size.
New Encounter Folder (NewEncounterFolder)FDirectoryPath(set per project)Battle Site|EncounterFolder of the encounters the tool creates (DA_Encounter_<Site>).
Site Folder (SiteFolder)FStringBattleSitesBattle Site|EncounterOutliner folder that holds every battle site (one sub-folder per site).
Site Name Prefix (SiteNamePrefix)FStringBattleSiteBattle Site|EncounterName of a new site (a number is added): its actors, its Outliner folder and its encounter.
Snap to Tile Grid (bSnapToTileGrid)boolTrueBattle Site|ZoneThe zone's corner snaps to the world tile grid (zones placed side by side line up).
Default Size Preset (DefaultSizePreset)int321Battle Site|ZonePreset used by the viewport's context menu.
Ground Search Above (GroundSearchAbove)float1500.000000Battle Site|ZoneHow far above the area's reference point the ground search starts.
Ground Search Below (GroundSearchBelow)float3000.000000Battle Site|ZoneHow far below the area's reference point the ground search goes.
Max Connected Step (MaxConnectedStep)int322Battle Site|ZoneTwo walkable neighbors are connected when their heights differ by at most this many steps (regions, deployment).
Max Zone Tiles (MaxZoneTiles)int3232Battle Site|ZoneLargest zone side, in tiles.
Min Walkable Fraction (MinWalkableFraction)float0.500000Battle Site|ZoneBelow this share of walkable tiles the site is refused (the report says why).
Min Zone Tiles (MinZoneTiles)int324Battle Site|ZoneSmallest zone side, in tiles (a dragged rectangle is never smaller).
Size Presets (SizePresets)TArray<FRSEBattleSiteSizePreset>(4 entries)Battle Site|ZoneSizes offered when the area is the camera focus or a click (not a dragged rectangle).
Building Mode Colors (BuildingModeColors)TArray<FLinearColor>(3 entries)Building Analyzer
Building Probe Headroom (BuildingProbeHeadroom)float180.000000Building AnalyzerFree height a probe point needs above the floor to count as walkable inside (cm).
Building Probe Spacing (BuildingProbeSpacing)float100.000000Building AnalyzerThe interior probe grid's spacing inside a building's bounds (cm).
Entrance Folder (EntranceFolder)FStringBuildingsBuilding AnalyzerOutliner folder of the entrances the analyzer places.
Interior Asset Folder (InteriorAssetFolder)FString(set per project)Building AnalyzerWhere the analyzer's new interior data assets go (Separate Interior proposals).
Default Populate Rules (DefaultPopulateRules)TSoftObjectPtr<URSEPopulateRules>NonePopulateRules used when the Populate tool is given none (empty = the rules' built-in defaults).
Nav Mesh Volume Height (NavMeshVolumeHeight)float2000.000000PopulateHeight of the navigation bounds volume the tool adds around an area without a navmesh.
Populate Area from Point (PopulateAreaFromPoint)float6000.000000PopulateSide of the square area Populate uses when the area is a point (a click or the camera focus).
Populate Folder Pattern (PopulateFolderPattern)FStringPopulate_{Zone}PopulateOutliner folder of a populated zone: the text {Zone} is replaced by the progression zone's name.
Crossroad Merge (CrossroadMerge)float300.000000Populate Interactions
Crossroad Offset (CrossroadOffset)float300.000000Populate Interactions
Danger Edge Offset (DangerEdgeOffset)float250.000000Populate Interactions
Danger Threshold (DangerThreshold)float1.000000Populate InteractionsA zone counts as dangerous at this danger (an enemy level) or above.
Existing Clearance (ExistingClearance)float400.000000Populate InteractionsExisting objects (interactables, NPCs, exits, save points) are kept this far from new placements (cm).
Interactions Folder Pattern (InteractionsFolderPattern)FStringInteractions_{Group}Populate InteractionsOutliner folder of a Populate Interactions group: {Group} is replaced by the group's name.
Interaction Spot Colors (InteractionSpotColors)TArray<FLinearColor>(5 entries)Populate InteractionsPreview marker colors by spot (Road, Crossroads, Danger Edge, Point Of Interest, Wilds).
Min Spacing Any (MinSpacingAny)float400.000000Populate Interactions
Point Of Interest Radius (PointOfInterestRadius)float600.000000Populate Interactions
Road Clearance (RoadClearance)float500.000000Populate Interactions
Road Preview Color (RoadPreviewColor)FLinearColor(R=0.850000,G=0.600000,B=0.250000,A=1.000000)Populate Interactions
Road Sample Step (RoadSampleStep)float200.000000Populate InteractionsA road spline is sampled every this many cm.
Road Spacing (RoadSpacing)float1500.000000Populate InteractionsCandidates along roads every this many cm (at density 1).
Road Tags (RoadTags)TArray<FName>(1 entries)Populate InteractionsActors with one of these tags whose spline is a road (else actors named with a Road Word).
Road Words (RoadWords)TArray<FString>(4 entries)Populate InteractionsWords in an actor's label that make its spline a road (lower case).
Signpost Arm Cone (SignpostArmCone)float50.000000Populate InteractionsA signpost arm names the point of interest within this angle of the road's way.
Spawner Danger Radius (SpawnerDangerRadius)float1500.000000Populate InteractionsA visible enemy spawner makes the ground within this radius dangerous (cm).
Wilds Spacing (WildsSpacing)float2500.000000Populate Interactions
Camera Focus Distance (CameraFocusDistance)float30000.000000ViewportHow far the camera focus looks for the ground.
Marker Size (MarkerSize)float120.000000ViewportSize of a Populate preview marker.
Surface Offset (SurfaceOffset)float4.000000ViewportHeight of the drawn tiles above the ground (avoids flicker).
Area Color (AreaColor)FLinearColor(R=1.000000,G=0.850000,B=0.100000,A=1.000000)Viewport|Colors
Blocked Color (BlockedColor)FLinearColor(R=0.000000,G=0.000000,B=0.000000,A=0.450000)Viewport|Colors
Deployment Color (DeploymentColor)FLinearColor(R=0.150000,G=0.450000,B=1.000000,A=0.550000)Viewport|Colors
Enemy Color (EnemyColor)FLinearColor(R=1.000000,G=0.250000,B=0.200000,A=0.600000)Viewport|Colors
Populate Kind Colors (PopulateKindColors)TArray<FLinearColor>(7 entries)Viewport|ColorsMarker colors of the Populate preview, by kind (Random Area, Spawner, Chest, Save Point, Trader, Signpost, Zone Exit).
Problem Color (ProblemColor)FLinearColor(R=1.000000,G=0.000000,B=0.600000,A=1.000000)Viewport|Colors
Stage Color (StageColor)FLinearColor(R=1.000000,G=0.550000,B=0.100000,A=1.000000)Viewport|Colors
Walkable Color (WalkableColor)FLinearColor(R=0.200000,G=0.800000,B=0.300000,A=0.250000)Viewport|Colors

Appendix C. Console variables and commands

Generated from the console manager: every variable and command whose name starts with RSE.. 356 entries. Type the name in the editor or game console; a variable without a value shows its current value.

NameTypeDefaultDescription
RSE.Action.FacecommandRSE.Action.Face <unit|lock|soft>: the commanded character and the camera turn to a unit.
RSE.Action.FinisherLibrarycommandRSE.Action.FinisherLibrary <library asset>: adds a paired animation library for this session (dev).
RSE.Action.FinisherscommandRSE.Action.Finishers <Off|Sometimes|Always>: the player's finisher option.
RSE.Action.InputcommandRSE.Action.Input <input> [0|1]: presses (1) or releases (0) an action battle input of the first local player.
RSE.Action.LockcommandRSE.Action.Lock [unit|soft|off]: hard lock on a unit (none: the best target unless one is held).
RSE.Action.LookcommandRSE.Action.Look <yaw> <pitch>: turns the action camera (degrees).
RSE.Action.PullcommandRSE.Action.Pull <unit|lock|soft> [cm]: a unit steps in front of the commanded character (dev).
RSE.Action.SetHPcommandRSE.Action.SetHP <unit|lock|soft> <hp>: sets a unit's HP (dev).
RSE.Action.StartcommandRSE.Action.Start <encounter>: starts an action encounter where the party stands (D-171).
RSE.Action.StatuscommandRSE.Action.Status: logs the running action battle's units.
RSE.Action.WeaponcommandRSE.Action.Weapon <unit> <weapon asset>: gives a unit an action weapon for this battle.
RSE.Action.WincommandRSE.Action.Win: every enemy of the running action battle falls (dev).
RSE.ActionCommand.PlayerModecommandPlayer option for action command prompts: RSE.ActionCommand.PlayerMode [All|OffenseOnly|Off]. Without an argument, prints the current mode.
RSE.AI.Debugint0AI debugger (D-056): 0 = off, 1 = record every AI decision (top options with their score breakdown) for the in-game debugger and log it, 2 = also log every score term.
RSE.AIInterop.CreateExampleBossBTcommandCreates (or rebuilds) the boss example Behavior Tree and Blackboard of the RPG Saga Engine AI interop (action battles).
RSE.AIInterop.CreateExampleBTcommandCreates (or rebuilds) the example Behavior Tree and Blackboard of the RPG Saga Engine AI interop.
RSE.Anim.Warpingint-1Locomotion orientation and stride warping: -1 = Project Settings (Character Visuals), 0 = off, 1 = on.
RSE.Appearance.WeaponTipbooltrueWhether the WeaponTip presentation anchor resolves to the tip of the held weapon (0 = use the anchor fallbacks, e.g. the hand).
RSE.ATB.GrantcommandTeaches a running classic battle's units an ability. Args: <AbilityName> [party | enemies | UnitId] [timed] (timed: with a timing prompt, this session only)
RSE.ATB.InputcommandClassic battle input without a keyboard. Args: select | cancel | up | down | left | right | next | prev | toggle | block | aim <UnitId> | choose <UnitId> | entry <Index> | pick <Index> | unit <UnitId> | state
RSE.ATB.ModecommandSets ATB time mode for the running battle. Args: Wait|Active
RSE.Audio.DebugboolfalseLogs every music change and sound effect the game plays or would play (D-036).
RSE.Audio.DumpcommandPrints the music layers, what plays, the volumes and the sound catalog.
RSE.Audio.PlayContextcommandPlays a music context over the current music (story layer): RSE.Audio.PlayContext <MainMenu|Exploration|BattleATB|BattleTactics|Boss|Victory|GameOver|Dialog>. RSE.Audio.PlayContext None restores the music below.
RSE.Audio.SetVolumecommandSets a player volume (saved in GameUserSettings.ini): RSE.Audio.SetVolume <Master|Music|SFX|Voice|UI> <0..1>. Without a value, prints it.
RSE.Authority.ModecommandRSE.Authority.Mode [Standalone|Authority|Proxy] [Slot]: shows or forces the authority mode (debug).
RSE.Battle.AutoPlayboolfalseWhen true, the AI also commands player units (demos, AI-vs-AI observation, soak tests).
RSE.Battle.ModeOverridecommandD-182: fights every encounter that allows it in this mode: Tactics | Live | ATB | Turn | Action | None. No argument: shows the override.
RSE.Battle.Presentation.ReduceEffectsint-1-1 = use Project Settings, 0 = full effects, 1 = reduced effects (shake, flash... per settings).
RSE.Battle.Presentation.Speedfloat1Extra multiplier of the battle presentation speed (testing).
RSE.Battle.PreviewTransitioncommandPlays battle intro transitions in the running game, without a battle (D-096). Args: Style[+Style...] | All, [ShotAt=0.5] (effect progress of the saved frame), [ShotDir=<folder>] (saves <Style>_<DrawnStyle>.png there), [Quit].
RSE.Battle.RestartcommandRestarts the encounter from deployment.
RSE.Battle.StartcommandFills the free deployment slots, ends deployment and starts the battle.
RSE.Battle.StartATBcommandStarts the ATB test battle on the ATB stage. Args: [DirectorNameFilter] (default: the first classic director)
RSE.Battle.StartEncountercommandStarts an encounter asset on this map without a trigger (classic: the battle stage; Tactics: its battle site, else the first one). Args: <EncounterAssetName>
RSE.Battle.StartTurncommandStarts a turn-based battle on the map's classic stage (D-050). Args: [EncounterAssetName] (default: the first Battle.Mode.Turn encounter)
RSE.Battle.Transitionint1Screen transitions between exploration and battles (D-083): 1 = per Battle Transition settings, 0 = off.
RSE.BattleFlow.ConfirmcommandRSE.BattleFlow.Confirm: confirms the open results or game over screen (Continue / the selected choice), as Select does.
RSE.BattleFlow.ShowGameOvercommandShows the game over screen (Load last save / main menu work; Retry is disabled outside battles).
RSE.BattleFlow.ShowResultscommandRSE.BattleFlow.ShowResults [Experience=120] [Money=250] [MaxItems=6]: shows the victory results with sample rewards from the party (really given).
RSE.BattleMenucommandBattle menus (D-122, D-147). Args: style [Id] | open <CategoryId> | close | pick <NodeId> | picki <N> | hli <N> | skipto <CategoryId> | expand <0|1> | highlight <Id> | page <N> | activate <EntryId> | input <confirm|cancel|left|right|up|down|page+|page-|aim X Y|key Name> | hotbar <From> <To> | state
RSE.BattleMenu.StylestringDebug: the battle menu style in use (a Style Id: List, Radial, Hotbar...), over the player's option and the project's default. Empty = normal.
RSE.Bestiary.ListcommandLists the bestiary entries (encountered / defeated / highest level).
RSE.Bestiary.ScancommandRSE.Bestiary.Scan [0]: marks every bestiary entry scanned (D-147: enemy HP shows in battle HUDs); 0 clears the marks.
RSE.Bestiary.UnlockcommandRSE.Bestiary.Unlock [defeats]: records every enemy character of the Asset Manager as met and defeated (default 1).
RSE.BlueprintAPI.ExportcommandWrites the Blueprint API manifest (the plugin's Config/BlueprintAPI/Manifest.json) and the reference (docs/product/blueprint-api.md) from reflection (D-052).
RSE.BuildingscommandD-150 building entrances: enter <label> [instant] | exit [instant] | door <label> | floor <level> | check | state
RSE.CameracommandThe party RPG camera (D-113). Args: zoom <cm|in|out|min|max> [instant] | yaw <deg> | turn <deg> | tilt <deg|up|down|reset> [instant] | pan <X> <Y> | style <tactical|thirdperson|clear> | prop <wall|tree|bigtree|pillar|mesh|forest> [fade] [meters] [/Mesh/Path] [x<scale>] | clearprops | overlay <subtle|filled> | jitter <seconds> | faceturn <deg> [seconds] | absolute <0|1> | state
RSE.Camera.AddOcclusionFadecommandAdds the camera occlusion fade (MF_RSE_CameraOcclusion) to materials (D-113, D-116; an instance changes its parent; project materials only; backups and a report in Saved/RSE). Args: <MaterialPath> [...]
RSE.Camera.CinematicBattleint-1D-183: the cinematic battle camera (1 = on, 0 = off, -1 = Camera Framing -> Cinematic Battle Camera -> Enabled).
RSE.Camera.Framingint1D-183: obstruction-aware cameras (1 = on, 0 = every camera keeps its own pose).
RSE.Camera.FramingDebugint0D-183: draws the obstruction-aware cameras' probes (1 = on).
RSE.Camera.RemoveOcclusionFadecommandTakes the camera occlusion fade out of materials again (D-116). Args: <MaterialPath> [...]
RSE.Cards.AlbumcommandOpens the card album and deck editor.
RSE.Cards.ChallengecommandRequests a card match, as a Start Card Match effect would. Args: <OpponentAssetName>
RSE.Cards.DumpcommandLogs the card collection, deck size and records per opponent.
RSE.Cards.ForceSeedint-1Fixed seed for every card match (shuffle and stake). -1 = off.
RSE.Cards.GivecommandAdds copies of a card to the collection. Args: <CardAssetName> [Count]
RSE.Cards.LogboolfalseLogs every event of every card match played.
RSE.CharacterActions.AddToStartingPartycommandAdds a character to Party -> Starting Members (D-084). Args: <CharacterPath> [Config=<file>]
RSE.CharacterActions.MakeEnemycommandEncounter of a character + spawner or battle zone in the editor's level (D-084). Args: <CharacterPath> [Folder=/Game/X] [Location=X,Y,Z] [Count=N] [Mode=Battle.Mode.ATB] [-NoPlace] [-NoSave]
RSE.CharacterActions.MakeRecruitablecommandRecruit dialog + story flag + NPC in the editor's level (D-084). Args: <CharacterPath> [Folder=/Game/X] [Location=X,Y,Z] [Flag=Narrative.Flag.X] [-NoPlace] [-NoSave]
RSE.Cinematic.GeneratecommandCinematic from Screenplay in the open level (D-078). Args: Dialog=<path> [Screenplay=<file>] [Anchor=Auto|SelectedActor|CameraFocus|Marker|Location] [Marker=<label>] [Location=x,y,z] [Yaw=deg] [Staging=...] [Player=<path>] [Output=/Game/...] [Name=...] [SceneFolder=...] [Seed=n] [CastBinding=...] [-DryRun] [-Trigger] [-SequenceActor] [-AutoAdvance] [-NoSave] [-NoPlayer]
RSE.Commands.Logint0Logs commands on the bus: 0 = only refused ones (Commands -> Log Refused Commands), 1 = every command.
RSE.Coop.Dev.AdvancecommandAdvances the running dialog as this machine's player (the dialog command; co-op rules apply).
RSE.Coop.Dev.CancelTravelcommandCancels the group travel countdown (host).
RSE.Coop.Dev.ChoosecommandRSE.Coop.Dev.Choose <OptionId>: picks (or votes for) an option of the running dialog as this machine's player.
RSE.Coop.Dev.LeashcommandMeasures the leash now (host).
RSE.Coop.Dev.NotifycommandRSE.Coop.Dev.Notify [Text]: shows a notice to every player.
RSE.Coop.Dev.PromptcommandStarts a test dialog made at run time: a line, then a choice (Left / Right) decided by [Host|Speaker|Vote] (default Host).
RSE.Coop.Dev.StatuscommandLogs the co-op rules' state on this machine: the dialog (authority or mirror), the scene, the leash, the travel countdown.
RSE.Debug.CameraLogboolfalseLogs the player's view (location, rotation, view target) every frame, to check camera moves for jitter.
RSE.Debug.EllipsisProbecommandShows ellipsis texts squeezed to 2..40 px (UI robustness check). Args: [clip | off]
RSE.Debug.TacticsInputcommandLogs why the Tactics controller may ignore battle input (mode, menus, screens, ATB, presentation).
RSE.Dev.InventorycommandGrid inventory (D-123): open | member N | tab N | cursor X Y | slot N | focus Item | tooltip Item | actions | hold | move Item X Y | equip Item [Slot] | unequip Slot [X Y] | sort | rotate Degrees | zoom Delta | preview | style Classic|Grid|Default | dump. D-143: mode Shared|PerCharacter | bagsize W H | loot Item [Count] | stashpoint -1|0|1 | give Item Member | tostash Item | take Item | distribute [now]
RSE.Dev.MarkcommandA thin coloured post in the world (door captures). Args: <X> <Y> <Z> [HeightCm] [R G B] | clear
RSE.Dev.ScriptcommandRuns a playtest script: console commands, 'wait <seconds>', 'waituntil <battle|exploration|results|gameover|dialog|nodialog|scene|noscene>[|<another>] [timeout]', 'shot <name>', 'cleanshot <name>' (no UI). Args: <ScriptFile> [ShotFolder]
RSE.Dev.ViewcommandViews the world from a fixed camera (captures). Args: <X> <Y> <Z> <Pitch> <Yaw> [FOV] [BlendSeconds] | off
RSE.Dialog.AbortcommandRSE.Dialog.Abort: ends the running dialog.
RSE.Dialog.AdvancecommandRSE.Dialog.Advance: the dialog box's Confirm (reveals the line, skips a clip the line waits for, or goes on).
RSE.Dialog.AnchorFallbackToPlayerboolfalseLines whose speaker has no actor in the world follow the player's pawn (world-anchored dialog layouts such as Bubble).
RSE.Dialog.AutocommandRSE.Dialog.Auto [0|1]: prints or sets dialog auto-advance.
RSE.Dialog.ChoosecommandRSE.Dialog.Choose <OptionId>: picks an option of the choice on screen.
RSE.Dialog.DemocommandRSE.Dialog.Demo [box|cinematic|bark]: a built-in demo dialog (no content needed).
RSE.Dialog.DumpcommandRSE.Dialog.Dump <asset>: logs a dialog as a screenplay.
RSE.Dialog.ExplorecommandRSE.Dialog.Explore <asset>: walks every branch and reports dead ends, missing speakers, unreachable nodes and loops.
RSE.Dialog.ExploreMaxPathsint10000Routes the dialog explorer counts before it stops counting (the other checks always cover every node).
RSE.Dialog.HistorycommandLogs the dialog history of the running game.
RSE.Dialog.InstantTextboolfalseDialog lines appear at once (ignores the text speed).
RSE.Dialog.LivePortraitsint11 = live 3D dialog portraits may render (Portraits settings); 0 = they show the image (the Steam Deck device profile sets 0).
RSE.Dialog.LogConditionsboolfalseLogs how dialog Branch nodes chose their output.
RSE.Dialog.PortraitDemocommandRSE.Dialog.PortraitDemo <image|video|live|both> [ClipFile]: the party leader speaking with a portrait mode (D-075).
RSE.Dialog.PresentcommandRSE.Dialog.Present <asset> [NodeId]: starts a dialog with its presentation.
RSE.Dialog.PrintcommandAlias of RSE.Dialog.Dump.
RSE.Dialog.ShowNodeIdsboolfalseShows the NodeId of the current line in the dialog box.
RSE.Dialog.SpeedTestcommandRSE.Dialog.SpeedTest: one line with every markup feature at the current text speed.
RSE.Dialog.StartcommandRSE.Dialog.Start <asset> [NodeId]: starts a dialog in the running game.
RSE.Dialog.TextSpeedcommandRSE.Dialog.TextSpeed [step]: prints or sets the text speed step.
RSE.Dialog.VideoPortraitsint11 = video dialog portraits may play (Portraits settings); 0 = they show the image.
RSE.Difficulty.LogboolfalseLogs every battle recorded by adaptive difficulty (metrics, score, change) and every intelligence resolved.
RSE.Difficulty.Overridefloat-1Fixed enemy intelligence (0-1) for every battle, ignoring adaptive difficulty and encounter bounds. -1 = off.
RSE.Docs.ExportReferencecommandWrites nodes.json, settings.json, cvars.json and assets.json (reflection of the RSE* modules) for the manual build. Optional argument: output folder (default: the plugin's Docs/Manual/Generated).
RSE.Economy.MoneycommandShows or sets the party's money: RSE.Economy.Money [Amount]
RSE.Economy.OpenShopcommandOpens a shop screen: RSE.Economy.OpenShop <shop asset path>
RSE.Economy.RestcommandRests like an inn (pays, restores, fades): RSE.Economy.Rest [Cost]
RSE.Economy.ShopcommandDrives the open shop: RSE.Economy.Shop up|down|left|right|tab|confirm|back ...
RSE.Encounter.DebugboolfalseVisible enemies (D-063): draws sight cones, hearing circles, chase lines and states.
RSE.Encounter.ForceEliteint-1Generated groups (D-063): -1 = the pools' elite chance, 0 = never elite, 1 = always elite.
RSE.Encounter.RateOverridefloat-1Random encounter rate multiplier override (D-063): -1 = the game's (effects x traits x option), 0 = no random battles, 5 = many.
RSE.Encounter.StatuscommandLogs random encounters v2 (D-063): the rate multiplier and its effects, world steps, and every visible enemy (group, state, place).
RSE.Encounter.TimeModifiersbooltrueVisible enemies follow the time and weather rules (D-101 / D-104): sight, hearing, chase, attitude. 0 = the profiles as authored.
RSE.EncounterLayoutcommandDrives the active Encounter Layout mode: select enemy|object <Index> | move <X> <Y> | rotate [ccw] | row | delete | paint|erase <X> <Y> [Radius] | tool select|enemy|paint|erase|object
RSE.Exploration.EncountercommandStarts an encounter trigger's battle as if the player walked in. Args: [NameFilter | ATB | Turn | Tactics]
RSE.Exploration.TeleportcommandMoves the player's pawn. Args: <X> <Y> [Z]
RSE.Exploration.WalkTocommandWalks the player's pawn through points with movement input (animation, camera, random encounters as when playing); stops at the last point or when a battle starts. Args: <X> <Y> [<X> <Y> ...] [loop]
RSE.Explore.AfterBattlecommandApplies Fallen Members -> After Battle now.
RSE.Explore.DialogBattlecommandRuns a Start Battle effect From Context. Args: [choice | node | normal] [scene] [EncounterFilter]
RSE.Explore.FallcommandKnocks members out and applies the fallen rules. Args: [Member | all] (default: the last follower)
RSE.Explore.LockpickcommandDrives the open lockpick screen. Args: press | auto (presses in the spot) | miss (presses outside) | giveup | state
RSE.Explore.PerceivecommandRuns the passive perception check now.
RSE.Explore.RevivecommandRevives a fallen member the best way the party has. Args: [Member]
RSE.Explore.RulecommandSets an Exploration RPG setting for this session. Args: <Property> <Value>
RSE.Explore.SetupcommandPlaces the exploration RPG test pieces in front of the explorer: a hidden trap, a locked chest, an NPC to rob (its back turned). Args: [all | trap | lock | thief] [Meters=4] [AssetFilter] [FighterFilter (thief) or Radius (trap)]
RSE.Explore.StatuscommandLogs the members' exploration skills, every trap, lock and robbable NPC, and the enemies investigating a noise.
RSE.Explore.StealcommandThe explorer sneaks up behind an NPC and steals. Args: [NPC=DevMark] [Distance=110] [place]
RSE.Explore.ThrowcommandDistractions. Args: aim [Pitch] | throw [Meters=10] | at X Y | cancel
RSE.Foundation.PreviewcommandApplies a foundation preset to this session's settings only (nothing is saved): its stats, resources, rules and Game Terms. Args: <Preset> (e.g. DarkFantasy, SciFi)
RSE.FreeTactics.ApproachcommandThe explorer walks toward the test group. Args: <Meters> [sneak]
RSE.FreeTactics.FieldcommandFree Tactics field test tools (D-108). Args: site [camp m] | barrel|crate|roof <ahead> [side] | surface <Name> <ahead> [side] [radius] | element <Fire|Ice|Lightning|Water> <ahead> [side] [radius] | grant <Ability> | use <Ability> [unit <Id> | nearest | object <Id> | point <ahead> <side>] | shoot | jumpaim | jump <ahead> [side] | hover <ahead> [side] | hoverroof | hovercover | hoverobject <Id> | clear | state
RSE.FreeTactics.InputcommandScripted Free Tactics input. Args: move [nearest | Meters] | hover [nearest | UnitId | ground X Y] | attack [nearest | UnitId] | cast [nearest | UnitId] (D-115: the first spell) | feel (D-115: entry, pace, intent) | select <MenuIndex> | area (the first area ability, at the nearest enemy) | end [moved] | menu | join (the reserve group) | flee [walk] | auto [0 | 1] | state
RSE.FreeTactics.InteriorcommandFree Tactics inside buildings (D-110). Args: door [Index] | grant <Ability> [party] | fill | summon [hover] [Ability] | moveto <X> <Y> <Z> | camera <zoom N | yaw Deg | focus X Y Z> | state; outside a battle: explorer <X> <Y> <Z> [Yaw] | door
RSE.FreeTactics.PlacecommandPuts the explorer (and the party) in front of / behind the test group. Args: <Meters> [front | back] [sneak]
RSE.FreeTactics.SetupcommandPlaces a Free Tactics test site in front of the explorer (idempotent): an aggressive Free Tactics group, walls and cover with combat roles, tall grass. Args: [Meters=16] [ambush] [behind] [reserve] [keep] (isolated by default: the map's other groups are turned off; keep leaves them)
RSE.FreeTactics.StartcommandStarts the test site's Free Tactics battle. Args: [normal | surprise | ambush]
RSE.FreeTactics.TargetcommandD-146 targeting test input. Args: aim <ranged|spell|melee|heal|self|overwatch|Name> | next | prev | pick <UnitId> | cursor <X01> <Y01> | preview <Kind|Name|none> | walk | confirm | click | cancel | state
RSE.GrowthcommandProgression systems (D-144): System Classic|Points|Board|Default | Award Attribute|Ability|Board|All <Amount> | Generate | Layout <Preset> [Regions] | Auto | Page | Member <N> | Select <NodeId|Row|Available> | Request | AskAuto | Menu | MenuClose | MenuNext | Undo | Details | Help | Teacher <ObjectPath> | Ask | Dump
RSE.Input.DevicecommandRSE.Input.Device [Gamepad|Keyboard|Touch]: sets the last used device (key prompts follow it until the next real input). No argument: prints it.
RSE.Input.ForceDeviceint0Device of the key prompts: 0 = project setting (Input -> Devices -> Prompt Device), 1 = keyboard / mouse, 2 = gamepad, 3 = touch.
RSE.Input.StatecommandLogs who has the input per local player: Slate focus, cursor, exploration / tactics mapping contexts, party menu, the exploration hand-off (D-145).
RSE.Input.Touch.ContextcommandPrints the touch context and layout of the first local player.
RSE.Input.Touch.Debugint0Logs touches, recognised gestures and injected actions (D-180). 0 = Touch -> Debug Touches.
RSE.Input.Touch.EmulatecommandRSE.Input.Touch.Emulate 0|1: the left mouse button acts as a finger (Alt: a second, mirrored finger).
RSE.Input.TraceFocuscommandRSE.Input.TraceFocus 0|1|2: logs every Slate focus change (2 also logs the call stack when the focus goes to no widget).
RSE.InteractablescommandD-150 interaction library: list | use <label> | reset [label]
RSE.Interaction.DebugboolfalseLogs every focus check of the interaction system (candidates, distance to the body, angle, score, why interaction is blocked) and draws the candidates' bodies.
RSE.Inventory.ForceStashAccessint0D-143: 1 = the stash opens everywhere (captures, tests), whatever Inventory Rules -> Stash Access says (except Never).
RSE.Inventory.LivePreviewint1D-126: the inventory paperdoll shows the selected character in 3D (1) or its portrait (0).
RSE.Inventory.PreviewRatefloat-1D-126: captures per second of the inventory preview while it is on screen (0 = only on change; negative = Inventory UI -> Preview Capture Rate).
RSE.Inventory.PreviewScalefloat1D-126: scale of the inventory preview's render target (Inventory UI -> Preview Resolution). The Steam Deck profile sets 0.75.
RSE.Items.GivecommandAdds an item to the party inventory. Args: <ItemAssetName> [Count]
RSE.Items.ListcommandLogs the party inventory.
RSE.Items.ResetcommandResets inventory and equipment to the new-game state.
RSE.LanguagecommandSwitches the game language and locale. Args: <culture> (en, ro). No args: prints the current language.
RSE.LivingWorldcommandD-157 living world: cast <ability> | tags <tag> [radius] | say <label> [kind] | caravans | hints
RSE.Map.ClickcommandRSE.Map.Click <x> <y> [left|right] [down|up|both]: a mouse click at window pixels.
RSE.Map.ClickWorldcommandRSE.Map.ClickWorld <x> <y> [left|right|move]: clicks (or only moves the mouse to) the open area map where a world point is drawn.
RSE.Map.GeneratecommandGenerates area maps (D-089). No argument: the level open in the editor. 'All': every level of the project and the plugin. Else level package names. Options: -Style=<style asset path> -Resolution=<px>.
RSE.Map.JournalcommandRSE.Map.Journal <QuestAssetName>: opens the journal on a quest.
RSE.Map.KeycommandRSE.Map.Key <KeyName> [down|up|both]: a key press through Slate.
RSE.Map.LegendcommandRSE.Map.Legend focus | leave | next | toggle
RSE.Map.ListcommandLists the saved map state: explored share and pins per map.
RSE.Map.MarkerscommandCounts the markers the maps show now, per category (D-116).
RSE.Map.OpencommandOpens the area map of the current level (D-089).
RSE.Map.OptioncommandRSE.Map.Option <minimap|compass|markers|difficulty> <value|default>
RSE.Map.PincommandRSE.Map.Pin <x> <y> [type]: adds a pin at a world point.
RSE.Map.PinscommandLists the current map's pins.
RSE.Map.RevealAllcommandReveals the whole fog of war of the current map.
RSE.Map.ShowQuestcommandRSE.Map.ShowQuest <QuestAssetName>: opens the area map on a quest's objective.
RSE.Map.StickcommandRSE.Map.Stick <x> <y>: the left stick through Slate.
RSE.Map.ViewcommandRSE.Map.View zoom <steps> | pan <dx> <dy> | center <u> <v> | world <x> <y> | player
RSE.Map.WheelcommandRSE.Map.Wheel open [u v] | aim <x> <y> | select <i> | confirm | cancel
RSE.Mobile.ApplyProfilescommandRSE.Mobile.ApplyProfiles [DryRun]: adds the RSE mobile device profiles and scalability to the project's Config (sections it already has are left alone).
RSE.Mobile.CheckMaterialscommandRSE.Mobile.CheckMaterials [Android | iOS] [/ContentFolder]: compiles every plugin material for the ES3.1 feature level and writes Saved/Perf/Mobile/MobileMaterials_<Platform>.txt. Slow on first use (shader compilation).
RSE.Mobile.PreviewcommandRSE.Mobile.Preview <Map labels | All> [Android | iOS] [Low | Mid | High] [NoCapture]: switches the editor to the ES3.1 Mobile Preview, plays the example maps from the Mobile Rendering settings and records frame statistics against the tier's budget. RSE.Mobile.Preview Off restores the editor.
RSE.Narrative.DumpcommandLogs the narrative state (flags, variables, puzzles, areas, events).
RSE.Narrative.ResetcommandResets the narrative state to a new game's.
RSE.Narrative.SetcommandRSE.Narrative.Set <Narrative.* tag> [Value]: sets a flag, variable, puzzle, area or event.
RSE.Narrative.TraceboolfalseLogs every story effect executed and every skipped gate.
RSE.Net.Dev.KickcommandRSE.Net.Dev.Kick Slot: the host disconnects a guest.
RSE.Net.Dev.ScriptWhencommandRSE.Net.Dev.ScriptWhen guest|synced|noguest ScriptFile [TimeoutSeconds].
RSE.Net.Dev.SwitchLeadercommandRSE.Net.Dev.SwitchLeader [Step]: the local player's Switch Leader.
RSE.Net.Dev.WalkcommandRSE.Net.Dev.Walk X Y Seconds: the local explorer walks (movement input).
RSE.Net.ForceProxyint01 = the default authority policy reports no authority, as on a network client: logic timers (encounters, spawners, roaming enemies, NPC schedules, traps, fog, travel) stop. Debug and tests only.
RSE.Net.LogTrafficint01 = log every state section sent or received and every command packet of the co-op layer (D-140).
RSE.Net.SimulateMultiplayerint01 = the default authority policy reports a multiplayer session: the co-op time and pause rules apply (no world pause, no world time dilation, no tutorials). Debug and tests only.
RSE.Net.StatscommandRSE.Net.Stats [Seconds]: average and peak bandwidth per connection, then the status.
RSE.Net.StatuscommandLogs the co-op role, players, sections and traffic (D-140).
RSE.NPC.DebugboolfalseLiving NPCs (D-104): draws their walks, places and states.
RSE.NPC.DumpcommandLogs every living NPC of the level: activity, state, place, awake.
RSE.NPC.OverridescommandLogs the living NPCs' story overrides and the registered NPCs' activities now.
RSE.NPC.PlayerTocommandRSE.NPC.PlayerTo <X> <Y> [Yaw]: puts the player's pawn at a point of the level (on the ground), facing Yaw (scripted checks).
RSE.NPC.RefreshcommandRSE.NPC.Refresh [snap]: every living NPC looks at its schedule again (snap: appears there).
RSE.Online.AutoJoincommandSearches until a joinable session appears, then joins it. Optional: seconds to keep trying (default 60), the session label to join (default any).
RSE.Online.BattlecommandHost: marks a battle as running (1) or over (0) for join-in-progress.
RSE.Online.CharactercommandSets the preferred character (<Type:Name> primary asset id).
RSE.Online.FindcommandSearches for sessions (RSE.Online.Status lists them).
RSE.Online.HostcommandHosts a session (Online settings). Optional: max players (0 = the settings'), a session label.
RSE.Online.InvitecommandOpens the online service's invite overlay.
RSE.Online.JoincommandJoins search result <index> (default 0).
RSE.Online.LeavecommandLeaves (client) or ends (host) the session.
RSE.Online.LobbycommandOpens the lobby screen for the local player.
RSE.Online.StatuscommandLogs the session state, the lobby and the last search results.
RSE.Options.OpencommandRSE.Options.Open [Game|Audio|Display|Controls|Close]: opens the options screen (on a tab) for the primary local player (captures and scripted checks), or closes it.
RSE.Pacts.BindcommandRSE.Pacts.Bind <MemberAssetName> <PactAssetName>: binds an owned Pact to a party member.
RSE.Pacts.GivecommandRSE.Pacts.Give <PactAssetName>: the party obtains a Pact.
RSE.Pacts.ListcommandLogs owned Pacts, holders, points and learned abilities.
RSE.Pacts.PointscommandRSE.Pacts.Points <PactAssetName> <Points>: awards Pact points.
RSE.Pacts.UnbindcommandRSE.Pacts.Unbind <MemberAssetName>: takes a member's Pact away.
RSE.Paired.Disableint01 = paired animations and finishers never play (D-172).
RSE.Paired.ForceFinishersint01 = every kill with a fitting pair plays its finisher (D-172 testing).
RSE.Party.AddcommandAdds a character to the party and the classic battle formation. Args: <CharacterAssetName | Path>
RSE.Party.FieldcommandThe visible party. Args: leader [next | prev] | command <Name> | menu | refresh | state
RSE.Party.GiveExperiencecommandRSE.Party.GiveExperience <MemberAssetName|all> <Amount>: adds experience (levels up as in battle).
RSE.Party.KOcommandKnocks out a party member (testing revive). Args: <Name>
RSE.Party.LevelscommandLogs every party member's level and experience.
RSE.Party.LifecommandThe visible party's life (D-129). Args: walk <dx> <dy> [s] | walkto <x> <y> [s] | stop | corridor <length> <width> | idle | spot <sit|lean|interest> <dx> <dy> [yaw] | state
RSE.Party.ListcommandLogs each party member's HP, MP, KO and lasting statuses.
RSE.Party.RestorecommandFull HP/MP, no KO, no statuses. Args: [Name] (default: everyone)
RSE.Party.SetcommandThe party becomes exactly these characters (the first ones in the classic formation). Args: <Character> [Character...]
RSE.Party.SetHPcommandSets a party member's current HP. Args: <Name> <HP>
RSE.Party.SetLevelcommandRSE.Party.SetLevel <MemberAssetName|all> <Level>: sets a member's level.
RSE.Perf.BenchmarkcommandRSE.Perf.Benchmark [Deck] [Quit] | Stop: runs the scripted benchmark (Project Settings -> RPG Saga Engine -> Performance) and writes Saved/Perf/<timestamp>/. Deck = Steam Deck preview first; Quit = quit when done (also when -unattended).
RSE.Perf.BudgetcommandRSE.Perf.Budget [Low | Mid | High | Default] [NoMemory]: checks the next capture reports against a mobile tier's budget (Mobile Rendering settings); Default = the Steam Deck budget.
RSE.Perf.CapturecommandRSE.Perf.Capture <Seconds> <Label...> [Orbit=<Degrees>]: records a benchmark segment now (frame, game, render, GPU times, draw calls, triangles, memory). RSE.Perf.Capture Report [Name]: writes the captured segments to Saved/Perf/<timestamp>[Deck]<Name>/.
RSE.Perf.CompanionRadialcommandRSE.Perf.CompanionRadial Open | Pick <Index> | Highlight <Index> | Back | Close: drives the companion command radial without input (D-148).
RSE.Perf.FaceYawcommandRSE.Perf.FaceYaw <Degrees>: turns the player's pawn to a world yaw (D-148: the rotating minimap).
RSE.Perf.PartyMenucommandRSE.Perf.PartyMenu Open | Start | Key <Page> | Close | Next | Prev | Page <Name> | FormationPage <Auto|Formation|Party|Hidden> | Confirm | Back | Up | Down | Left | Right: opens, closes, pages or drives the party menu without input.
RSE.Perf.ProfilecommandRSE.Perf.Profile [Deck | Default | <Name>]: logs the active device profile, or switches it (the player's quality levels are kept).
RSE.Platform.DumpcommandLogs the platform users, their input devices and the app lifecycle state.
RSE.Platform.SimulateDisconnectcommandRSE.Platform.SimulateDisconnect [device]: the primary user's input device (default 0) disconnects (pause + reconnect screen).
RSE.Platform.SimulateReconnectcommandRSE.Platform.SimulateReconnect [device]: the primary user's input device (default 0) connects again.
RSE.Platform.SimulateResumecommandRSE.Platform.SimulateResume: the app comes back from suspend.
RSE.Platform.SimulateSignIncommandRSE.Platform.SimulateSignIn: the primary user signs in again.
RSE.Platform.SimulateSignOutcommandRSE.Platform.SimulateSignOut: the primary user signs out (saving stops; the game returns to the title screen).
RSE.Platform.SimulateSuspendcommandRSE.Platform.SimulateSuspend: the app is suspended (pause, save writes flushed).
RSE.PlayerscommandLogs the players (slots, host, local / remote, pawns) and the authority state (D-134).
RSE.PortraitStudio.GeneratecommandPortrait & Icon Studio in the editor (D-075). Args: [Paths=/Game/X+/Y] [Assets=<path>+<path>] [Output=/Game/Generated] [Png=<folder>] [-NoPortraits] [-NoIcons] [-Force] [-DryRun]
RSE.Puzzle.GoTocommandMoves the player in front of a level object: RSE.Puzzle.GoTo <ActorLabel> [Distance]
RSE.Puzzle.InteractcommandInteracts with a level object as the player: RSE.Puzzle.Interact <ActorLabel>
RSE.Puzzle.LockcommandDrives the open code lock: RSE.Puzzle.Lock Turn <Delta> | Select <Delta> | Submit | Leave
RSE.QuestImages.CapturecommandCaptures the journal pictures of the quests in the open level (D-155). Args: [-DryRun] [-Force] [Png=<folder>]
RSE.Quests.AbandoncommandRSE.Quests.Abandon <QuestAssetName>: abandons an active side quest that allows it.
RSE.Quests.CompletecommandRSE.Quests.Complete <QuestAssetName> [Outcome]: finishes an active quest.
RSE.Quests.DumpcommandLogs every quest's progress, the tracked quest and the ending lock.
RSE.Quests.EndingcommandLogs the ending the story leads to, the hidden score and the point of no return.
RSE.Quests.FailcommandRSE.Quests.Fail <QuestAssetName> [Outcome]: fails an active quest.
RSE.Quests.ListcommandLogs known quests with category, status, stage and the tracked one.
RSE.Quests.StartcommandRSE.Quests.Start <QuestAssetName>: starts a quest, ignoring availability.
RSE.Quests.ToastcommandRSE.Quests.Toast [Text]: shows a test notification on the quest HUD.
RSE.Quests.TraceboolfalseLogs quest starts, objectives, stage changes, outcomes and ending changes.
RSE.Quests.TrackcommandRSE.Quests.Track <QuestAssetName | none>: sets the quest on the HUD tracker.
RSE.Reinforcements.HurtLeadercommandSets the enemy leader's HP to a percent (tries a scripted event's HP trigger). Args: <Percent=40>
RSE.Reinforcements.InterruptcommandStops the call in progress. Args: [kill | silence]
RSE.Reinforcements.LookcommandThe battle camera looks at the first reinforcement runner.
RSE.Reinforcements.SetupcommandThe Free Tactics test site with a lone sentry that calls 3 friends (D-117). Args: [CallTurns=1] [leftover] [script] [points]
RSE.Reinforcements.StatuscommandLogs the running battle's reinforcement calls and runners (on screen, seen by the party).
RSE.Rooms.GocommandOpens a test room's map. Args: <RoomId> (RSE.Rooms.List shows the ids)
RSE.Rooms.InteriorcommandThe Interiors room's kit switcher. Args: kit <Name> [EntranceLabel] (no args: list the kits)
RSE.Rooms.LaunchcommandStarts an encounter through the battle launcher. Args: <EncounterAssetName> [Tactics|FreeTactics|ATB|Turn|Action] [Seed] [auto]
RSE.Rooms.LaunchercommandShows or hides the battle launcher panel (the F10 key does the same; RSE.Rooms.LauncherKey changes the key). Args: [0|1]
RSE.Rooms.LauncherKeystringF10Key that shows or hides the battle launcher panel in test rooms (a key name such as F10; None = no hotkey).
RSE.Rooms.ListcommandLists the test rooms (DA_Room_* data assets) and their maps.
RSE.Rooms.RestartcommandRestarts the launcher's battle from its start. Args: [new] (a new seed; default: the same seed)
RSE.Rooms.UsecommandThe host's pawn interacts with the first actor (by label) that has an RSE Interactable component. Args: <ActorLabel>
RSE.Rules.DumpcommandLogs the game's active rules profile and its overridden sections (with parents).
RSE.Rules.SetProfilecommandRSE.Rules.SetProfile <RulesProfileAssetName | None>: switches the game's rules profile (running battles keep theirs).
RSE.Save.LoadcommandRSE.Save.Load [slot index | auto | slot name]: loads a save and opens its map (no argument: the most recent).
RSE.Save.SimulateFaultstringMakes save backend operations fail (D-170), to test the error screens without the hardware: NoSpace or Failed (writes), Corrupt (reads), SignedOut (both). Empty = off.
RSE.Save.SlotscommandLists the save slots (autosave first), marks the Continue slot and says whether the save item is allowed now.
RSE.Save.TocommandRSE.Save.To <slot index | slot name>: saves the current game (as from a save point).
RSE.Save.UseItemcommandRSE.Save.UseItem [item path] [give]: uses the save item like the party menu would (opens the save screen).
RSE.Scene.DumpcommandLogs the playing scene and the waiting ones.
RSE.Scene.PlaycommandPlays a scene data asset: RSE.Scene.Play /Game/MyRPG/Data/Scenes/DA_X [replay]. Replays run no end effects.
RSE.Scene.RequestSkipcommandAsks to skip the playing scene as this machine's player (the Skip Scene command: co-op rules apply, D-142).
RSE.Scene.SkipcommandSkips the playing scene now (no confirmation, even if it is not skippable).
RSE.Seed.Worldint0World seed of every new game while not 0 (overrides Seeds -> Fixed World Seed): reproducible runs.
RSE.Sim.RuncommandRSE.Sim.Run <scenario.json> [Runs]: simulates the scenario headless (AI on both sides) and writes results.csv, summary.json and summary.html to Saved/BattleSim.
RSE.Sky.DumpcommandLogs what the Time of Day actor shows now (hour, sun, moon, light, fog, weather look, quality).
RSE.Sky.MeasurecommandRSE.Sky.Measure <seconds> [label]: records frame and GPU times for a while, then logs the average, the 1% low and the GPU time.
RSE.Sky.SnapcommandApplies the sky and the weather at once (the ground wetness and snow jump to their targets).
RSE.SneakcommandSneaking on / off for the explorer. Args: [0 | 1]
RSE.StateKeys.CheckcommandD-174: logs the objects of the open level (loaded actors) with a missing or duplicate State Key.
RSE.StateKeys.FixcommandD-174: gives every object of the open level that keeps saved state a unique State Key (unloaded World Partition actors too).
RSE.StateTree.CreateExamplecommandCreates (or rebuilds) the example StateTree of the RPG Saga Engine StateTree bridge (/RPGSagaEngine/Examples/AI/ST_RSE_ExampleEnemy).
RSE.Stealth.BehindcommandD-151: the explorer sneaks right behind a site group's leader. Args: <sentry | camp | near | far> [Meters = 1.5]
RSE.Stealth.HourcommandD-151: sets the game clock's hour (night and day for the light rule). Args: <Hour>
RSE.Stealth.MembercommandD-151: moves a party member (field order) to (Forward, Side) meters of the site. Args: <Index> <Forward> <Side>
RSE.Stealth.NoisecommandD-151: how far the party's non-silent actions are heard in an ambush battle, this session (0 = as with silent weapons). Args: <Meters>
RSE.Stealth.OverlaycommandD-151: the detection shapes on the ground. Args: on | off | auto (the setting)
RSE.Stealth.PlacecommandD-151: Place, as the key: sneaking = hold this spot and take the next member; else regroup.
RSE.Stealth.PutcommandD-151: the explorer at (Forward, Side) meters of the site. Args: <Forward> <Side> [Yaw] [sneak]
RSE.Stealth.SetupcommandD-151: an ambush site ahead of the explorer: a lone sentry, a camp with cover and tall grass, a group within the camp's alarm and one beyond. Args: [Meters to the camp = 24]
RSE.Stealth.StatecommandD-151: logs the overlay, the ambush tracker, the placed members and every group's awareness and takedown preview.
RSE.Stealth.StrikecommandD-151: Strike, as the key: a takedown in reach, else the ambush on the unaware group in range.
RSE.Studio.AbilityCapturecommandSaves pictures of the ability preview and Test ability (D-167). Args: <Directory> [Asset=/Path/DA_Ability_X] [Mode=Tactics|FreeTactics|ATB|Turn] [Preset=Id] [Prefix=Name] [Width=1920] [Height=1080] [Delay=0.3]. Needs a renderer and an on-screen editor.
RSE.Studio.ExportTemplateManifestcommandWrites the Studio's template manifest (D-090): the shipped state of every plugin data asset, used by Validate All Data to warn about plugin assets changed locally. Run after a deliberate change of the plugin's content.
RSE.Studio.PairCapturecommandSaves frames of a paired animation in the ability preview (D-172). Args: <Directory> Asset=/Path/DA_Pair_X [Prefix=Name] [Width=1920] [Height=1080] [WindUp=s] [After=s]. Needs a renderer.
RSE.Studio.ScreenshotcommandRenders a Studio page offscreen to a PNG (D-090, D-098). Args: <Hub|NewCharacter|Sheet|AssetSheet|Page|PropagationDemo> <File.png> [Step=N] [Character=/Path/DA_Char_X] [Asset=/Path] [Id=PageId] [Tab=N] [Width=1600] [Height=1000]. Needs a renderer (-RenderOffscreen, not -nullrhi).
RSE.Tactics.BakeZonescommandRe-bakes the grid of every tactics zone in the world.
RSE.Tactics.DemocommandDrives the active player unit through the director (presentation checks). Args: approach [Ability] | use [Ability] | wait
RSE.Tactics.DeploycommandFills the deployment of the Tactics battle being deployed (like Auto); 'start' also starts the battle. Args: [start]
RSE.Tactics.MoveUnitcommandMoves a unit to a tile if reachable. Args: <X> <Y> [UnitName]
RSE.Tactics.PreviewcommandAbility target preview (D-064). Args: style Classic|Modern|Default | highlight <Ability> | aim <Ability> <X> <Y>
RSE.Tactics.ShowReachcommandHighlights the tiles a unit can reach. Args: [UnitName]
RSE.Time.AdvancecommandRSE.Time.Advance <hours>: moves the clock forward.
RSE.Time.DumpcommandLogs the clock and the weather.
RSE.Time.HUDcommandRSE.Time.HUD 0|1: hides / shows the HUD clock.
RSE.Time.ScalecommandRSE.Time.Scale <x>: clock speed (1 = normal, 60 = a game day per real minute).
RSE.Time.SetcommandRSE.Time.Set <hour> [day] [same]: moves the clock to the hour (next occurrence; 'same' = that hour today) and optionally sets the day.
RSE.Time.StopcommandRSE.Time.Stop [0|1]: stops (1, default) or starts (0) the clock.
RSE.Time.TraceboolfalseLogs every hour, phase and day change, time skip and weather change.
RSE.Toolkit.DemocommandAbility Toolkit v2 in a Tactics battle (D-055). Args: give <Ability> [UnitId] | useat <Ability> <X> <Y> | place <UnitId> <X> <Y> | object <Object> <X> <Y> | zone <Zone> <X> <Y> [Radius]
RSE.Travel.DiscovercommandRSE.Travel.Discover <destination name | all> [0]: discovers (or forgets) world map places.
RSE.Travel.DumpcommandLists the areas and destinations, the current area and whether the world map can be used.
RSE.Travel.MapcommandOpens the world map screen (if the rules allow it now).
RSE.Travel.TocommandRSE.Travel.To <destination name | /Game/map/path> [arrival point]: travels there (fade, arrival, banner), ignoring discovery.
RSE.TraversalcommandTraversal dev commands (D-121). Args: state | goto <Link> [start|end] | use [Link] | place <X> <Y> <Z> | move <X> <Y> [Seconds] | battle
RSE.Tutorial.ClosecommandCloses the open tutorial card (as its Close button does).
RSE.Tutorial.ListcommandLists every tutorial, its trigger and whether it was seen.
RSE.Tutorial.ResetSeencommandForgets which tutorials were seen (they show again).
RSE.Tutorial.ShowcommandRSE.Tutorial.Show <asset name>: shows a tutorial now, seen or not, even with tutorials off.
RSE.Tutorial.TriggercommandRSE.Tutorial.Trigger <Tutorial.Trigger.X>: reports a tutorial trigger as if the game event happened.
RSE.UI.InputcommandMenu input without keys for the top screen (main menu, options, save slots...). Args: confirm | back | up | down | left | right | next | prev
RSE.UI.LayoutcommandRSE.UI.Layout <Dialog|PartyMenu|ATBHUD|GridHUD|LiveHUD> <Variant|ClassPath|Off>: forces a screen layout over the UI style's (P61); RSE.UI.Layout Off clears every override. Open screens rebuild.
RSE.UI.Phone.DPIfloat0DPI of the simulated phone (0 = Phone UI -> Simulated DPI).
RSE.UI.Phone.InfocommandPrints the phone UI state: phone mode, DPI, scale, safe area, minimum touch target.
RSE.UI.Phone.ResolutionstringScreen size used without a game viewport, e.g. 2400x1080 (empty = Phone UI -> Simulated Resolution).
RSE.UI.Phone.SafeAreastringSafe-area insets of the simulated phone in pixels: "Left Top Right Bottom" (empty = Phone UI -> Simulated Safe Insets).
RSE.UI.Phone.Simulateint0Phone UI simulation on PC (D-180): 0 = Project Settings -> Phone UI -> Simulate Phone, 1 = simulate a phone, 2 = off.
RSE.UI.ProceduralFramesbooltrueUI frames that need it use the procedural frame material (M_RSE_UIFrame). 0 = every frame is a flat rounded box. Applies at the next style resolve (RSE.UI.Style.Refresh).
RSE.UI.ScreenscommandLogs the open modal screens (what hides the exploration / battle HUD) and whether the input guard is active.
RSE.UI.Style.AccessibilitycommandRSE.UI.Style.Accessibility <Off|Protanopia|Deuteranopia|Tritanopia> [HighContrast 0/1] [TextScale 0.8-1.5] [ReduceMotion 0/1]: the accessibility options of every local player (not saved).
RSE.UI.Style.FramecommandRSE.UI.Style.Frame <CornerShape> [Pattern] [Ornament] [GlowWidth]: every frame of a live copy of the active style gets these (e.g. Chamfer HexGrid Bracket 6).
RSE.UI.Style.HueShiftcommandRSE.UI.Style.HueShift <Degrees>: hue shift of a live copy of the active style.
RSE.UI.Style.RefreshcommandResolves every UI style again (after changing RSE.UI.ProceduralFrames, the frame material or a style asset).
RSE.UI.Style.SeedcommandRSE.UI.Style.Seed <Token> <R> <G> <B>: sets a seed color (linear 0..1) of a live copy of the active style.
RSE.UI.Style.SetcommandRSE.UI.Style.Set <StyleId>: every local player switches to that UI style (empty = the project's default).
RSE.UI.TextEllipsisboolfalseThemed texts end with an ellipsis when they overflow (UE 5.8 can assert on it, see RSEHUDWidgetBase.cpp). Applies to widgets built afterwards.
RSE.UIStyle.CaptureEditorcommandRenders the Style Editor of a style to a PNG (1920x1080): <StyleId|Path> <File.png> [Hue] [Saturation] [Lightness]. The shift is put back after the capture.
RSE.UIStyle.CaptureWindowcommandScreenshot of the real Style Editor window (1920x1080): <StyleId|Path> <File.png> [Hue] [Saturation] [Lightness]; 'quit' closes the editor when the queue is done.
RSE.UIStyle.PreviewcommandPlays the Style Editor's preview map with a style and its UI gallery: <StyleId|Path> [capture].
RSE.Visual.DeckPreviewcommandRSE.Visual.DeckPreview [0|1]: Steam Deck device profile + scalability Low + 1280x800 window, to judge the Deck target on a PC. 0 restores the profile and the user settings.
RSE.Visual.DumpcommandRSE.Visual.Dump: logs the active visual style, where it comes from and the preset list.
RSE.Visual.StylecommandRSE.Visual.Style <Name | Next | Prev | Default>: sets the visual style preset (D-037). No argument = Next.
RSE.Visual.Test.Valueint1Test-only variable of the RSE.Visual automation tests (a visual style sets and restores it).
RSE.Weapons.Holdint-1D-185: weapon parts attach through the hold (hand socket per hold type, weapon grip, fine offset). -1 = Weapon Hold settings, 0 = raw part transform, 1 = on.
RSE.Weapons.Hold.FineOffsetsbooltrueD-185: look parts' fine offsets apply in the hold frame (0 = the pure hold, to compare).
RSE.Weapons.Hold.SkeletonSocketsint-1D-185 addendum: a skeleton socket of the weapon's hold type (or the weapon's own) holds the weapon by its pivot. -1 = Weapon Hold settings, 0 = off (profile / generated holds), 1 = on.
RSE.Weapons.PresentationbooltrueD-184: attacks show their weapon presentation (animations, muzzle flashes, tracers, trails, impacts). 0 = the plain default timelines.
RSE.Weapons.Recoilint-1D-185 addendum 2: guns without a fire clip kick with the procedural recoil. -1 = Weapon Hold settings, 0 = off, 1 = on.
RSE.Weapons.SupportHandIKint-1D-185: the support (left) hand reaches two-handed weapons with IK. -1 = Weapon Hold settings, 0 = off, 1 = on.
RSE.Weapons.SupportHandRotationint-1D-185 addendum 2: the support hand turns to the weapon's LeftHand socket rotation. -1 = Weapon Hold settings, 0 = off (position only), 1 = on.
RSE.Weather.LockcommandRSE.Weather.Lock [0|1]: locks (1, default) or unlocks (0) the current weather.
RSE.Weather.RollcommandRSE.Weather.Roll [instant]: rolls the next weather from the table now.
RSE.Weather.SetcommandRSE.Weather.Set <Rain | Weather.Rain.Storm | DA_Weather_Fog> [seconds] [lock]: changes the weather (seconds: transition, 0 = at once).
RSE.Weather.StrikecommandStrikes lightning now (flash, then thunder).

Appendix D. Data asset types

Generated from the plugin's data asset classes (UDataAsset and UPrimaryDataAsset subclasses). 127 types. Only properties you can edit on the asset are listed; inherited ones are listed under the parent class.

URSEAIProfile

Module RSECore, parent URSEPrimaryDataAsset, primary asset. Behaviour profile of the utility AI (D-020, D-056).

PropertyTypeCategoryDescription
Last Stand (LastStand)FRSEAILastStandBoss
Phases (Phases)TArray<FRSEAIPhase>BossBoss phases, entered in order. Read from the profile the unit started the battle with.
Charge Interrupt (ChargeInterrupt)FRSEAIScalarIntelligenceATB / CTB: share of the value of hitting a unit charging a big move.
Danger Awareness (DangerAwareness)FRSEAIScalarIntelligenceAwareness of the danger of a position (0: AI settings' minimum awareness, 1: full).
Decision Quality (DecisionQuality)FRSEAIScalarIntelligencePicks the best option (1) or a softmax among the top options (0: plausible mistakes). Scales the AI temperature.
Focus Fire (FocusFire)FRSEAIScalarIntelligenceShare of the AI settings' focus-fire value (finishing hurt targets).
Gates (Gates)FRSEAIBehaviourGatesIntelligenceBehaviours switched on only from an intelligence.
Pact Awareness (PactAwareness)FRSEAIScalarIntelligenceShare of the Pact multipliers (hitting a unit about to summon, and summons).
Resource Management (ResourceManagement)FRSEAIScalarIntelligenceShare of the "last item" penalty (keeping the team's last consumable).
VIPFocus (VIPFocus)FRSEAIScalarIntelligenceShare of the AI settings' VIP damage multiplier (going for the enemy leader).
Weakness Knowledge (WeaknessKnowledge)FRSEAIScalarIntelligenceAccounts for elemental weaknesses and immunities (0: judges every hit as neutral).
Damage Weight (DamageWeight)FRSEAIScalarOffenseValue per point of expected damage dealt to enemies.
Flank Weight (FlankWeight)FRSEAIScalarOffenseBonus per extra positional damage multiplier (side, back, height). 10 = +10 value for a x2 hit.
Fragile Target Weight (FragileTargetWeight)FRSEAIScalarOffensePreference for fragile targets: scales damage value by the target's missing HP.
Friendly Fire Weight (FriendlyFireWeight)FRSEAIScalarOffensePenalty multiplier for damage dealt to allies.
Isolated Target Weight (IsolatedTargetWeight)FRSEAIScalarOffensePreference for targets with no allies near them (Tactics).
Kill Bonus (KillBonus)FRSEAIScalarOffenseBonus for an action that is expected to defeat a unit, scaled by the chance to do so.
Status Weight (StatusWeight)FRSEAIScalarOffenseValue per applied status (times its chance).
Approach Weight (ApproachWeight)FRSEAIScalarPositioningValue for closing distance to the nearest enemy.
Danger Weight (DangerWeight)FRSEAIScalarPositioningPenalty per point of expected enemy damage that can reach the unit's end position next turn.
Preferred Distance Weight (PreferredDistanceWeight)FRSEAIScalarPositioning
Preferred Enemy Distance (PreferredEnemyDistance)FRSEAIScalarPositioningPreferred distance (tiles, rounded) from the nearest enemy. 0 = no preference.
Protect Radius (ProtectRadius)FRSEAIScalarPositioningTiles (rounded, at least 1).
Protect Weight (ProtectWeight)FRSEAIScalarPositioningValue for staying within ProtectRadius of the team's VIP (leader / unit to protect).
Retreat HPPercent (RetreatHPPercent)FRSEAIScalarPositioningBelow this HP percentage the unit prioritises getting away from enemies. 0 = never.
Retreat Weight (RetreatWeight)FRSEAIScalarPositioning
Resource Cost Weight (ResourceCostWeight)FRSEAIScalarResourcesPenalty per point of resource (MP...) spent.
Decision Policy (DecisionPolicy)TObjectPtr<URSEAIDecisionPolicy>RulesD-168: a Blueprint (or C++) hook with the last word on each decision of a unit with this profile: override the target of the chosen ability and the final choice among the scored options. Empty = the utility decides.
Rules (Rules)TArray<FRSEAIRule>RulesOrdered rules (gambits). The first Force rule that finds a usable action decides; Bonus and Forbid add up.
Scorers (Scorers)TArray<TObjectPtr<URSEAIScorer> >RulesCustom considerations added to every ability option (C++ or Blueprint subclasses of URSEAIScorer).
Boss Style (bBossStyle)boolStyleA boss style (listed under Boss in the wizards).
Style Base (StyleBase)TObjectPtr<URSEAIProfile>StyleThe style this profile was made from with the AI Style wizard (empty for hand-made profiles).
Style Description (StyleDescription)FTextStyleOne line for the enemy wizard and the style lists ("Keeps its distance and shoots; runs from melee").
Style Sliders (StyleSliders)FRSEAIStyleSlidersStyleThe wizard's sliders this profile was made with (0.5 = as the base style).
Heal Weight (HealWeight)FRSEAIScalarSupportValue per point of effective healing, scaled up the more hurt the ally is.
Combo Payoff Bonus (ComboPayoffBonus)FRSEAIScalarTeamBonus for using a combo's payoff element on a target with its setup status.
Combo Setup Bonus (ComboSetupBonus)FRSEAIScalarTeamBonus for applying a combo's setup status when a teammate can deliver its payoff (AI settings: Combos).
Focus Target Bonus (FocusTargetBonus)FRSEAIScalarTeamBonus for damaging the team's shared focus target (the first enemy the team committed to).
Protect Support Weight (ProtectSupportWeight)FRSEAIScalarTeamTactics: value per tile of staying close to allied Support-role units (bodyguard).
Punish Threat Bonus (PunishThreatBonus)FRSEAIScalarTeamBonus for hitting enemies that recently hurt an allied Support-role unit (per 10% of the Support's max HP).
Role (Role)ERSEAITeamRoleTeamThe unit's role in its team; coordination bonuses of allies read it.
Controller Area Bonus (ControllerAreaBonus)FRSEAIScalarTeam RoleController: bonus per enemy hit beyond the first (areas).
Controller Caster Bonus (ControllerCasterBonus)FRSEAIScalarTeam RoleController: extra bonus when the disabled enemy is a caster or a healer.
Controller Damage Scale (ControllerDamageScale)FRSEAIScalarTeam RoleController: multiplies the value of raw damage (below 1: control first).
Controller Disable Bonus (ControllerDisableBonus)FRSEAIScalarTeam RoleController: bonus per expected disable or debuff on an enemy (debuff statuses, turn delays, Action Point losses).
Damage High Value Bonus (DamageHighValueBonus)FRSEAIScalarTeam RoleDamage: bonus for hitting high-value targets: times the target's threat (0-1 among its team), plus casters and healers.
Damage Kill Focus (DamageKillFocus)FRSEAIScalarTeam RoleDamage: extra share of the kill value (0.5 = a likely kill is worth 50% more).
Support Buff Bonus (SupportBuffBonus)FRSEAIScalarTeam RoleSupport: bonus per buff on an ally that enemies can reach (on top of healing).
Tank Guard Bonus (TankGuardBonus)FRSEAIScalarTeam RoleTank: bonus for guarding: a shield or a buff on an ally that enemies can reach, or a defensive buff on itself when engaged.
Tank Interpose Weight (TankInterposeWeight)FRSEAIScalarTeam RoleTank, Tactics and Free Tactics: value for standing between an enemy and a fragile ally (Support, Controller, the VIP, a hurt ally): on the enemy's way, inside the Protect Radius of the ally. Body-blocks corridors (units block the grid).
Tank Taunt Bonus (TankTauntBonus)FRSEAIScalarTeam RoleTank: bonus per expected taunt on an enemy (taunt abilities pull the attacks onto the tank).

URSEAbilityData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. An ability: shared data (type, element, costs, effects) plus separate rules per battle mode (CLAUDE.md 2.3).

PropertyTypeCategoryDescription
Ability Type (AbilityType)FGameplayTagAbilityBattle menu group (D-065): Attack = the basic weapon attack, Skill = class techniques, Magic = spells, Action = utility (guard, steal, summon); empty = Skills. The class's command menu layout (or Project Settings -> Command Menu) maps the types to commands.
Costs (Costs)TArray<FRSEResourceCost>Ability
Description (Description)FTextAbilityWhat the ability does, in a sentence: the battle menus show it for the highlighted command (D-065). Empty = only the facts (target, cost, element).
Effects (Effects)TArray<TObjectPtr<URSEAbilityEffect> >AbilityApplied in order to every affected unit.
Element (Element)FGameplayTagAbilityElement of the ability's damage. Empty = non-elemental.
Icon (Icon)TSoftObjectPtr<UTexture2D>AbilityIcon in menus and battle lists (D-075). Empty = no icon (or the generated art library's); the Portrait & Icon Studio makes one from its element and type.
Item Costs (ItemCosts)TArray<FRSEItemCost>AbilityItems consumed per use from the user's team items (ammunition: arrows, bombs). Without them the ability is disabled (D-082).
Role Tags (RoleTags)FGameplayTagContainerAbilityD-147: what the ability is for, as the battle menus tell it ("Single-target damage", "Control", "Good vs flyers"): Ability.Role.* tags, labels in Project Settings -> Ability Info. Empty = derived from the effects (the role rules).
Target Filter (TargetFilter)ERSETargetFilterAbility
Target State (TargetState)ERSETargetStateAbilityRevive abilities target fallen units; everything else targets standing ones.
Passive (bPassive)boolPassiveA passive: never offered as an action; only its reactions and modifiers work while the unit has it (class, equipment, Pact).
Passive Modifiers (PassiveModifiers)TArray<TObjectPtr<URSEPassiveModifier> >PassiveConditional stat bonuses (e.g. +20% Attack while HP is below 30%) of a unit that has this ability.
Reactions (Reactions)TArray<TObjectPtr<URSEAbilityReaction> >PassiveAutomatic responses (counterattack, overwatch, on-hit, on-death...) of a unit that has this ability.
Action Command (ActionCommand)FRSEActionCommandRulesPresentationOptional timed press that grades the use (D-034).
Presentation (Presentation)FRSEAbilityPresentationRulesPresentationHow the ability is shown in battle (D-034): approach, moment and an optional timeline of cues.
Action Rules (ActionRules)FRSEAbilityActionRulesRulesAction battles (D-171): timing (windup, active time, recovery), delivery (melee hitbox, projectile, hitscan, area, direct), cooldown, stamina and gauge costs, poise damage, cancel window. Without Override they are derived from the other rules (Project Settings -> Action Battle -> Derived Ability Rules).
ATBRules (ATBRules)FRSEAbilityATBRulesRules
Field Rules (FieldRules)FRSEAbilityFieldRulesRules
Free Tactics Rules (FreeTacticsRules)FRSEAbilityFreeTacticsRulesRulesFree Tactics (D-091): ranges and areas in meters. Without Override they are derived from the Tactics rules.
Tactics Rules (TacticsRules)FRSEAbilityTacticsRulesRules
Use Conditions (UseConditions)TArray<TObjectPtr<URSEAICondition> >Use ConditionsWhen the ability may be used in battle (D-082): every condition must hold for the user, in every battle mode, for the player's menus (disabled with a reason), the AI and the simulator. Battle conditions (Health, Resource, Has Status, Has Tag, Equipped, Row, Position, Identity, Battle Mode, Unit Count, Turn Number...) and story conditions (Story: flags, items, party members). Conditions about "the target" do not apply here (there is none yet).
Use Conditions Text (UseConditionsText)FTextUse ConditionsWhy the ability is disabled when a use condition fails ("Only below 30% HP"). Empty = the failing condition's own text.
Exclude from Use Growth (bExcludeFromUseGrowth)boolUse GrowthNever ranks up with use (summons, items' abilities, story actions).
Use Growth (UseGrowth)TObjectPtr<URSEUseGrowthCurve>Use GrowthHow this ability ranks up with battle uses, when use growth is on. Empty = Progression Systems -> Default Use Growth.

URSEAbilityFamily

Module RSECore, parent URSEArchetype, primary asset. Ability family: "elemental attack", "healing", "status attack" (content: an Ability).

URSEAbilityPresentationBase

Module RSECore, parent URSEPrimaryDataAsset, abstract, primary asset. Base of battle presentation assets (defined in RSE).

URSEAbilityTierFamily

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A family of abilities in tiers (D-147): the base spell, a stronger one, the ultimate.

PropertyTypeCategoryDescription
Description (Description)FTextFamily
Icon (Icon)TSoftObjectPtr<UTexture2D>FamilyEmpty = the icon of the highest tier the unit knows.
Tiers (Tiers)TArray<FRSEAbilityTierDef>FamilyFrom the base tier up.

URSEActionComboData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A chain of attacks on one input (light or heavy), with timing windows (D-171).

PropertyTypeCategoryDescription
Loop (bLoop)boolComboAfter the last step the chain starts again from the first (else the last step's input restarts it after its window).
Steps (Steps)TArray<FRSEActionComboStep>Combo

URSEActionWeaponData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. What a weapon does in action battles (D-171): its light and heavy combo chains and/or its fire modes.

PropertyTypeCategoryDescription
Base Ability (BaseAbility)TObjectPtr<URSEAbilityData>WeaponThe ability combo steps and shots resolve with when they name none (empty = the unit's basic attack).
Can Block (bCanBlock)boolWeapon|GuardThe wielder may block (when the rules allow guarding).
Can Parry (bCanParry)boolWeapon|GuardThe wielder may parry (when the rules allow parrying).
Block Damage Multiplier (BlockDamageMultiplier)floatWeapon|GuardDamage taken through this weapon's block (negative = the rules' Block Damage Multiplier).
Heavy Combo (HeavyCombo)TObjectPtr<URSEActionComboData>Weapon|Melee
Light Combo (LightCombo)TObjectPtr<URSEActionComboData>Weapon|Melee
Melee Hitbox (MeleeHitbox)FRSEActionHitboxWeapon|MeleeThe hitbox of combo steps without their own.
Weapon Presentation (WeaponPresentation)TSoftObjectPtr<URSEWeaponPresentationBase>Weapon|PresentationD-184: how the weapon looks when it swings or fires in action battles (muzzle flash, tracers, impacts per surface, trail, sounds). Empty = the wielder's held weapon's presentation, else the Weapon Presentation settings' default.
Fire Modes (FireModes)TArray<FRSEActionFireMode>Weapon|RangedRanged: the fire modes, switched in order.

URSEAnimLibrary

Module RSEEditor, parent UDataAsset. The project's animation and effect library (D-087): the scanned folders, every animation and effect with its automatic and manual classification, the retargeted copies and what the library wrote into the project's data (provenance).

PropertyTypeCategoryDescription
Animations (Animations)TArray<FRSEAnimLibraryEntry>Library
Effects (Effects)TArray<FRSEFXLibraryEntry>Library
Folders (Folders)TArray<FDirectoryPath>LibraryFolders scanned (Rescan scans them again: new clips are added, automatic classifications refreshed, manual ones kept).
Provenance (Provenance)TArray<FRSEProvenanceRecord>Library
Retarget Cache (RetargetCache)TArray<FRSERetargetCacheEntry>Library

URSEAnimStyle

Module RSEEditor, parent UDataAsset. An animation style (D-087): which clips fill which animation set slots ("Sword & Shield", "Staff", "Bow", "Brawler"...) plus the style's ability animations, built from the library in one click and edited freely (hand-picked clips are never replaced by a rebuild).

PropertyTypeCategoryDescription
Actions (Actions)TArray<FRSEAnimStyleAction>Abilities
Characters (Characters)TArray<TSoftObjectPtr<URSECharacterData> >AssignmentCharacters that use this style.
Classes (Classes)TArray<TSoftObjectPtr<URSEClassData> >AssignmentEvery character of these classes uses this style (unless a style names the character itself).
Outputs (Outputs)TArray<FRSEAnimStyleOutput>OutputThe animation sets Apply wrote (one per skeleton).
Slots (Slots)TArray<FRSEAnimStyleSlot>Slots
Description (Description)FTextStyle
Max Variants (MaxVariants)int32StyleClips per slot beyond the first (random variants).
Source Folders (SourceFolders)TArray<FDirectoryPath>StyleOnly clips from these folders (and their subfolders) are used when the style is built: one pack, or the packs made for this kind of body (humanoids, not the dragon pack). Empty = the whole library.
Weapon (Weapon)FGameplayTagStyleThe weapon it is for (clips of that weapon first). Empty = any.
**Fill Action Anims (Action.Anim.*)** (bBuildActionAnims)boolStyle|BuildA7: the Action.Anim.* slots (light and heavy combo steps, dodge, block, parry, fire, reload...) of the sets' Action Anims.
Fill Ability Animations (bBuildActions)boolStyle|Build
**Fill Idle (Idle.Anim.*)** (bBuildIdle)boolStyle|Build
Fill Animation Slots (bBuildSlots)boolStyle|BuildP32d: what Build / Rebuild fills. Off = that part is left as it is. A style that only adds idle clips to characters whose sets are already good (Fill Idle only) keeps their locomotion, combat poses and attacks: Apply writes only the slots the style holds.
**Fill Traversal (Traversal.Anim.*)** (bBuildTraversal)boolStyle|Build
Traversal (Traversal)TArray<FRSEAnimStyleTraversal>TraversalD-121: traversal clips (climbing, swimming, jumping, vaulting), written to the sets' Traversal Anims; D-129: idle clips (Idle.Anim.*) to their Idle Anims.

URSEAnimTaxonomy

Module RSEEditor, parent UDataAsset. The animation taxonomy (D-087): categories, the word rules that recognize them, weapons, sides, strengths and flags, and which categories fill which animation set slots.

PropertyTypeCategoryDescription
In Place Flag (InPlaceFlag)FGameplayTagFlags
Loop Flag (LoopFlag)FGameplayTagFlagsFlags the measurements add (empty = none): a looping clip, an in-place clip, a clip whose root travels.
Root Motion Flag (RootMotionFlag)FGameplayTagFlags
Ignore Patterns (IgnorePatterns)TArray<FRSEPackNamePattern>RulesAnimations never offered (additive poses, aim offsets, facial...): classified, flagged Ignored.
Importer Profile (ImporterProfile)TSoftObjectPtr<URSECharacterPackProfile>RulesAlso asks a character pack importer profile (D-074): its animation rules vote for the categories their slots map to (Slot Mappings) with Importer Rule Weight, and its Ignore Animations mark clips ignored. Empty = only the rules here.
Importer Rule Weight (ImporterRuleWeight)floatRules
Rules (Rules)TArray<FRSELibraryWordRule>RulesWord rules for every dimension (category, weapon, side, strength, flags).
Confidence Softness (ConfidenceSoftness)floatScoringConfidence = best / (best + runner-up + Softness): larger values make the library more careful.
Folder Weight (FolderWeight)floatScoringShare of a rule's weight when it matches a folder name instead of the asset name.
Loop Pose Tolerance (LoopPoseTolerance)floatScoringA clip loops when every bone of its last pose is within this angle of its first pose.
Min Root Speed (MinRootSpeed)floatScoringRoot speed (cm/s) under which a clip counts as in place.
Review Threshold (ReviewThreshold)floatScoringBelow this confidence an animation is listed as "needs review".
Action Categories (ActionCategories)TArray<FGameplayTag>StylesCategories a style keeps as ability animations (attacks, spells by kind...): Dress My Abilities picks from them.
Slot Mappings (SlotMappings)TArray<FRSEAnimSlotMapping>StylesWhich categories fill which animation set slots when a style is built (first mapping of a slot with clips wins).
Style Avoid Flags (StyleAvoidFlags)FGameplayTagContainerStylesClips with these flags come last when a style is built (air attacks, starts and stops, crouched moves).
Traversal Mappings (TraversalMappings)TArray<FRSEAnimTraversalMapping>StylesD-121: which clips fill the traversal slots (Traversal.Anim.: climbing, swimming, jumping, vaulting) of a style's animation sets; D-129: and the idle slots (Idle.Anim.). Empty = the built-in mappings (RSEAnimLibrary::GetTraversalMappings).
Weapons (Weapons)TArray<FGameplayTag>StylesWeapons a style can be built for (Auto-build Style lists them).
Categories (Categories)TArray<FRSEAnimCategoryDef>TaxonomyThe categories and their usual measurements. A category without an entry can still be voted for by rules.
Description (Description)FTextTaxonomy

URSEAppearancePart

Module RSE, parent URSEAppearancePartBase, primary asset. A visible piece of equipment (D-046): URSEEquipmentData::AppearancePart.

PropertyTypeCategoryDescription
Part (Part)FRSEAppearancePartSpecPart

URSEAppearancePartBase

Module RSECore, parent URSEPrimaryDataAsset, abstract, primary asset. A visible piece a piece of equipment adds or swaps on its wearer (a sword, a helmet).

URSEArchetype

Module RSECore, parent URSEPrimaryDataAsset, abstract, primary asset. A template content is made from (D-095, docs/design/studio.md section 6): "Knight", "Goblin", "Merchant", "Healing spell".

PropertyTypeCategoryDescription
Library Tags (LibraryTags)FGameplayTagContainerArchetypeExtra library filters (Archetype.*).
Role (Role)FGameplayTagArchetypeRole in the library filters (Archetype.Role.*: tank, damage, support, merchant...).
Sort Order (SortOrder)int32ArchetypeOrder in the library (lower first; ties sort by name).
Summary (Summary)FTextArchetypeWhat it is, in words a beginner understands ("Sturdy front-liner who protects the party. Good first pick.").
Thumbnail (Thumbnail)TSoftObjectPtr<UTexture2D>ArchetypePicture in the archetype library. Empty = the content's own portrait or icon, or a generic card.
Content Class (ContentClass)TSubclassOf<URSEPrimaryDataAsset>TemplateClass of the content made from this archetype (a subclass of the archetype kind's base class).
Non Inherited Fields (NonInheritedFields)TArray<FName>TemplateFields content never inherits (identity: each class has its own Class Tag). They are copied once when content is created, then belong to the content.
Template (Template)TObjectPtr<URSEPrimaryDataAsset>TemplateThe values content starts from and inherits. Its class is Content Class.

URSEAreaData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A place of the world the player can be in (D-044, docs/design/zones-travel.md): a map, or a part of one when an ARSEAreaVolume links to it.

PropertyTypeCategoryDescription
Default Arrival Point (DefaultArrivalPoint)FNameAreaArrival point used when a travel into this area names none (ARSEArrivalPoint id). None = the map's default arrival point or player start.
Description (Description)FTextAreaShort text under the name (world map details, banner caption).
Map (Map)TSoftObjectPtr<UWorld>AreaThe map of this area. An area without a map is a part of a map (linked from an ARSEAreaVolume). When several areas name the same map, the map-level area is the first one found; link the others through volumes.
Show Banner (bShowBanner)boolPresentationShow the area name when the player arrives (travel, load) or walks in (if the Travel UI setting allows it).
Progression Zone (ProgressionZone)TObjectPtr<URSEProgressionZoneData>ProgressionProgression zone of this area (D-051): regular encounters fought here scale their enemies within its level range, unless the encounter names its own zone. Empty = no scaling (authored levels).
No Fast Travel (bNoFastTravel)boolRestrictionsThe world map cannot be used to leave from here (dungeons, story sequences).
No Save (bNoSave)boolRestrictionsThe save item cannot be used here (like ARSENoSaveVolume, D-010). Save points still work.

URSEArtLibrary

Module RSECore, parent UPrimaryDataAsset, primary asset. Generated art for content the project cannot edit (D-075): the Portrait & Icon Studio writes here the portraits and icons of assets outside /Game (the plugin's starter content, read-only when the plugin is installed from Fab).

PropertyTypeCategoryDescription
Entries (Entries)TMap<FSoftObjectPath,FRSEArtEntry>ArtContent asset path -> its generated art.

URSEAttributeRegistry

Module RSECore, parent URSEPrimaryDataAsset, primary asset. The attributes and resources of a project (D-054, docs/design/attributes.md).

PropertyTypeCategoryDescription
Attributes (Attributes)TArray<FRSEAttributeDefinition>Attributes
Resources (Resources)TArray<FRSEResourceDefinition>Resources

URSEBarkPoolData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A pool of NPC lines (D-157): villagers' small talk, a town's rumours, guards, merchants.

PropertyTypeCategoryDescription
Lines (Lines)TArray<FRSEBarkLine>Barks

URSEBattleMenuConfig

Module RSECore, parent URSEPrimaryDataAsset, primary asset. What the battle menus offer (D-122, docs/design/battle-menus.md): the providers that fill the menu, in order, and how the categories look (label, icon, shape, hidden).

PropertyTypeCategoryDescription
Use Default Groupings (bUseDefaultGroupings)boolGroups
Groupings (Groupings)TArray<FRSEBattleMenuGrouping>GroupsD-147: how categories group their entries (spells by element, skills by role; each group a sub-ring). Empty = Project Settings -> Ability Info -> Default Groupings, unless Use Default Groupings is off (no groups).
Categories (Categories)TArray<FRSEBattleMenuCategoryDef>MenuLabels, icons and shapes of categories (by id), and their order: listed categories come first, in this order.
Providers (Providers)TArray<TObjectPtr<URSEBattleMenuProvider> >MenuFill the menu in this order; a provider skips abilities an earlier one already added.

URSEBattleMenuStyle

Module RSE, parent URSEPrimaryDataAsset, primary asset. A battle menu style (D-122, docs/design/battle-menus.md): its id, the presenter widget that shows it and its look.

PropertyTypeCategoryDescription
Rich Tooltip (bRichTooltip)boolAbility InfoThe tooltip tells everything about an ability: role tags, target and range, element and power, effects with chances, known weaknesses.
Show Target Badges (bShowTargetBadges)boolAbility InfoEach ability icon carries its targeting badge (one target, area, line, cone, self, ally): Battle Menus -> Target Badges.
Tooltip Affinity Hints (bTooltipAffinityHints)boolAbility InfoThe tooltip names the opponents on the field known (bestiary) to be weak to or resist the ability's element.
Target Badge Back Color (TargetBadgeBackColor)FRSEUIColorAbility Info
Target Badge Color (TargetBadgeColor)FRSEUIColorAbility Info
Target Badge Scale (TargetBadgeScale)floatAbility InfoSize of the badge (share of the icon), its disc and its glyph's tint.
Tooltip Effect Lines (TooltipEffectLines)int32Ability InfoMost effect lines the tooltip lists.
Show Tooltip (bShowTooltip)boolLookShow the highlighted entry's tooltip (name, cost, description, why it cannot be used).
Corner Radius (CornerRadius)floatLookCorner radius of slots and slices.
Disabled Opacity (DisabledOpacity)floatLookOpacity of entries that cannot be used now.
Disabled Shade (DisabledShade)FRSEUIColorLook
Icon Size (IconSize)floatLookSize of entry icons (pixels at 1080p).
Slot Color (SlotColor)FRSEUIColorLookFill of a slot / slice, highlighted, and the shade over one that cannot be used.
Slot Highlight Color (SlotHighlightColor)FRSEUIColorLook
Steam Deck Scale (SteamDeckScale)floatLookScale on a Steam Deck (readability on its 7" screen).
Tooltip Width (TooltipWidth)floatLookWidth of the tooltip (pixels at 1080p).
Description (Description)FTextStyleOne line in the options menu.
Presenter Class (PresenterClass)TSoftClassPtr<URSEBattleMenuPresenter>StyleThe widget that shows the menu (C++ or Widget Blueprint).
Style Id (StyleId)FNameStyleStable id: project settings and the player's option refer to it ("List", "Radial", "Hotbar").

URSEBattleMenuStyle_Hotbar

Module RSE, parent URSEBattleMenuStyle, primary asset. A bottom bar of ability slots in the style of modern CRPGs (D-122): hotkeys, pages, drag to reorder (saved per character).

PropertyTypeCategoryDescription
Allow Reorder (bAllowReorder)boolHotbarSlots can be dragged onto each other with the mouse (the order is saved per character).
Bottom Offset (BottomOffset)floatHotbarDistance of the bar from the bottom of the screen (pixels at 1080p).
Hotkey Keys (HotkeyKeys)TArray<FKey>HotbarKeys of the slots on the current page, in order (1-0 by default).
Reorder Keys (ReorderKeys)TArray<FKey>HotbarGamepad: picks up the highlighted slot, then drops it on the next one highlighted (reorder without a mouse).
Slot Size (SlotSize)floatHotbarSize of a slot and the gap between slots (pixels at 1080p).
Slot Spacing (SlotSpacing)floatHotbar
Slots Per Page (SlotsPerPage)int32HotbarSlots on one page of the bar (the hotkeys cover the first ones).
Tooltip Reserve (TooltipReserve)floatHotbarRoom kept above the bar for its tooltip (pixels at 1080p): the HUD's message line sits above it.
Turn Button Width (TurnButtonWidth)floatHotbarWidth of the turn buttons right of the bar (Move, Jump, Flee, End Turn).

URSEBattleMenuStyle_List

Module RSE, parent URSEBattleMenuStyle, primary asset. The static list of D-106: the command panel on the left.

PropertyTypeCategoryDescription
Panel Offset (PanelOffset)FVector2DListWhere the panel sits: offset from the left middle of the screen (pixels at 1080p).

URSEBattleMenuStyle_Radial

Module RSE, parent URSEBattleMenuStyle, primary asset. A radial menu on the active unit: categories on the first ring, their entries on the second (D-122).

PropertyTypeCategoryDescription
Anchor Height (AnchorHeight)floatRadialHeight above the unit's feet the ring is placed from (cm).
Anchor to Unit (bAnchorToUnit)boolRadialThe ring opens at the active unit (else at the screen's center).
Open at Turn Start (bOpenAtTurnStart)boolRadialThe ring opens by itself at each decision of the player's unit; off = only on demand (a toggle key, an Open Key such as the right mouse button, Confirm, or the small button left beside the unit). Players can change it in Options -> Game.
Closed Label (ClosedLabel)FTextRadialLabel of the small button left on the unit while the ring is closed.
Dead Zone (DeadZone)floatRadialStick deflection (0..1) needed to pick a slice. The mouse picks only inside the ring's outer edge, outside the center disc.
Max Slices (MaxSlices)int32RadialMost slices on a ring; more entries go on pages (mouse wheel, shoulder buttons).
Open Keys (OpenKeys)TArray<FKey>RadialD-128: keys or mouse buttons that only open a closed ring (right click); Cancel closes it.
Screen Margin (ScreenMargin)floatRadialThe ring stays this far inside the screen's edges (pixels at 1080p).
Toggle Keys (ToggleKeys)TArray<FKey>RadialKeys that open or close the ring (keyboard and gamepad). Confirm also opens a closed ring.
Back Button Color (BackButtonColor)FRSEUIColorRadial|BackD-152: the button's fill, and under the mouse.
Back Button Hover Color (BackButtonHoverColor)FRSEUIColorRadial|Back
Back Label (BackLabel)FTextRadial|BackD-152: the button's label in a sub-ring and on the first ring.
Back Prompt Keys (BackPromptKeys)TArray<FKey>Radial|BackD-152: the keys the button names, those of the device in use (keyboard and mouse: Esc / right click; gamepad: B).
Outside Click Backs (bOutsideClickBacks)boolRadial|BackD-152: a click outside the ring backs out of a sub-ring (to the previous ring) and closes the first ring. A quick ring shown small (D-128) lets the click through to the world (walking, aiming).
Right Click Backs (bRightClickBacks)boolRadial|BackD-152: the right mouse button on an open ring is Back (a sub-ring to the previous ring; the first ring closes).
Show Back Button (bShowBackButton)boolRadial|BackD-152: a Back / Close button in the center disc, with its keys (clicking the center does the same).
Close Label (CloseLabel)FTextRadial|Back
Badge Color (BadgeColor)FRSEUIColorRadial|LookThe badge drawn when an entry has no icon (its initials on this fill).
Category Labels (bCategoryLabels)boolRadial|LookNames on the slices of the first ring (categories) and of the second (entries; long names: the tooltip shows them).
Entry Labels (bEntryLabels)boolRadial|Look
Show Aura (bShowAura)boolRadial|LookD-147: the transparent aura around the ring: the dark band behind the slices (showing in the gaps) and the glow fading out around the highlighted slice. Off (default): crisp slices, the highlighted one outlined.
Slice Details (bSliceDetails)boolRadial|LookThe cost or the reason under each slice's name.
Tier Details (bTierDetails)boolRadial|LookD-147: rings of a tier family's tiers show each tier's name and cost on its slice.
Center Color (CenterColor)FRSEUIColorRadial|LookThe center disc and its edge.
Center Edge Color (CenterEdgeColor)FRSEUIColorRadial|Look
Description Lines (DescriptionLines)int32Radial|LookLines of description the center disc shows at most.
Edge Color (EdgeColor)FRSEUIColorRadial|Look
Glow Color (GlowColor)FRSEUIColorRadial|LookThe glow outside the highlighted slice (with the aura): its color (fading out) and width (pixels at 1080p).
Glow Width (GlowWidth)floatRadial|Look
Group Accent Width (GroupAccentWidth)floatRadial|LookD-147: width of the band in a group's accent color along the outer edge of group slices and their entries (pixels at 1080p; 0 = none).
Highlight Edge Color (HighlightEdgeColor)FRSEUIColorRadial|LookWithout the aura: the outline of the highlighted slice (color, thickness in pixels at 1080p).
Highlight Edge Thickness (HighlightEdgeThickness)floatRadial|Look
Ring Color (RingColor)FRSEUIColorRadial|LookFill behind the slices (shows in the gaps), the separators between slices and the ring's edge lines.
Separator Color (SeparatorColor)FRSEUIColorRadial|Look
Separator Thickness (SeparatorThickness)floatRadial|Look
Tooltip Color (TooltipColor)FRSEUIColorRadial|LookThe tooltip panel's fill and edge.
Tooltip Edge Color (TooltipEdgeColor)FRSEUIColorRadial|Look
Tooltip Gap (TooltipGap)floatRadial|LookGap between the ring and its tooltip panel (pixels at 1080p).
Tooltip Placement (TooltipPlacement)ERSERadialTooltipRadial|LookWhere the highlighted slice's tooltip shows (Beside: a panel, Tooltip Width wide, on the far side from the unit).
Highlight Seconds (HighlightSeconds)floatRadial|MotionSeconds a slice takes to light up or fade back.
Open Scale From (OpenScaleFrom)floatRadial|Motion
Open Seconds (OpenSeconds)floatRadial|MotionOpen / close: seconds, and the scale it grows from.
Anchor (Anchor)ERSERadialAnchorRadial|PlacementD-128: beside the unit (default) or on it.
Other Unit Clearance (OtherUnitClearance)floatRadial|PlacementOther units the ring tries not to cover: their screen radius (pixels at 1080p).
Placement Angles (PlacementAngles)TArray<float>Radial|PlacementSides tried, in order of preference (degrees on screen: 0 = right, 90 = below, -90 = above, 180 = left). The first side that keeps the unit clear and covers the fewest other units wins; the side is kept while the ring is open.
Placement Gap (PlacementGap)floatRadial|PlacementGap between the unit's clear area and the ring (pixels at 1080p).
Unit Clearance (UnitClearance)floatRadial|PlacementBeside the unit: the screen radius around the unit kept clear (pixels at 1080p); the unit's own projected size is used when larger (a close camera).
Quick Ring (bQuickRing)boolRadial|Quick RingD-128: the quick ring. Until the mouse comes near it (or the stick / D-pad picks a slice, or a category opens) the ring stays small, icons only; it grows to its full size, with the names, while used.
Expand Hold Seconds (ExpandHoldSeconds)floatRadial|Quick RingAfter a stick, D-pad or keyboard choice the ring stays full for this long (no mouse to hover with).
Expand Seconds (ExpandSeconds)floatRadial|Quick RingSeconds to grow or shrink.
Quick Ring Hover Margin (QuickRingHoverMargin)floatRadial|Quick RingThe ring grows when the mouse is within this distance of its edge (pixels at 1080p).
Quick Ring Scale (QuickRingScale)floatRadial|Quick RingSize of the quick ring (share of the full ring).
Arc Steps (ArcSteps)int32Radial|RingArc steps per slice (smoothness of the curves; more = rounder, a few more vertices).
Center Radius (CenterRadius)floatRadial|RingRadius of the center disc (pixels at 1080p; at most the inner radius).
Inner Radius (InnerRadius)floatRadial|RingRadii of the ring of slices (pixels at 1080p): inner and outer edge.
Outer Radius (OuterRadius)floatRadial|Ring
Slice Gap Degrees (SliceGapDegrees)floatRadial|RingGap between two slices (degrees).

URSEBattlePresentationData

Module RSE, parent URSEAbilityPresentationBase, primary asset. A battle presentation (D-034): a timeline of cues (movement, montages, VFX, sounds, camera shots, hit-stop, slow motion, flashes, banners, impacts).

PropertyTypeCategoryDescription
Feel (Feel)FRSEPresentationFeelFeelD-115: trails, cast and impact effects, the magic circle, the telegraph and the projectile around the timeline.
Pacing (Pacing)FRSEActionPacingFeelD-115: the pace of this presentation (wind-up, cast, hit-stop, slide, recovery). Override off = the ability's kind default.
Skippable (bSkippable)boolTimelineConfirm / Cancel skip it (cinematic moments). Ordinary actions follow the settings.
Cues (Cues)TArray<TObjectPtr<URSEBattleCue> >Timeline

URSECampaignProgressionData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. The whole campaign for the Progression Designer (D-051, docs/design/progression-designer.md): the zones in order, the standard party and its classes, the targets and how to simulate.

PropertyTypeCategoryDescription
Alternative Parties (AlternativeParties)TArray<FRSEBalancePartyComposition>BalanceOther party compositions "Balance My Campaign" plays next to the standard party (e.g. no area magic, all melee). They never get encounter proposals of their own; they reveal class outliers.
Max Level (MaxLevel)int32CampaignLevel cap the campaign is designed for (checked against Progression settings, MaxLevel).
Optional Content (OptionalContent)TArray<FRSEProgressionOptionalTarget>CampaignOptional challenges and their recommended levels.
Zones (Zones)TArray<TObjectPtr<URSEProgressionZoneData> >CampaignThe zones in campaign order. Optional zones (post-game) are played after the critical ones.
Optional Battle Share (OptionalBattleShare)floatPartyShare of each zone's optional battles the standard player fights (0 = critical path only, 1 = everything). The grind index still compares with every battle the zone offers.
Party (Party)TArray<FRSEProgressionPartyMember>PartyThe standard party the projection plays (main characters with their fixed classes).
Standard Classes (StandardClasses)TArray<TObjectPtr<URSEClassData> >PartyThe project's standard main classes: the only classes whose stat growth the advisor may change. Enemies sharing one of these classes change with it (the advisor measures that too).
Enemy Intelligence (EnemyIntelligence)floatSimulationAI intelligence of the enemies (0-1); negative = as a new game starts (adaptive difficulty's start value within each encounter's bounds).
Grind Scenarios (GrindScenarios)TArray<float>SimulationExtra-grind scenarios played next to the standard one: each value is the extra share of regular battles (0.3 = the player fights 30% more battles in every zone).
Key Battle Retries (KeyBattleRetries)int32Simulation
Player Intelligence (PlayerIntelligence)floatSimulationAI intelligence playing the party (0-1).
Retry Grind Battles (RetryGrindBattles)int32SimulationA lost key battle is retried after this many extra regular battles of the zone, at most KeyBattleRetries times.
Rules Profile (RulesProfile)TObjectPtr<URSERulesProfile>SimulationRules profile the campaign is played under (empty = the game's default profile). The advisor writes enemy rules here when it owns a Progression section.
Seed (Seed)int32SimulationFirst seed: every run of the same data gives the same projection.
Tactics Grid (TacticsGrid)ERSEProgressionGridSourceSimulation
Targets (Targets)FRSEProgressionTargetsTargets--- Targets ---

URSECaravanData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A merchant caravan (D-157).

PropertyTypeCategoryDescription
Guard Barks (GuardBarks)TArray<TSoftObjectPtr<URSEBarkPoolData> >GuardsLines of guards without their own.
Guards (Guards)TArray<FRSECaravanGuard>Guards
Wagon Mesh (WagonMesh)TSoftObjectPtr<UStaticMesh>LookThe wagon (empty = an engine cube).
Wagon Scale (WagonScale)FVectorLook
Merchant Appearance (MerchantAppearance)TSoftObjectPtr<URSECharacterAppearanceBase>Merchant
Merchant Barks (MerchantBarks)TArray<TSoftObjectPtr<URSEBarkPoolData> >MerchantThe merchant's lines (calls on the road, rumours from the last town).
Merchant Name (MerchantName)FTextMerchant
Merchant Offset (MerchantOffset)FVector2DMerchantWhere the merchant walks relative to the wagon (X along the road, Y to the side, cm).
Shop (Shop)TSoftObjectPtr<URSEShopData>MerchantWhat the merchant sells (Open Shop).
Trades Only at Stops (bTradesOnlyAtStops)boolRoadThe merchant trades only at stops (off: also when hailed on the road).
Catch Up Multiplier (CatchUpMultiplier)floatRoadHow much faster than its pace it walks to catch up after a halt.
Halt Radius (HaltRadius)floatRoadIt halts while a player is this near on the road (they can trade), then catches up with its timetable (0 = never halts).
Default Wait Hours (DefaultWaitHours)floatTimetableGame hours it waits at a stop without its own wait.
Km Per Game Hour (KmPerGameHour)floatTimetableThe pace on the road (km per game hour; the clock moves it, so a stopped clock stops it).
Start Hour (StartHour)floatTimetableThe game hour of day 1 at which it leaves the first stop (the timetable repeats from there).

URSECardData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. One card of the War card game (D-028).

PropertyTypeCategoryDescription
Description (Description)FTextCardFlavour text shown in the album. Localizable.
Element (Element)FGameplayTagCardOptional element, for flavour only (frame colour, album filter). No rule uses it.
Rarity (Rarity)FGameplayTagCardRarity tier; its value range is in the Cards settings.
Value (Value)int32CardThe card's strength: the higher value wins a trick.
Icon (Icon)TSoftObjectPtr<UTexture2D>PresentationCard art, loaded on demand by the UI.

URSECardOpponentData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. An NPC who plays cards (D-028).

PropertyTypeCategoryDescription
Deck (Deck)TArray<TObjectPtr<URSECardData> >DeckThe opponent's deck (1 to MaxDeckSize cards, duplicates allowed).
First Win Rewards (FirstWinRewards)TArray<TObjectPtr<URSECardData> >RewardsCards given once, on the player's first victory (the opponent's unique cards).
Allow Rematch (bAllowRematch)boolRulesFalse: the opponent refuses to play again once beaten.
Play for Stake (bPlayForStake)boolRulesWhether the winner takes a card from the loser's deck (the D-028 stake). Off for friendly or tutorial matches.
Challenge Conditions (ChallengeConditions)FRSEConditionSetRulesWhen the opponent accepts a challenge (empty = always), e.g. a story flag or a party member.

URSECharacterAnimSet

Module RSE, parent UDataAsset. The animations of a character (D-046), shared by every character on the same skeleton and style.

PropertyTypeCategoryDescription
Action Anims (ActionAnims)FRSEActionAnimsActionD-171 (A3): what this character plays in action battles when its weapon has no entry of its own in Weapon Action Anims (combo steps, shots, reload, dodge, parry, guard, stagger). Written by the animation library or by hand.
Weapon Action Anims (WeaponActionAnims)TArray<FRSEActionWeaponAnims>ActionD-171 (A3): per action weapon (a sword, a rifle...): its own clips, over Action Anims.
Loop Victory (bLoopVictory)boolBattle StatesVictory loops until the battle is left; off = it plays once and holds.
Casting (Casting)FRSECharacterAnimBattle StatesLoops while casting (SetBattleState Casting).
Charging (Charging)FRSECharacterAnimBattle StatesLoops while an ATB action charges.
Down (Down)FRSECharacterAnimBattle StatesKnock-out (from the front, and for every side without its own animation): plays once and holds the last pose until revived.
Down Back (DownBack)FRSECharacterAnimBattle StatesKnock-out by a hit in the back. Empty = Down.
Down Left (DownLeft)FRSECharacterAnimBattle StatesKnock-out by a hit on the left side. Empty = Down.
Down Right (DownRight)FRSECharacterAnimBattle StatesKnock-out by a hit on the right side. Empty = Down.
Get Up (GetUp)FRSECharacterAnimBattle StatesGetting up when revived, from the knock-out's lying pose back to standing (D-067). Knock-outs listed in Recoveries use their own get-up; the others use GetUp. Empty = the knock-out blends back into the state.
Guard (Guard)FRSECharacterAnimBattle StatesLoops while a block window is open.
Ready (Ready)FRSECharacterAnimBattle StatesCombat idle while in battle and standing still (loops). Empty = the locomotion idle.
Recoveries (Recoveries)TArray<FRSEKnockOutRecovery>Battle StatesGet-ups that match particular knock-out animations (each lies differently).
Victory (Victory)FRSECharacterAnimBattle StatesBattle won.
Pose Anims (PoseAnims)TMap<ERSECuePose,FRSEPoseAnim>CuesAnimations for the procedural pose cues (Lunge, Hop, Recoil...): the default timelines (no presentation asset) and Pose cues look animated on real characters. Poses without an entry stay procedural.
Idle Anims (IdleAnims)TMap<FGameplayTag,FRSECharacterAnim>IdleD-129: idle slot (Idle.Anim.*) -> clip, played by the visible party while the leader rests (stretch, look around, yawn, juggle, check the weapon, chat, sit, lean...; the profiles' behaviours name the slots). Written by the animation library's styles (D-087) or by hand. A missing slot falls back to its parent tag (Idle.Anim = any idle fidget), then to Project Settings -> Character Visuals -> Default Idle Anims; with nothing the behaviour is skipped.
Interact Anims (InteractAnims)TMap<FGameplayTag,FRSECharacterAnim>InteractD-157: world interaction slot (Interact.Anim.*) -> clip: the strike that breaks a barrel or a crate. A missing slot falls back to its parent tag, then to Project Settings -> Interaction Visibility -> Default Interact Anims, then to the Lunge pose anim; with nothing at all a short procedural lunge plays.
Locomotion (Locomotion)TSoftObjectPtr<UBlendSpace>LocomotionIdle / walk / run blend space (the UE mannequin's: X = direction in degrees, Y = speed in cm/s). The Anim Blueprint reads it.
Locomotion Speed Axis (LocomotionSpeedAxis)int32LocomotionAxis of the locomotion blend space that carries the speed (0 = X, 1 = Y; the UE mannequin's is Y). Stride warping reads its maximum.
Approach (Approach)FRSECharacterAnimMovementDash toward the target when a battle cue moves the character there (Move, To Target). Empty = locomotion.
Turn 180 (Turn180)FRSECharacterAnimMovementTurn in place for about-faces (135 degrees and more, either way). Empty = the 90 degree turn of that side.
Turn Left 90 (TurnLeft90)FRSECharacterAnimMovementTurn in place to the left, standing (a Tactics facing change, turning toward a target). An in-place clip: the mesh turns procedurally over the clip's length. Played for turns of at least Character Visuals -> Turn Anim Min Angle. Empty = only the procedural turn.
Turn Right 90 (TurnRight90)FRSECharacterAnimMovementTurn in place to the right (see TurnLeft90). Empty = only the procedural turn.
Expressions (Expressions)TMap<FGameplayTag,FRSECharacterAnim>PortraitsExpression (Dialog.Expression.*) -> pose / animation for emotion portraits (studio) and live portraits. Missing = the portrait pose.
Portrait Pose (PortraitPose)FRSECharacterAnimPortraitsPose of generated portraits and idle of live dialog portraits. Empty = the locomotion idle (or the reference pose in the studio).
Talk (Talk)FRSECharacterAnimPortraitsLooping talk animation of live dialog portraits. Empty = a small procedural sway and nod while the line types.
Blocked (Blocked)FRSECharacterAnimReactionsOne-shot when a hit lands on a guarding character. Empty = Hit.
Dodge (Dodge)FRSECharacterAnimReactionsOne-shot sidestep on a miss. Empty = only the procedural sidestep.
Hit (Hit)FRSECharacterAnimReactionsOne-shot reaction to a hit (from the front, and for every side without its own animation).
Hit Back (HitBack)FRSECharacterAnimReactionsHit in the back (a flank attack in Tactics). Empty = Hit.
Hit Heavy (HitHeavy)FRSECharacterAnimReactionsA critical hit from the front (a heavier stagger). Empty = Hit.
Hit Left (HitLeft)FRSECharacterAnimReactionsHit on the left side. Empty = Hit.
Hit Right (HitRight)FRSECharacterAnimReactionsHit on the right side. Empty = Hit.
Action Slot (ActionSlot)FNameSetupSlot node of the Anim Blueprint where states, reactions and cue animations play.
Traversal Anims (TraversalAnims)TMap<FGameplayTag,FRSECharacterAnim>TraversalD-121: traversal slot (Traversal.Anim.*) -> clip: climbing, swimming, jumping, vaulting. Written by the animation library's styles (D-087) or by hand. A missing slot falls back to its parent tag, then to Project Settings -> Traversal -> Default Anims; with nothing at all the body moves along the traversal in its current pose.

URSECharacterAppearance

Module RSE, parent URSECharacterAppearanceBase, primary asset. How a character looks (D-046): modular parts, material variants, the Anim Blueprint and the animation set.

PropertyTypeCategoryDescription
Anim Class (AnimClass)TSoftClassPtr<UAnimInstance>AnimationAnim Blueprint of the leader (a thin child of URSECharacterAnimInstance).
Anim Set (AnimSet)TSoftObjectPtr<URSECharacterAnimSet>AnimationLocomotion, battle states, reactions and cue animations.
Weapon Hold Profile (WeaponHoldProfile)TSoftObjectPtr<URSEWeaponHoldProfile>AnimationD-185: how weapons sit in this look's hands (hand sockets per hold type, support hand IK, stance clips), over the body preset's. Empty = the body preset's, else Weapon Hold settings -> Profiles for the skeleton, else holds generated from the skeleton.
Anchor Grips (AnchorGrips)TMap<FGameplayTag,FTransform>PartsHow item meshes are held at each anchor of this look (D-126 addendum), over the body preset's Anchor Grips: the transform, in the anchor socket's space, of an item mesh authored with its grip at the origin and its blade or shaft along +Z. An item's Worn Transform is applied in that frame. Missing = the socket's own frame.
Anchors (Anchors)TMap<FGameplayTag,FName>PartsSockets (or bones) of the presentation anchors (Appearance.Anchor.*) on this look's leader mesh (D-074), over the body preset's. Battle cues that spawn at an anchor use them; an anchor without a socket uses the chest point.
Body Preset (BodyPreset)FNamePartsA body of the project (Project Settings -> RPG Saga Engine -> Character Visuals -> Body Presets, D-070): its mesh fills the leader part when that part has no mesh (the part's materials and colors still apply), and its Anim Blueprint and animation set are used when Anim Class / Anim Set are empty. Lets looks shipped without meshes use whatever body the project has; a preset the project does not define leaves the placeholder shapes.
Capsule Half Height (CapsuleHalfHeight)floatPartsCapsule half height of the exploration character wearing this look (cm), over the body preset's. 0 = the body preset's.
Capsule Radius (CapsuleRadius)floatPartsCapsule radius of the exploration character wearing this look (cm), over the body preset's (D-074 addendum: the character pack importer stores the whole body on the look). 0 = the body preset's, else the character's own.
Chest Height (ChestHeight)floatPartsHeight (cm above the feet) of the chest: where prompts and battle shots aim. 0 = the placeholder value.
Leader Slot (LeaderSlot)FGameplayTagPartsSlot of the leader part (Appearance.Slot.Body). Unset = the first skeletal part.
Melee Reach (MeleeReach)floatPartsContact reach of this body's melee attacks (cm, D-079), over the body preset's. 0 = the body preset's.
Mesh Transform (MeshTransform)FTransformPartsOffset of the whole character from the actor's feet (UE mannequins face +Y: yaw -90).
Modular Body (ModularBody)ERSEModularBodyPartsWhether worn armor can change this body (D-126). Rigid pieces (weapons, shields, hats on sockets) always show, and a piece for a slot the look already has always swaps it; a skeletal piece for a new slot shows only on a modular body.
Parts (Parts)TArray<FRSEAppearancePartSpec>PartsParts; the first skeletal part with the body slot (or the first skeletal part) is the leader that animates.
Unarmed Shot Anchor (UnarmedShotAnchor)FGameplayTagPartsD-185 addendum 2: where this character fires ranged attacks from when it holds no gun (a creature's breath, a caster's palm): an anchor such as Appearance.Anchor.Chest or a hand. Empty = Weapon Presentation settings -> Unarmed Shot Anchor.
Variants (Variants)TArray<FRSEAppearanceVariant>VariantsAlternative looks; the component picks one by name (none = the parts as they are).

URSECharacterAppearanceBase

Module RSECore, parent URSEPrimaryDataAsset, abstract, primary asset. How a character looks (D-046): meshes, materials, animations.

URSECharacterData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A specific character or enemy type: its fixed class plus personal traits.

PropertyTypeCategoryDescription
Battle Barks (BattleBarks)FRSEBattleBarksBattleD-115: what this character shouts in live battles: when it turns toward the party at the start, and per intent on its turn. Empty lists use Project Settings -> RPG Saga Engine -> Battle Feel (Entry -> Alert Barks, Intent).
Control (Control)ERSEBattleControlBattlePlayer units are usually Player; guests can be either; enemies are AI.
Default AIProfile (DefaultAIProfile)TObjectPtr<URSEAIProfile>BattleBehaviour when controlled by the AI. Encounters may override it.
Default ATBRow (DefaultATBRow)ERSEATBRowBattlePreferred row in ATB battles (casters and archers usually stand in the back).
Experience Reward (ExperienceReward)int32BattleExperience the party shares when this character is defeated as an enemy (D-030). 0 = the formula in Progression settings.
Loot Table (LootTable)TObjectPtr<URSELootTable>BattleMoney and items the party may get when this character is defeated as an enemy (D-042).
Bestiary Category (BestiaryCategory)FGameplayTagBestiaryBestiary group (Bestiary.Category.*): the list is sorted by it. Empty = uncategorized.
Bestiary Description (BestiaryDescription)FTextBestiaryBestiary text (D-047), shown once the enemy has been met. Empty = no description.
Hide from Bestiary (bHideFromBestiary)boolBestiaryNever recorded in the bestiary (story-only enemies, secret bosses, test units).
Class (Class)TObjectPtr<URSEClassData>CharacterFixed class. Class data is lightweight, so a hard reference is fine.
Personal Affinities (PersonalAffinities)TArray<FRSEElementAffinityEntry>CharacterPersonal elemental affinities, combined with the class ones.
Personal Modifiers (PersonalModifiers)TArray<FRSEStatModifier>CharacterPersonal differences from the class (e.g. a sturdier knight).
Personal Traits (PersonalTraits)FGameplayTagContainerCharacterPersonal traits (Trait.*), combined with the class ones.
Roster (Roster)ERSECharacterRosterCharacter
Starting Level (StartingLevel)int32Character
Bag Size (BagSize)FIntPointEquipmentPer Character inventory (D-143): this character's bag size (columns x rows). 0 = its class's, else Inventory Rules -> Bag.
Guest (bGuest)boolEquipmentTemporary party member: always wears its DefaultEquipment and the player cannot change it (D-011).
Default Equipment (DefaultEquipment)TArray<TObjectPtr<URSEEquipmentData> >EquipmentEquipment the character starts with; fixed and locked for guests and enemies (D-011).
Appearance (Appearance)TSoftObjectPtr<URSECharacterAppearanceBase>PresentationHow the character looks in the world and in battle (D-046): a URSECharacterAppearance (meshes, materials, animations). Empty = the placeholder shapes. Presentation only: battles and saves never read it.
Attack Order (AttackOrder)ERSEAttackOrderPresentationOrder of the Attack Presentations: Sequential plays the combo A, B, C, A...; Random picks one each time.
Attack Presentations (AttackPresentations)TArray<TSoftObjectPtr<URSEAbilityPresentationBase> >PresentationLooks for this character's plain attacks (abilities typed Ability.Type.Attack without an override above), taken in turn so a basic attack plays the character's combo. Empty = the ability's own look.
Follower Profile (FollowerProfile)TSoftObjectPtr<URSEFollowerProfile>PresentationD-129: how this character follows the leader and lives while the party rests (its pace, its drift, its own idle behaviours). Empty = the party's (Project Settings -> Party Field -> Follower Profile).
Portrait (Portrait)TSoftObjectPtr<UTexture2D>PresentationPortrait for menus and battle cards (D-075): member cards, results, turn order chips, target card, bestiary; the dialog box uses it when the character's speaker has no portrait. Empty = the initial (or the generated art library's portrait). The Portrait & Icon Studio fills it (RPG Saga -> Content -> Generate Portraits & Icons).
Portrait Variants (PortraitVariants)TMap<FName,TSoftObjectPtr<UTexture2D> >PresentationPortraits of the appearance's variants (its Variants, by name), for units shown in another look.
Presentation Overrides (PresentationOverrides)TMap<TSoftObjectPtr<URSEAbilityData> ,TSoftObjectPtr<URSEAbilityPresentationBase> >PresentationSignature looks: this character's own presentation for an ability, used instead of the ability's (e.g. a hero from a character pack swinging its own staff with its own effects). Presentation only.
Growth Plan (GrowthPlan)TObjectPtr<URSEGrowthPlan>ProgressionThis character's own Growth Plan (D-144), instead of its class's. Empty = the class's.

URSECharacterPackProfile

Module RSEEditor, parent UDataAsset. How a family of third-party character packs maps onto the framework (D-074, docs/product/character-packs.md): which animations fill which slots, which sockets are which presentation anchors, which meshes are weapons, which effects and sounds do what, the color variants to make and the classes of the...

PropertyTypeCategoryDescription
Anchor Rules (AnchorRules)TArray<FRSEPackAnchorRule>AnchorsPresentation anchors (hands, weapon tip, muzzle, chest, head, feet): the sockets or bones effects attach to.
Animation Rules (AnimationRules)TArray<FRSEPackAnimRule>AnimationsAnimation rules, tried in order (the first rule that matches wins a slot).
Animation Source Folders (AnimationSourceFolders)TArray<FDirectoryPath>AnimationsExtra animation folders (D-079), e.g. an animation pack for a pack that has meshes only. Their clips are matched with the same rules, after the pack's own and before the fallback body, for the slots the pack leaves empty. Clips on another skeleton are retargeted onto the pack's (a skeletal mesh of their skeleton is the source), like the fallback.
Borrowed Clips in Place (bBorrowedClipsInPlace)boolAnimationsClips taken from other folders and retargeted play in place (root motion enabled, the root's travel is extracted): attack packs often lunge metres forward through the root, which would pull the body away from the unit and snap it back. Battle presentations do the travel (Move cues, D-079); locomotion speeds are measured before.
Measure Strikes (bMeasureStrikes)boolAnimationsAttacks and abilities without a hit notify (D-079): the hit frame is measured from the clip, the moment the right hand (Appearance.Anchor.HandRight) is furthest forward, and melee attacks get their contact reach from it (the attacker then stops where the blow lands on the target's body). Off = Default Impact Fraction and the fixed melee stop distance.
Strip Borrowed Effect Notifies (bStripBorrowedEffectNotifies)boolAnimationsClips taken from other folders (Animation Source Folders, the fallback body) and retargeted lose their particle and trail notifies: those effects belong to the other pack's look (and many loop). Sounds stay.
Character Animation Folders (CharacterAnimationFolders)TArray<FDirectoryPath>AnimationsFolders (D-081) whose clips only animation rules with Characters may use: another pack's idles and stances given to chosen characters (a staff idle for the mages, a bow stance for the ranger) without the general rules picking them for everyone. Retargeted like Animation Source Folders.
Default Impact Fraction (DefaultImpactFraction)floatAnimationsHit frame of attack clips without such a notify, as a share of the clip (when the strike cannot be measured).
Fallback Body Preset (FallbackBodyPreset)FNameAnimationsBody preset (Character Visuals -> Body Presets) whose animation set fills the required slots the pack lacks.
Ignore Animations (IgnoreAnimations)TArray<FRSEPackNamePattern>AnimationsAnimations never used (additive poses, aim offsets, facial...).
Impact Notifies (ImpactNotifies)TArray<FRSEPackNamePattern>AnimationsAnim notifies of attack clips that mark the hit frame (the built montages get an RSEImpact notify there).
Jog Speed (JogSpeed)floatAnimations
Min Root Motion Speed (MinRootMotionSpeed)floatAnimationsClips whose root moves slower than this count as in place (their speed comes from the values above).
Required Slots (RequiredSlots)TArray<ERSEPackAnimSlot>AnimationsSlots that must play something: unmatched ones take the fallback body's animation (retargeted when needed), with a warning.
Run Speed (RunSpeed)floatAnimations
Strike Window (StrikeWindow)FVector2DAnimationsMeasured strikes: the part of the hand's search window, as shares of the clip (the wind-up and follow-through are skipped).
Walk Speed (WalkSpeed)floatAnimationsSpeed (cm/s) of walk / jog / run clips without root motion, for the generated blend space.
Weapon Reach Share (WeaponReachShare)floatAnimationsMeasured melee reach: the share of the held weapon's length added to the hand's reach (the blade meets the body).
Character Classes (CharacterClasses)TArray<FRSEPackCharacterClass>Character DataPack characters that get a character data asset (a class and a role), ready for a party or an encounter.
Body Slot (BodySlot)FGameplayTagCharactersPart slot of the body (the leader mesh) on the generated looks.
Capsule Half Height Ratio (CapsuleHalfHeightRatio)floatCharactersCapsule half height as a share of the height.
Capsule Radius Ratio (CapsuleRadiusRatio)floatCharactersCapsule radius as a share of the height (exploration character).
Chest Height Ratio (ChestHeightRatio)floatCharactersChest height (where prompts and battle shots aim) as a share of the character's height.
Default Skin Name (DefaultSkinName)FStringCharactersName of the skin whose mesh name is the character's name.
Grouping (Grouping)ERSEPackGroupingCharacters--- Characters ---
Ignore Meshes (IgnoreMeshes)TArray<FRSEPackNamePattern>CharactersSkeletal meshes that are not characters (proxies, LOD test meshes, cloth pieces).
Mesh Yaw (MeshYaw)floatCharactersYaw of the mesh relative to the actor (meshes that face +Y, like the UE mannequin: -90).
Name Affixes (NameAffixes)TArray<FString>CharactersPrefixes and suffixes removed from skeleton and mesh names to name characters and skins ("SK_", "_Skeleton"...).
Target Height (TargetHeight)floatCharactersScales characters to this height (cm). 0 = keep the pack's size.
Color Mode (ColorMode)ERSEPackColorModeColors
Color Variants (ColorVariants)TArray<FRSEPackColorVariant>ColorsColor variants made for every skin (empty = none).
Hue Parameters (HueParameters)TArray<FName>ColorsScalar parameters that turn the hue (0..1 of a turn).
Saturation Parameters (SaturationParameters)TArray<FName>ColorsScalar parameters scaled by the variant's saturation.
Tint Parameters (TintParameters)TArray<FName>ColorsVector parameters that tint a material (their color is hue-shifted and multiplied).
Animation Word Aliases (AnimationWordAliases)TMap<FString,FString>EffectsExtra words an animation word stands for when pairing effects, for packs whose effects are named after what an ability does while its animations are named after its key (e.g. "rmb" -> "StaffExtend Poke", "q" -> "GroundSlam"). Keys are lower-case animation words; values are words (any case, space or underscore separated).
Use Character Default Effects (bUseCharacterDefaultEffects)boolEffectsAn attack without paired effects takes the character's first effect of each role (impact, whoosh).
Effect Rules (EffectRules)TArray<FRSEPackEffectRule>EffectsRoles of the pack's particle systems and sounds, tried in order.
Generic Name Tokens (GenericNameTokens)TArray<FString>EffectsName tokens ignored when pairing effects and sounds with an animation (words every asset has: Attack, Ability, FX, the prefixes...). What is left (e.g. "Q", "Primary", "Slam") must be shared for a pairing.
Role Anchors (RoleAnchors)TMap<ERSEPackEffectRole,FGameplayTag>EffectsAnchor each role spawns at on the caster (impacts go on the target).
Description (Description)FTextProfile
Auto Grip (bAutoGrip)boolWeaponsComputes how each weapon is held (D-079), for packs whose skeletons have no weapon sockets: the grip (the handle end of the weapon's long axis) goes into the palm (between the hand bone and its finger bones, in the reference pose), the tip points forward out of the fist with the blade's flat side up; shields lie flat side out along the forearm. The result is the look part's attach transform (editable data). Off = the rule's Offset only.
Grip Reference (GripReference)FRSEPackGripReferenceWeaponsRight-hand weapons point along this reference's weapon line (borrowed animations); unset = out of the fist, forward.
Grip Share (GripShare)floatWeaponsWeapons whose pivot is not at an end (staffs, spears): held at this share of their length from the handle end.
Palm Share (PalmShare)floatWeaponsThe palm point: this share of the way from the hand bone to its finger bones.
Weapon Rules (WeaponRules)TArray<FRSEPackWeaponRule>WeaponsWeapon and prop meshes (static or skeletal) attached to the looks. Characters whose weapon is in the body mesh need none.

URSEClassData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A fixed character class (no job changes, see CLAUDE.md 2.2): stat growth, innate affinities, and later its ability list.

PropertyTypeCategoryDescription
Abilities (Abilities)TArray<FRSEClassAbility>AbilitiesAbilities learned by level.
Command Menu (CommandMenu)TSoftObjectPtr<URSECommandMenuLayout>AbilitiesBattle command menu of this class (D-065). Empty = Project Settings -> Command Menu -> Default Layout.
Class Tag (ClassTag)FGameplayTagClass
Allowed Equipment Types (AllowedEquipmentTypes)FGameplayTagContainerEquipmentKinds of equipment the class may use (Equip.Type.*; parent tags allow all children).
Bag Size (BagSize)FIntPointEquipmentPer Character inventory (D-143): the bag size of this class's characters (columns x rows). 0 = Inventory Rules -> Bag.
Growth Plan (GrowthPlan)TObjectPtr<URSEGrowthPlan>ProgressionHow the class grows beyond its levels (D-144): point tables and ability catalog (Classic + Points), Growth Board, learning from enemies. Empty = Project Settings -> Progression Systems -> Default Plan. The level abilities above stay in every system.
Affinities (Affinities)TArray<FRSEElementAffinityEntry>StatsInnate elemental affinities of the class.
Granted Tags (GrantedTags)FGameplayTagContainerStatsInnate traits of the class (Trait.*, e.g. Trait.Move.Levitate for a flying class).
Stat Growth (StatGrowth)TMap<FGameplayTag,FRSEStatGrowth>StatsStat values by level. Stats not listed are zero unless a modifier adds them.

URSECodeLockData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A code lock (D-039): digits, symbols or clock hands.

PropertyTypeCategoryDescription
Kind (Kind)ERSECodeLockKindLock
Length (Length)int32LockNumber of wheels (Digits, Symbols).
Max Attempts (MaxAttempts)int32LockWrong codes allowed each time the lock is opened (0 = unlimited). After the last one the lock closes (LockoutEffects).
Minute Step (MinuteStep)int32LockMinutes per step of the minute hand (ClockHands).
Prompt (Prompt)FTextLockShown above the wheels ("Set the hands to the hour of the founding.").
Solution (Solution)TArray<int32>LockThe code, one value per wheel: Digits 0-9; Symbols = index in Symbols; ClockHands = { hour 1-12, minute 0-59 } (the minute must be a multiple of MinuteStep).
Solved Puzzle (SolvedPuzzle)FGameplayTagLockMarked solved on success; a solved lock does not open again. Optional.
Symbols (Symbols)TArray<FText>LockThe alphabet of a Symbols lock (e.g. moon, sun, star).
Failure Effects (FailureEffects)FRSEEffectListOutcomeRun on every wrong code.
Failure Text (FailureText)FTextOutcomeShown in the lock screen after a wrong code.
Lockout Effects (LockoutEffects)FRSEEffectListOutcomeRun when the last attempt fails (MaxAttempts).
Lockout Lines (LockoutLines)TArray<FText>OutcomeNarrator lines after a lockout.
Success Effects (SuccessEffects)FRSEEffectListOutcome
Success Lines (SuccessLines)TArray<FText>OutcomeNarrator lines after the lock opens.

URSECombatRoleRegistry

Module RSECore, parent UPrimaryDataAsset, primary asset. Asset -> combat role, kept in the project (D-093).

PropertyTypeCategoryDescription
Assignments (Assignments)TMap<FSoftObjectPath,FRSECombatRoleAssignment>Combat RolesAsset path -> its role.

URSECommandMenuLayout

Module RSECore, parent URSEPrimaryDataAsset, primary asset. The battle command menu of classic battles (D-065): the top-level commands in order and how abilities are sorted into them.

PropertyTypeCategoryDescription
Class Overrides (ClassOverrides)TArray<FRSECommandMenuClassOverride>CommandsPer-class renames and hidden commands (the first override whose class matches).
Entries (Entries)TArray<FRSECommandMenuEntry>Commands

URSECompanionRadialStyle

Module RSE, parent URSEBattleMenuStyle_Radial, primary asset. D-148: the companion radial's look: the battle radial (D-122 / D-128) at full size with the names on the slices (no quick ring: the game waits while it is open).

URSEConsumableData

Module RSECore, parent URSEItemData, primary asset. An item used up on use: potions, bombs, cures.

PropertyTypeCategoryDescription
Usable in Battle (bUsableInBattle)boolConsumable
Use Ability (UseAbility)TObjectPtr<URSEAbilityData>ConsumableWhat using the item does, with its Tactics (range, area, AP cost) and ATB (scope) rules.

URSEDialogData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A dialog (dialog-proposal.md 4.1): a graph of instanced nodes linked by NodeId.

PropertyTypeCategoryDescription
Skippable (bSkippable)boolDialogThe whole scene can be skipped (e.g. on a second viewing). Skipping stops at choices.
Track History (bTrackHistory)boolDialogSave visited nodes and chosen options (needed by once-only / already-chosen options and history conditions).
Entry Node (EntryNode)FNameDialogThe first node.
Nodes (Nodes)TArray<TObjectPtr<URSEDialogNode> >Dialog
Participants (Participants)FGameplayTagContainerDialogSpeakers of this dialog (validation and portrait preloading).
Presentation (Presentation)FGameplayTagDialogDialog.Presentation.* (empty = Box). Bark dialogs cannot have choices; Battle dialogs cannot start battles.
Scene Title (SceneTitle)FTextDialogTitle card of a Cinematic scene ("Meanwhile, at the harbor...").

URSEDocumentData

Module RSECore, parent URSEItemData, primary asset. A readable note, letter or book.

PropertyTypeCategoryDescription
Pages (Pages)TArray<FText>Document

URSEEmoteSet

Module RSE, parent URSEPrimaryDataAsset, primary asset. Emotes of a speaker (dialog-proposal.md 6.6): Emote.* -> montage + optional balloon.

PropertyTypeCategoryDescription
Emotes (Emotes)TMap<FGameplayTag,FRSEEmoteEntry>Emotes

URSEEncounterData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. One battle: mode, enemies, player deployment (D-018), objectives and AI intelligence bounds.

PropertyTypeCategoryDescription
Intelligence (Intelligence)floatAIEnemy intelligence used until adaptive difficulty exists (Phase 9).
Max Intelligence (MaxIntelligence)floatAI
Min Intelligence (MinIntelligence)floatAIBounds for adaptive difficulty (e.g. bosses never below a floor).
Balance Role (BalanceRole)ERSEEncounterBalanceRoleBalanceKind of battle for "Balance My Campaign" (D-077): its win-rate band and party level. Auto = derived from the campaign.
Battle Events (BattleEvents)TArray<FRSEScriptedBattleEvent>Battle ScriptScripted moments of the battle, in order: at a trigger the battle pauses, a unit says a line, the camera shows it, effects apply (reinforcements, an AI profile, statuses, a surface, new objectives), then the battle goes on.
Reinforcements (Reinforcements)TObjectPtr<URSEReinforcementData>Battle ScriptThe enemies call for help during the battle (who calls, when, the waves). Also usable from a dialog-started battle. A spawner's own Reinforcements override it for its groups.
Coop Alternative (CoopAlternative)TSoftObjectPtr<URSEEncounterData>Co-opThe Free Tactics encounter fought instead in co-op (Co-op Conversion = Alternative Encounter).
Coop Conversion (CoopConversion)ERSECoopBattleConversionCo-opWhat this encounter becomes while a session has more than one player (D-142: co-op is played live). Default = Co-op Rules -> Default Encounter Conversion (Free Tactics). Free Tactics encounters never change.
Deployment Tiles (DeploymentTiles)TArray<FRSEGridCoord>DeploymentTiles where the player may place units before the battle.
Field Objects (FieldObjects)TArray<FRSEFieldObjectPlacement>DeploymentTactics: walls, obstacles and explosive objects on the grid when the battle starts (D-055).
Max Deployed Units (MaxDeployedUnits)int32Deployment
Required Characters (RequiredCharacters)TArray<TObjectPtr<URSECharacterData> >DeploymentCharacters that must take part (story). They are pre-selected and cannot be removed.
Battle Mode (BattleMode)FGameplayTagEncounterBattle.Mode.Tactics, FreeTactics, ATB, Turn or Action (real-time, D-171). Decided by content, never by the player.
Can Flee (bCanFlee)boolEncounterATB only: the party may try to flee (disable for bosses and story battles).
Defeat Continues Story (bDefeatContinuesStory)boolEncounterStory battles the party may lose (D-031): defeat shows no game over. Fallen members get back on their feet (Party settings, DefeatRecoveryHP*) and the game goes on.
Fixed Level (FixedLevel)int32LevelsFixed mode: level of every enemy whose own Level is 0 (0 = the characters' starting levels).
Keep Up with Party Gap (KeepUpWithPartyGap)int32LevelsFixed mode (D-120): with an overlevelled party, every enemy rises by the same amount (their gaps kept) so that Fixed Level (or the highest enemy level when it is 0) stays at least the party level minus this many levels. -1 = off: the fixed levels, whatever the party's level. For a boss that must stay a real fight however the party got there; at the intended level nothing changes.
Level Mode (LevelMode)ERSEEncounterLevelModeLevelsScaled (regular battles) or Fixed (story key battles, epic quest bosses, ultra bosses).
Progression Zone (ProgressionZone)TObjectPtr<URSEProgressionZoneData>LevelsScaled mode: the zone whose level range applies. Empty = the zone of the area the player is in (URSEAreaData::ProgressionZone).
Scaled Level Offset (ScaledLevelOffset)int32LevelsScaled mode: levels added to the scaled level before the zone's range clamps it (e.g. +2 for an elite group).
Allow Mode Override (bAllowModeOverride)boolMode OverrideA session's Battle Mode Override (demo menus, test tools, showcase captures) may fight this encounter in another mode. Turn it off for scripted battles that only work in their own mode. The encounter's mode report lists the modes its data can run in.
Mode Rules Profiles (ModeRulesProfiles)TMap<FGameplayTag,TObjectPtr<URSERulesProfile> >Mode OverrideRules profile per battle mode (e.g. the real-time timing rules when it is fought in Action, a slower ATB): used instead of Rules Profile when the encounter is fought in that mode. Empty entries = Rules Profile.
Override Modes (OverrideModes)FGameplayTagContainerMode OverrideThe modes an override may fight it in. Empty = every mode its data supports.
Defeat Conditions (DefeatConditions)TArray<TObjectPtr<URSEBattleCondition> >ObjectivesAny of these met = defeat. Losing every player unit is always a defeat.
Victory Conditions (VictoryConditions)TArray<TObjectPtr<URSEBattleCondition> >ObjectivesAny of these met = victory. Empty = defeat every other team.
Battle Music (BattleMusic)TSoftObjectPtr<UObject>PresentationMusic of this battle (a sound asset), instead of the mode / boss music of the Audio settings (D-036). Typed loosely because RSECore knows nothing about audio; the presentation plays it.
Intro Text (IntroText)FTextPresentationText of the battle's intro banner ("The Fortress Golem!", D-083). Empty = Battle Transition settings: Preemptive! / Back Attack! when someone struck first, else the encounter's name (Use Encounter Name) or "Battle!".
Transition Style (TransitionStyle)ERSEBattleTransitionStylePresentationScreen transition into this battle (D-083). Default = Battle Transition settings, per battle mode.
Encounter Loot (EncounterLoot)FRSELootRewardsMoney and drops of the encounter itself (D-042), rolled on victory after the enemies' loot tables.
Loot Rule (LootRule)TSoftClassPtr<URSELootDistributionRule>RewardsPer Character inventory (D-143): who receives this encounter's rewards and drops (a boss whose loot goes to the stash, to the leader...). Empty = Inventory Rules -> Distribution Rule.
Reward Items (RewardItems)TMap<TObjectPtr<URSEItemData> ,int32>RewardsItems the party receives on victory (shown on the results screen). Experience comes from the enemies.
Victory Effects (VictoryEffects)FRSEEffectListRewardsRun when a battle of this encounter started from exploration is won (D-081), after the rewards: a story flag, a quest objective, an unlocked area. Not run on a defeat, a flight or in the battle simulator.
Rules Profile (RulesProfile)TObjectPtr<URSERulesProfile>RulesRules profile of this battle (e.g. a boss profile). Empty = the game's active profile. The battle keeps the profile it started with, whatever the story switches meanwhile.
Enemies from Scene (bEnemiesFromScene)boolTeamsThe enemies come from the scene (a dialog's Start Battle with Scene NPCs Fight or Combatants, D-109), so the Enemies list may stay empty.
Enemies (Enemies)TArray<FRSEEncounterUnit>Teams
Enemy Items (EnemyItems)TMap<TObjectPtr<URSEConsumableData> ,int32>TeamsThe enemy team's item pouch (D-024): what its units may use, and how many.
Enemy Team (EnemyTeam)FGameplayTagTeams
Player Team (PlayerTeam)FGameplayTagTeams

URSEEncounterPoolData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. The enemies a zone's random battles are made of (D-063, docs/design/random-encounters.md): every battle composes a new group from the weighted entries, with levels that follow the progression zone (D-051).

PropertyTypeCategoryDescription
Battle Mode (BattleMode)FGameplayTagBattleBattle.Mode.ATB (default when empty) or Battle.Mode.Turn. Classic modes only: Tactics battles are never random.
Battle Music (BattleMusic)TSoftObjectPtr<UObject>BattleMusic of these battles (a sound asset); empty = the Audio settings' battle music.
Can Flee (bCanFlee)boolBattle
Encounter Loot (EncounterLoot)FRSELootBattleMoney and drops of every group of this pool, rolled on victory after the enemies' loot tables.
Enemy Team (EnemyTeam)FGameplayTagBattle
Intelligence (Intelligence)floatBattle
Max Intelligence (MaxIntelligence)floatBattle
Min Intelligence (MinIntelligence)floatBattle
Player Team (PlayerTeam)FGameplayTagBattleEmpty = the Encounters settings' Default Player Team / Default Enemy Team.
Reinforcements (Reinforcements)TObjectPtr<URSEReinforcementData>BattleD-117: the groups of this pool call for help in their battles (every composed encounter gets it).
Rules Profile (RulesProfile)TObjectPtr<URSERulesProfile>BattleRules profile of these battles (empty = the game's active profile).
Victory Effects (VictoryEffects)FRSEEffectListBattleRun when a group of this pool is beaten (D-081): e.g. a flag for "the road's warband is gone". Every composed encounter gets them.
Elite (Elite)FRSEEncounterEliteRulesPool
Entries (Entries)TArray<FRSEEncounterPoolEntry>Pool
Group Size Max (GroupSizeMax)int32Pool
Group Size Min (GroupSizeMin)int32PoolEnemies per group (random between the two).
Progression Zone (ProgressionZone)TObjectPtr<URSEProgressionZoneData>PoolThe zone whose level range applies. Empty = the zone of the area the player is in (URSEAreaData::ProgressionZone).

URSEEndingSetData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. The ending layer (D-027): which ending the story reaches.

PropertyTypeCategoryDescription
Default Ending (DefaultEnding)FGameplayTagEndingsReached when no ending's requirements pass. Must be one of Endings.
Endings (Endings)TArray<FRSEEndingDefinition>EndingsChecked in order: put the most demanding ending first.
Lock Ending at Point Of No Return (bLockEndingAtPointOfNoReturn)boolPoint Of No ReturnThe ending is fixed when the point of no return is passed; later choices no longer change it.
Point Of No Return Flag (PointOfNoReturnFlag)FGameplayTagPoint Of No ReturnSet when the player passes the point of no return (usually by confirming the warning).
Point Of No Return Warning (PointOfNoReturnWarning)FTextPoint Of No ReturnShown by the confirmation the presentation opens before the point of no return.
Key Choices (KeyChoices)TArray<FRSEEndingKeyChoice>Score
Score Variable (ScoreVariable)FGameplayTagScoreThe hidden score (never shown to the player).

URSEEnemyArchetype

Module RSECore, parent URSEArchetype, primary asset. Enemy type: its family class, AI profile, rewards and look (content: an enemy Character).

URSEEquipmentData

Module RSECore, parent URSEItemData, primary asset. Something a character wears or wields.

PropertyTypeCategoryDescription
Action Weapon (ActionWeapon)TObjectPtr<URSEActionWeaponData>ActionAction battles (D-171): what the item does as a weapon there (combos, fire modes). Empty = not an action weapon.
Two Handed (bTwoHanded)boolEquipmentWeapons only: also occupies the off-hand slot (bows, great staves).
Equipment Type (EquipmentType)FGameplayTagEquipmentKind of equipment (Equip.Type.*); classes list the kinds they may use. Worn, it is also a granted tag of the unit (e.g. shields let it block).
Slot Type (SlotType)FGameplayTagEquipmentWhich slots accept it (Equip.Slot.*).
Appearance Part (AppearancePart)TSoftObjectPtr<URSEAppearancePartBase>PresentationOptional visible piece while worn (D-046): a URSEAppearancePart that adds or replaces a part of the wearer's appearance (its slot decides which). Empty = the item does not change how the wearer looks.
Weapon Presentation (WeaponPresentation)TSoftObjectPtr<URSEWeaponPresentationBase>PresentationWeapons (D-184): how attacks with it look in every battle mode (a URSEWeaponPresentation: swing or fire animations, muzzle flash, tracers or projectiles, impacts per surface, trail, sounds, burst). Empty = the presentation of its Equipment Type (Project Settings -> RPG Saga Engine -> Weapon Presentation), else the default for the attack's approach.
Worn Transform (WornTransform)FTransformPresentationAdjustment of the Item Mesh when worn without an Appearance Part (D-126: grip, scale), in the wearer's grip frame at its slot's Attach Anchor (the body's Anchor Grips: grip at the origin, blade or shaft along +Z). Identity for meshes authored that way; a staff held part way up moves along Z.
Affinities (Affinities)TArray<FRSEElementAffinityEntry>While Equipped
Bag Size Bonus (BagSizeBonus)FIntPointWhile EquippedPer Character inventory (D-143): extra bag columns (X) and rows (Y) while worn (a backpack, a belt with pouches).
Carry Capacity Bonus (CarryCapacityBonus)floatWhile EquippedPer Character inventory with weight (D-143): extra carry capacity while worn.
Granted Abilities (GrantedAbilities)TArray<TObjectPtr<URSEAbilityData> >While EquippedAbilities usable while equipped.
Granted Tags (GrantedTags)FGameplayTagContainerWhile EquippedTraits such as status immunities.
Mastery Abilities (MasteryAbilities)TArray<FRSEMasteryAbility>While EquippedEquipment mastery (D-144): abilities usable while equipped that the wearer learns for good after earning their mastery points in won battles with the item (Progression Systems -> Mastery). Learned ones stay after the item is removed.
Mastery Rate (MasteryRate)floatWhile EquippedMultiplies the mastery points earned with this item (1 = normal, 2 = learns twice as fast).
Modifiers (Modifiers)TArray<FRSEStatModifier>While Equipped

URSEEquipmentSlotSet

Module RSECore, parent UDataAsset. A preset of character equipment slots (D-126): the classic JRPG set (weapon, off-hand, head, body, two accessories) or the ARPG set (helmet, body armor, hands, legs, feet, main hand, off-hand, two accessories).

PropertyTypeCategoryDescription
Description (Description)FTextSlot SetWhat the preset is for (shown in the Details panel).
Off Hand Slot Id (OffHandSlotId)FNameSlot SetSlot a two-handed weapon also occupies (None = no off-hand).
Slots (Slots)TArray<FRSEEquipmentSlotDef>Slot SetThe slots, in display order (the classic Equipment page lists them in this order).

URSEExamineData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. What an object says when examined (D-039): a list of state-dependent responses (the first whose conditions pass) and an optional one-time pickup.

PropertyTypeCategoryDescription
Pickup (Pickup)FRSEExaminePickupExamine
Responses (Responses)TArray<FRSEExamineResponse>Examine

URSEFXTaxonomy

Module RSEEditor, parent UDataAsset. The effect taxonomy (D-087): elements and roles of particle systems and sounds, and the Dress My Abilities rules.

PropertyTypeCategoryDescription
Attack Effects (AttackEffects)TArray<FRSEDressFX>Dress My AbilitiesDress My Abilities: effects of the characters' basic attack combos built from their style (impact, swing sound).
Neutral Fallback (bNeutralFallback)boolDress My AbilitiesNo effect of the ability's element for a role: take a neutral (element-less) one.
Prefer Niagara (bPreferNiagara)boolDress My AbilitiesPrefer Niagara systems over legacy (Cascade) ones of the same confidence.
Dress Rules (DressRules)TArray<FRSEDressRule>Dress My AbilitiesDress My Abilities: tried in order, the first rule an ability matches decides its effects and animation.
Feel Roles (FeelRoles)FRSEFeelRolesDress My AbilitiesD-115: the roles that fill the battle feel slots of dressed looks (trail, cast, impact, projectile) and statuses.
Min Pick Confidence (MinPickConfidence)floatDress My AbilitiesEffects below this confidence are never picked automatically.
Loop Flag (LoopFlag)FGameplayTagFlagsFlag a looping effect gets (empty = none).
Include Sounds (bIncludeSounds)boolRulesScan sounds too (Sound Cues, MetaSounds, waves).
Ignore Patterns (IgnorePatterns)TArray<FRSEPackNamePattern>RulesEffects and sounds never offered (UI sounds, music, test systems).
Rules (Rules)TArray<FRSELibraryWordRule>RulesWord rules for elements, roles and flags.
Confidence Softness (ConfidenceSoftness)floatScoring
Folder Weight (FolderWeight)floatScoring
Review Threshold (ReviewThreshold)floatScoring
Description (Description)FTextTaxonomy
Roles (Roles)TArray<FRSEFXRoleDef>Taxonomy

URSEFieldObjectData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A field object on the Tactics grid (D-055): a wall or barrier, a destructible obstacle, an explosive barrel.

PropertyTypeCategoryDescription
Explodes when Destroyed (bExplodesWhenDestroyed)boolExplosion--- Explosion ---
Explosion Damage (ExplosionDamage)floatExplosionFixed damage to every unit in the blast (before affinity).
Explosion Damage Percent (ExplosionDamagePercent)floatExplosionExtra damage as a percent of each unit's max HP.
Explosion Element (ExplosionElement)FGameplayTagExplosionElement of the blast (affinities apply).
Explosion Object Damage (ExplosionObjectDamage)floatExplosionDamage to other objects in the blast (chain reactions of barrels).
Explosion Radius (ExplosionRadius)int32ExplosionTiles around the object (Manhattan) hit by the explosion.
Explosion Status (ExplosionStatus)TObjectPtr<URSEStatusData>ExplosionStatus applied to units in the blast (Burn...).
Explosion Status Chance (ExplosionStatusChance)floatExplosion
Leaves Zone (LeavesZone)TObjectPtr<URSETileZoneData>ExplosionZone left on the blast's tiles (burning ground). Free Tactics: a surface on the blast's circle (D-108).
Free Explosion Radius (FreeExplosionRadius)floatFree TacticsFree Tactics: blast radius in meters (0 = Explosion Radius tiles x Meters Per Tile, at least Free Tactics Field -> Min Explosion Radius).
Free Height (FreeHeight)floatFree Tactics
Free Radius (FreeRadius)floatFree TacticsFree Tactics: footprint radius and height when an ability places it (0 = Free Tactics Field -> Spawned Object Radius / Height).
Blocks Line Of Sight (bBlocksLineOfSight)boolObject
Blocks Movement (bBlocksMovement)boolObject
Damage Taken Multiplier (DamageTakenMultiplier)floatObjectMultiplies damage the object takes.
Lifetime Turns (LifetimeTurns)int32ObjectTurns of the creator the object lasts (after it is gone: every unit's turn counts). 0 = permanent.
Max HP (MaxHP)floatObjectHP. 0 = indestructible.
Object Tag (ObjectTag)FGameplayTagObject
Sight Height (SightHeight)int32ObjectHow far above its tile the object blocks sight, in height steps.
Color (Color)FLinearColorPresentationTint of the default look (when Visual is empty).
Visual (Visual)TSoftObjectPtr<URSEFieldVisualBase>PresentationHow the object looks (soft; RSE's field visual asset). Empty = the Tactics presentation's default object look.

URSEFieldVisualBase

Module RSECore, parent URSEPrimaryDataAsset, abstract, primary asset. How a zone or field object looks (D-055).

URSEFieldVisualData

Module RSE, parent URSEFieldVisualBase, primary asset. How a zone or field object looks on the Tactics grid (D-055).

PropertyTypeCategoryDescription
Effect Scale (EffectScale)floatEffectsEffect scale.
End Effect (EndEffect)TSoftObjectPtr<UNiagaraSystem>EffectsOne-shot effect when the zone ends / the object breaks (explosions).
Loop Effect (LoopEffect)TSoftObjectPtr<UNiagaraSystem>EffectsLooping effect on each tile (fire, frost, poison fumes...).
Spawn Effect (SpawnEffect)TSoftObjectPtr<UNiagaraSystem>EffectsOne-shot effect when the zone appears / the object is placed.
Material (Material)TSoftObjectPtr<UMaterialInterface>LookMaterial of the mesh (a "Color" vector parameter is set to the zone / object color when present).
Mesh (Mesh)TSoftObjectPtr<UStaticMesh>LookMesh per tile (zones: a flat plate; objects: the object). Empty = the settings' default.
Mesh Scale (MeshScale)FVectorLookMesh scale per tile (1 = the settings' tile-sized default).

URSEFollowerProfile

Module RSECore, parent URSEPrimaryDataAsset, primary asset. How a party member follows and lives in exploration (D-129): its loose place in the formation and its idle behaviours.

PropertyTypeCategoryDescription
Acceleration (Acceleration)floatFeelD-150: how quickly a member gets up to speed (cm/s², its movement's Max Acceleration while it follows). 0 = the character's own.
Arrival Speed (ArrivalSpeed)floatFeelD-150: the slowest a braking member walks before it stands (cm/s).
Braking Deceleration (BrakingDeceleration)floatFeelD-150: how gently a member stops (cm/s², its movement's walking braking deceleration and a light separate braking friction while it follows). 0 = the character's own.
Braking Distance (BrakingDistance)floatFeelD-150: within this distance of its place (beyond the slack) a member slows down smoothly instead of stopping dead (cm).
Member Spacing (MemberSpacing)floatFeelD-150: the least distance between two members (cm): their places are pushed apart to it, and they steer around each other's bodies (with Party Field -> Followers Avoid Each Other). Larger = a roomier party.
Path Variation (PathVariation)floatFeelD-150: freer paths: a member far from its place aims up to this far to one side of the straight line (cm, its own side and amount), so the party does not file through the same line.
Rank Start Delay (RankStartDelay)floatFeelD-150: each place further back in the formation starts this much later (seconds per place, on top of the member's own Reaction Delay): the party sets off one after another, never all on the leader's first step.
Stop Slack (StopSlack)FVector2DFeelD-150: once the leader stands, a member closer than this to its place stays where it is (cm, a new value in the range on every stop): no small shuffles to reach an exact spot.
Trail Period (TrailPeriod)floatFeelD-150: how slowly a member's trailing distance changes (seconds per new value; longer = calmer).
Trail Range (TrailRange)FVector2DFeelD-150: while the leader walks each member trails its place by a distance of its own that changes slowly within this range (cm): some lag a little and catch up when the leader stops, nobody is glued to a slot.
Urgent Distance (UrgentDistance)floatFeelD-150: farther than this from its place (cm) a member sets off at once, without its reaction delay (it was left far behind). Closer, even a member that has to catch up waits its delay first.
Corridor Spread (CorridorSpread)floatFormationThe formation's width in corridors (multiplies the slots' sideways offsets).
Corridor Width (CorridorWidth)floatFormationFree width (cm) at and below which the formation is at its corridor width.
Follow Lead Time (FollowLeadTime)floatFormationMembers aim where their place will be this many seconds ahead while the leader walks (they keep up instead of reaching a place the leader already left; about two thinks).
Leader Clearance (LeaderClearance)floatFormationMembers never aim closer than this to the leader, nor into its path while it walks (cm).
Leader Look Ahead (LeaderLookAhead)floatFormationHow far ahead of a walking leader its path is kept clear (cm).
Min Side Offset (MinSideOffset)floatFormationMembers keep at least this sideways offset, alternating sides (cm): never a single-file line, even in corridors.
Open Ground Spread (OpenGroundSpread)floatFormationThe formation's width on open ground (multiplies the slots' sideways offsets).
Open Ground Width (OpenGroundWidth)floatFormationFree width around the leader (cm, measured sideways) at which the formation is fully open.
Reaction Delay (ReactionDelay)FVector2DFormationSeconds before the member reacts when the leader starts walking (random between the two, per start and member). D-150: catching up waits too, unless the member is farther than Urgent Distance from its place.
Slot Drift (SlotDrift)floatFormationHow far the member's own place drifts around its formation slot (cm): followers never keep the exact slot.
Slot Drift Period (SlotDriftPeriod)floatFormationHow slowly the drift changes (seconds per new drift target; longer = calmer).
Speed Variation (SpeedVariation)floatFormationThe member's own pace: its walk and run speeds vary by up to this share (0.1 = 10% slower or faster, fixed per member).
Spread Change Speed (SpreadChangeSpeed)floatFormationHow quickly the formation widens or narrows when the space changes (higher = sooner).
Also Party Behaviors (bAlsoPartyBehaviors)boolIdleA character profile also uses the party profile's behaviours (after its own). Off: only its own.
Behaviors (Behaviors)TArray<TObjectPtr<URSEIdleBehavior> >IdleThe idle behaviours and their weights. Order does not matter.
Idle Life (bIdleLife)boolIdleMembers live while the leader stands still: stroll, look around, play idle animations (Behaviors).
Idle Gap (IdleGap)FVector2DIdleSeconds between two idle actions (random between the two).
Idle Radius (IdleRadius)floatIdleStrolls and spots stay within this distance of the leader (cm).
Idle Start Delay (IdleStartDelay)FVector2DIdleSeconds the leader must stand still before a member starts its idle life (random between the two, per member).
Repeat Weight (RepeatWeight)floatIdleThe same behaviour twice in a row is this much less likely (1 = no penalty, 0 = never twice in a row when another can run).
Stroll Speed (StrollSpeed)floatIdleWalking speed of strolls (cm/s; the member's pace applies).

URSEFurnitureData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A piece of furniture (D-158): its mesh (or simple parts), its size and front, how it may be placed and what it does.

PropertyTypeCategoryDescription
Furniture Tags (FurnitureTags)FGameplayTagContainerFurnitureWhat it is (Furniture.Bed, .Table, .Chair, .Light...): anchors, rules and the checker read them.
Light (bLight)boolLightA light of its own that is always on (a chandelier; interactable lights use their Interactable Data's look).
Light Color (LightColor)FLinearColorLight
Light Intensity (LightIntensity)floatLight
Light Offset (LightOffset)FVectorLightThe light's place in the piece's space (cm).
Light Radius (LightRadius)floatLight
Fit Mesh to Size (bFitMeshToSize)boolLookMesh is fitted to Size (stretched to the footprint and height). Off: its own size, centred on the footprint.
Symmetric (bSymmetric)boolLookD-164: it looks the same whichever way it faces (a barrel, a round table, a candle): any facing is right.
Front (Front)ERSEFurnitureFrontLookWhich axis of Mesh is its front (beds: the foot end; wardrobes: their doors; chairs: where one sits facing).
Mesh (Mesh)TSoftObjectPtr<UStaticMesh>LookThe prop (soft). Empty = Parts.
Mesh Scale (MeshScale)FVectorLookMesh's own scale (when not fitted).
Parts (Parts)TArray<FRSEFurniturePart>LookPlaceholder look made of simple shapes (used when Mesh is empty).
Anchor Tag (AnchorTag)FGameplayTagPlacementAroundAnchor / OnAnchor: the piece it goes with (Furniture.Table).
Allowed at Windows (bAllowedAtWindows)boolPlacementD-164 / K4: it may stand in front of a window even when taller than the sill (a see-through screen, a plant stand).
Blocks Movement (bBlocksMovement)boolPlacementIt takes floor and blocks walking (off: rugs, things on walls and tables).
Depth (Depth)floatPlacement
Front Clearance (FrontClearance)floatPlacementFree floor kept in front of it (to stand at a bed, open a wardrobe, pull a chair out) (cm).
Height (Height)floatPlacement
Mount Height (MountHeight)floatPlacementWallMounted: the height of its bottom (cm). Ceiling: how far it hangs below the ceiling (cm).
Placement (Placement)ERSEFurniturePlacementPlacement
Side Clearance (SideClearance)floatPlacementFree floor kept beside / around it (Center pieces: room for chairs and to walk around) (cm).
Width (Width)floatPlacementThe footprint and height (cm): Width across its front, Depth from front to back, Height.
Generated (bGenerated)boolProvenanceD-164: made by the Interior Kit Wizard (a re-run updates it; fields the designer changed are kept).
Source Mesh (SourceMesh)FSoftObjectPathProvenanceD-164: the pack mesh this piece was made from (the kit scan's provenance; the wizard updates the asset while it still matches).
Interactable (Interactable)TObjectPtr<URSEInteractableData>UseWhat using it does (a chest, a bed to rest in, a book to read, a fireplace to light): it becomes an RSE World Interactable. Without a Mesh or Parts of its own it shows the interactable's look (a breakable pot keeps its broken look).
Interactable Capacity (InteractableCapacity)int32UseD-161: how many interactables this spot holds: itself (when it is interactable) and whatever usable stands on it (a candle, a book on a table). 1 = one thing to use here; 0 = nothing usable on it. The generator respects it, the furniture checker reports more.
Interaction Category (InteractionCategory)FGameplayTagUseD-161: what kind of interaction it gives a house (Interior.Interaction.Read, .Loot, .Light, .Breakable, .Examine, .Rest, .Station, .QuestHook): interaction sets count and complete interiors by it. Empty = not counted.

URSEGASAbilityMap

Module RSEGAS, parent UDataAsset. RSE abilities -> GAS triggers (D-169).

PropertyTypeCategoryDescription
Rows (Rows)TArray<FRSEGASAbilityRow>Abilities

URSEGASAttributeMap

Module RSEGAS, parent UDataAsset. RSE stats and resources <-> GAS attributes (D-169).

PropertyTypeCategoryDescription
Rows (Rows)TArray<FRSEGASAttributeRow>Attributes

URSEGASStatusMap

Module RSEGAS, parent UDataAsset. RSE statuses <-> GAS tags and Gameplay Effects (D-169).

PropertyTypeCategoryDescription
Rows (Rows)TArray<FRSEGASStatusRow>Statuses

URSEGameFoundation

Module RSECore, parent URSEPrimaryDataAsset, primary asset. The Game Foundation (D-095, docs/design/studio.md section 5): the bottom layer of a game, built bottom-up in the Studio's foundation wizard.

PropertyTypeCategoryDescription
Terms (Terms)TArray<FRSEFoundationTerm>1. Vocabulary--- 1. Vocabulary ---
Starter Content (StarterContent)FRSEFoundationStarterContent10. Starter ContentContent made for this foundation, offered when it is applied (D-100). Empty for Empty and for your own foundations.
Attributes (Attributes)TArray<FRSEAttributeDefinition>2. Stats and ResourcesThe attributes (written into the attribute registry). Stat.Speed is required; Tactics also needs Stat.ActionPoints and Stat.Jump.
Resources (Resources)TArray<FRSEResourceDefinition>2. Stats and ResourcesThe resources (Resource.HP, the life resource, is required).
Formulas (Formulas)FRSEFoundationFormulas3. Combat Formulas--- 3. Combat formulas ---
Affinity Multipliers (AffinityMultipliers)TMap<ERSEElementAffinity,float>4. ElementsDamage multiplier per affinity (the weakness table). Empty = keep the current one.
Elements (Elements)TArray<FRSEFoundationTagEntry>4. ElementsElements / damage types (Element.*). May be empty (no elemental damage).
Equipment Slots (EquipmentSlots)TArray<FRSEEquipmentSlotDef>5. Equipment and Items--- 5. Equipment and items ---
Equipment Types (EquipmentTypes)TArray<FRSEFoundationTagEntry>5. Equipment and ItemsEquipment kinds classes may use (Equip.Type.*): firearms, blades, implants...
Inventory Mode (InventoryMode)ERSEInventoryMode5. Equipment and ItemsHow the party carries its items (D-143), written into Inventory Rules -> Mode: Shared (one party grid: JRPG, ATB, Tactics) or Per Character (a bag per member, a stash at save points: live / Free Tactics games). It can be switched later both ways.
Item Categories (ItemCategories)TArray<FRSEFoundationTagEntry>5. Equipment and ItemsItem categories (Item.Category.*) for inventory tabs.
Off Hand Slot Id (OffHandSlotId)FName5. Equipment and ItemsSlot a two-handed weapon also occupies (None = no off-hand).
Ability Categories (AbilityCategories)TArray<FRSEFoundationTagEntry>6. Abilities and Command MenuAbility categories (Ability.Type.*).
Command Menu (CommandMenu)TArray<FRSECommandMenuEntry>6. Abilities and Command MenuThe classic battle command menu (written into the project's default layout).
Battle Modes (BattleModes)FRSEFoundationBattleModes7. Battle Modes--- 7. Battle modes ---
Progression (Progression)FRSEFoundationProgression8. Progression--- 8. Progression ---
Economy (Economy)FRSEFoundationEconomy9. Economy--- 9. Economy ---
Suggested Replacements (SuggestedReplacements)TMap<FGameplayTag,FGameplayTag>Change SafetyReplacements proposed when content made for another foundation names tags this one drops (Resource.MP -> Resource.Energy, Element.Fire -> Element.Plasma). The breaking-change report uses them first.
Description (Description)FTextInfoWhat the preset is for, shown on its card in the Studio.
Sort Order (SortOrder)int32InfoOrder among presets (lower first).
Thumbnail (Thumbnail)TSoftObjectPtr<UTexture2D>Info
UIStyle Id (UIStyleId)FNameInfoThe UI Style (Style Id of a DA_UIStyle_*: Gothic, Holo, Brass, Tactical...) that fits this preset (D-162 P64). Applying the foundation in the Studio makes it the project's default UI style (UI Theme -> Default Style). None = leave the style alone. Just an id: RSECore does not know UI styles.

URSEGrowthBoard

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A Growth Board (D-144): nodes and edges the player unlocks with board points, from a start node, each new node next to an open one.

PropertyTypeCategoryDescription
Edges (Edges)TArray<FRSEGrowthEdge>Board
Nodes (Nodes)TArray<FRSEGrowthNode>Board
Generator Class (GeneratorClass)TSoftObjectPtr<URSEClassData>GeneratorThe class the board was last generated from (the editor's Layout menu regenerates from it).
Generator Seed (GeneratorSeed)int32GeneratorSeed and inputs of the last Generate Board (re-runnable).
Edge Shape (EdgeShape)ERSEGrowthEdgeShapeLookStraight or curved edges (FromStyle = the style's choice). The layout check uses the same shape.
Layout Preset (LayoutPreset)ERSEGrowthLayoutPresetLookThe layout preset the board was generated with (the editor's Layout menu switches it). Informative for hand-made boards.
Regions (Regions)TArray<FRSEGrowthRegion>LookThemed regions (D-149): the screen tints their part of the board and writes their names.
Style (Style)TSoftObjectPtr<URSEGrowthBoardStyle>LookLook and vocabulary. Empty = Progression Systems -> Default Board Style.
Character Start Nodes (CharacterStartNodes)TMap<TSoftObjectPtr<URSECharacterData> ,FName>StartStart node per character (overrides the class).
Class Start Nodes (ClassStartNodes)TMap<FGameplayTag,FName>StartStart node per class tag (shared boards: each class enters from its own side).
Default Start Node (DefaultStartNode)FNameStartWhere characters start when nothing more specific applies.

URSEGrowthBoardStyle

Module RSECore, parent URSEPrimaryDataAsset, primary asset. How a Growth Board looks in game (D-144): its vocabulary, colors and node art.

PropertyTypeCategoryDescription
Backdrop (Backdrop)TSoftObjectPtr<UTexture2D>ArtOptional full-screen backdrop behind the board.
Backdrop Layers (BackdropLayers)TArray<FRSEGrowthBackdropLayer>ArtLayers behind the board, back to front (parallax, starfields, textures).
Center Light Color (CenterLightColor)FLinearColorArtA soft light behind the board's center (vignette from Background Color).
Nebula Clouds (NebulaClouds)TArray<FRSEGrowthNebulaCloud>ArtSoft colored clouds behind the board (depth). Empty = Growth UI -> Board -> Nebula Clouds.
Node Icons (NodeIcons)TMap<ERSEGrowthNodeKind,TSoftObjectPtr<UTexture2D> >ArtOptional art per kind (drawn inside the node).
Available Glow Color (AvailableGlowColor)FLinearColorColorsNodes the character can unlock now.
Background Color (BackgroundColor)FLinearColorColors
Color Mode (ColorMode)ERSEGrowthBoardColorModeColorsP65: the colors below are the board in the reference UI style (Classic). Follow UI Style (default) moves them with the active UI style's tokens; Fixed keeps them exactly.
Edge Closed Color (EdgeClosedColor)FLinearColorColors
Edge Open Color (EdgeOpenColor)FLinearColorColorsEdges between two unlocked nodes.
Locked Node Color (LockedNodeColor)FLinearColorColors
Node Colors (NodeColors)TMap<ERSEGrowthNodeKind,FLinearColor>ColorsNode fill per kind (missing kinds use Locked Node Color).
Edge Flow Seconds (EdgeFlowSeconds)floatLightLight that runs along open paths (seconds per pass; 0 = none).
Edge Glow Color (EdgeGlowColor)FLinearColorLightGlow around open paths: color and width in pixels (0 = no glow).
Edge Glow Width (EdgeGlowWidth)floatLight
Edge Width (EdgeWidth)floatLightEdge thickness in pixels at zoom 1.
Kind Halo Extent (KindHaloExtent)floatLightD-154: how far the kind halos reach, in node sizes beyond the node.
Kind Halos (KindHalos)TMap<ERSEGrowthNodeKind,FLinearColor>LightD-154: a soft, constant halo per node kind (the keystones' subtle gold glow), drawn behind the node whether open or not. Alpha = strength; missing or transparent = none.
Open Node Glow (OpenNodeGlow)floatLightUnlocked nodes glow in their kind color (halo alpha).
Pulse Scale (PulseScale)floatLight
Pulse Seconds (PulseSeconds)floatLight"Available next" pulse: seconds per cycle and how far the halo grows (share of the node size).
Marker Color (MarkerColor)FLinearColorMarkerWhere the character stands (travel cost): marker color and optional icon.
Marker Icon (MarkerIcon)TSoftObjectPtr<UTexture2D>Marker
Curved Edges (bCurvedEdges)boolShapeEdges drawn as gentle curves (roots, vines) instead of straight lines (constellations, circuits).
Round Nodes (bRoundNodes)boolShapeNodes drawn as circles (stars, knots) instead of rounded squares (sockets).
Node Scales (NodeScales)TMap<ERSEGrowthNodeKind,float>ShapeSize multiplier per node kind. Missing = 1. D-154: the starter looks keep every kind at 1 (one base size at any zoom); shape, color and Kind Halos tell the kinds apart.
Node Shapes (NodeShapes)TMap<ERSEGrowthNodeKind,ERSEGrowthNodeShape>ShapeOutline per node kind (missing kinds: circle when Round Nodes, else square).
Node Size (NodeSize)floatShapeNode size in board units (1 unit = one grid step of the board's positions).
Tier Ring Colors (TierRingColors)TArray<FLinearColor>ShapeRing color per node tier (FRSEGrowthNode::Tier: 0 common .. 3 rare), like item rarity. Missing tiers: no ring.
Board Term (BoardTerm)FTextVocabularyWhat the board is called on screen ("Constellation", "Roots", "Circuit"). DisplayName names the style itself.
Kind Names (KindNames)TMap<ERSEGrowthNodeKind,FText>VocabularyNames of the node kinds on screen (legend, tooltips). Missing = the engine's words.
Node Term (NodeTerm)FTextVocabularyWhat a node is called ("Star", "Knot", "Socket").
Points Term (PointsTerm)FTextVocabularyWhat the board points are called ("Starlight", "Sap", "Charge").
Unlock Verb (UnlockVerb)FTextVocabularyThe verb on the unlock button ("Ignite", "Grow", "Wire").

URSEGrowthPlan

Module RSECore, parent URSEPrimaryDataAsset, primary asset. How one class grows beyond its levels (D-144): the point tables and ability catalog of Classic + Points, its Growth Board, and the optional ways it learns (from enemies).

PropertyTypeCategoryDescription
Board (Board)TObjectPtr<URSEGrowthBoard>BoardThis class's board. Empty = the shared board (Progression Systems -> Board Scope) or none.
Generator Seed (GeneratorSeed)int32GeneratorSeed of the last Generate Point Tables (re-runnable).
Enemy Learning (EnemyLearning)TArray<FRSEEnemyLearningRule>LearningLearn abilities from enemies (blue magic style, in our own words: "Mimic"). Empty = never (unless a trait allows it).
Ability Catalog (AbilityCatalog)TArray<FRSEPointsAbility>PointsAbilities bought with ability points (active and passive), with prerequisites.
Attributes (Attributes)TArray<FRSEAttributeAllocation>PointsThe key attributes the player may raise, with their price and caps.
Point Grants (PointGrants)TArray<FRSEPointsGrant>PointsPoints earned by level, per currency (attribute and ability points; board points for the board system).

URSEHeroArchetype

Module RSECore, parent URSEArchetype, primary asset. Hero class archetype: role, stats and growth, abilities by level, allowed equipment, command menu (content: a Class).

URSEInteractableData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A kind of interactable (D-150): what it does (Behavior), who may use it (Use Conditions), what it also runs (Effects), its look, icon and prompt, and where the Populate Interactions tool may put it.

PropertyTypeCategoryDescription
Behavior (Behavior)TObjectPtr<URSEInteractableBehavior>Interactable
Effects (Effects)FRSEEffectListInteractableRun after every successful use (a flag, a quest objective, a tutorial).
Icon (Icon)TSoftObjectPtr<UTexture2D>InteractableThe icon (map, prompt, Studio).
Kind Tag (KindTag)FGameplayTagInteractableThe kind (Interactable.Kind.*): the map icon, the Populate tool and the Studio group by it.
Prompt (Prompt)FTextInteractableThe prompt's action; empty = the behaviour's ("Open", "Light", "Read").
Use Conditions (UseConditions)FRSEConditionSetInteractableThe prompt (and the use) is there only while these pass.
Look (Look)FRSEInteractableLookLook
Placement (Placement)FRSEInteractablePlacementPlacement
Reactive Tags (ReactiveTags)FGameplayTagContainerReactionsD-157: what it reacts to when an ability is used on the world (World.Reactive.*: Light, Flammable, Water, Fog). The World Reactions rules (Project Settings -> RPG Saga Engine -> World Reactions) decide what an ability does to it. Empty = nothing.
Visibility (Visibility)FRSEInteractableVisibilityVisibilityD-157: how it shows itself before use (highlight, hint, sparkle, map icon).

URSEInteractionData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A scripted interaction: conditions + effects.

PropertyTypeCategoryDescription
One Shot (bOneShot)boolInteractionSucceeds only once; the narrative state remembers it by this asset's path. When several level objects share one asset but each must be one-shot (e.g. identical chests), give each its own asset or gate it with its own flag instead.
Completed Effects (CompletedEffects)FRSEEffectListInteractionRuns on later attempts of a completed one-shot interaction.
Conditions (Conditions)FRSEConditionSetInteraction
Effects (Effects)FRSEEffectListInteraction
Failed Effects (FailedEffects)FRSEEffectListInteractionRuns when Conditions fail.
Bark Pools (BarkPools)TArray<TSoftObjectPtr<URSEBarkPoolData> >NPCD-157: the lines of NPCs that use this interaction (an NPC Type's small talk, a guard's calls), after the NPC's own pools and before the project's default pools (Barks settings).
Schedule (Schedule)TSoftObjectPtr<URSENPCScheduleData>NPCLiving NPCs (D-104): the day of an NPC that uses this interaction (a shopkeeper's hours, an innkeeper's evenings). NPC Types (archetypes) give it to every NPC made from them; an NPC's own Living NPC component schedule wins.

URSEInteriorData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A separate interior (D-150): which map, where the party appears, when it is open and what it needs.

PropertyTypeCategoryDescription
Closed Phases (ClosedPhases)FGameplayTagContainerAccessClosed during these phases of the day (Time.Phase.Night: a shop closed at night). Empty = always open.
Closed Text (ClosedText)FTextAccessSaid when it is closed / locked (empty = the settings' texts).
Conditions (Conditions)FRSEConditionSetAccessStory conditions to enter (a quest stage, a flag).
Key (Key)TObjectPtr<URSEItemData>AccessThe party needs this key to enter (kept, not used up).
Locked Text (LockedText)FTextAccess
Generation (Generation)FRSEInteriorGenerationGenerationD-158: a generated interior: sized from the building, rooms from the program, a personality, a seed.
Blackout Seconds (BlackoutSeconds)floatInteriorSeconds of black between outside and inside (negative = Interiors -> Blackout Seconds, about 0.4).
Override Rules (bOverrideRules)boolInteriorD-153: this interior's own rules (who goes in, battles, the shell) instead of its template's.
Entry Point (EntryPoint)FNameInteriorWhere the party appears inside (an RSE Arrival Point id or an actor tag in the map). None = the map's first entry point.
Map (Map)TSoftObjectPtr<UWorld>InteriorThe interior's map (empty = the template's). Loaded as a level instance away from the playable area.
Rules (Rules)FRSEInteriorRulesInterior
Template (Template)TObjectPtr<URSEInteriorTemplateData>InteriorThe template it was made from (its map when Map is empty; the analyzer and the Studio).
Inhabitants (Inhabitants)TArray<FRSEInteriorInhabitant>StoryD-158: who lives or works here (the story's NPCs in the program's inhabitant roles).
Lore (Lore)TArray<FRSELoreEntry>StoryD-158: texts for this interior's books, letters and notes (first; then Buildings -> Lore Libraries).
Stations (Stations)TArray<FRSEStationHook>StoryD-158: what the workstations do here (the counter opens this town's shop, the altar blesses).

URSEInteriorInteractionSetData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. What a kind of interior offers to do (D-161): 3 to 6 varied interactions in a home (something to examine, a note or a book, a small chest or drawer, a hearth or candle to light, a breakable, sometimes a quest hook), more at an inn.

PropertyTypeCategoryDescription
Requirements (Requirements)TArray<FRSEInteractionRequirement>Interactions
Total Range (TotalRange)FIntPointInteractionsThe interactions counted by the requirements below, in all (the cap keeps the most wanted ones).

URSEInteriorKitData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A modular interior kit (D-164): pieces of one pack that fit together on a module grid.

PropertyTypeCategoryDescription
Use Kit Collision (bUseKitCollision)boolKitThe pieces' own collision is used. Off (default): invisible boxes collide, the enclosure checks stay exact.
Grid (Grid)FRSEInteriorModuleGridKit
Kit Id (KitId)FNameKitA stable id (the wizard: the pack and kit name); None = the asset's name.
Pieces (Pieces)TArray<FRSEKitPiece>Kit
Style Tags (StyleTags)FGameplayTagContainerKitIts style (Interior.Style.Medieval, .Rustic, .SciFi...): the Building Analyzer matches kits and themes by it.
Thumbnail (Thumbnail)TSoftObjectPtr<UTexture2D>Kit
Material Overrides (MaterialOverrides)TMap<FName,TSoftObjectPtr<UMaterialInterface> >LookMaterial overrides by material slot name (empty = each mesh's own materials).
Kind Fallbacks (KindFallbacks)TArray<FRSEKitKindFallback>RulesWhat a missing kind falls back to. A kind not listed uses the built-in table (Fill Default Fallbacks shows it).
Kind Stretch (KindStretch)TArray<FRSEKindStretch>RulesLarger stretch for some piece kinds of this kit (a kind not listed uses the project's Kit Build -> Kind Stretch, then the grid's Max Stretch).
Slot Kinds (SlotKinds)TArray<FRSEKitSlotKinds>RulesWhich kinds fill each plan slot. A slot not listed uses the built-in table (Fill Default Slot Kinds shows it).

URSEInteriorProgramData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A kind of interior's rooms (D-158): which rooms on which floor, how tall the floors are, whether there is a cellar, who lives there.

PropertyTypeCategoryDescription
Interaction Set (InteractionSet)TObjectPtr<URSEInteriorInteractionSetData>InteractionsD-161: the interactions every interior of this kind offers (completed and capped after the furniture).
Force Own Heights (bForceOwnHeights)boolProgramD-164 / K4: the floor heights above stay even with a modular kit (else the storey is the kit's Wall Height).
Cellar Chance (CellarChance)floatProgramChance of a cellar when the building does not say (0..1; the interior's Generation can force it).
Cellar Height (CellarHeight)floatProgram
Corridor Width (CorridorWidth)floatProgramThe width of an upper floor's corridor or landing (cm; the stairs and a walkway fit in it).
Ground Floor Height (GroundFloorHeight)floatProgramThe ground floor's height and the upper floors' (cm, floor to floor).
Inhabitants (Inhabitants)TArray<FRSEInhabitantSlotSpec>ProgramWho lives or works here (spots or areas for NPCs and their routines).
Min Room Depth (MinRoomDepth)floatProgramThe smallest depth of a band of rooms behind or in front of the hub (cm); a thinner band joins the hub.
Rooms (Rooms)TArray<FRSEInteriorRoomSpec>Program
Single Room Area (SingleRoomArea)floatProgramA floor smaller than this is one single room (m²).
Upper Floor Height (UpperFloorHeight)floatProgram
Window Density (WindowDensity)floatProgramD-164 / K4: the share of the possible windows its interiors get (0..1; a room spec may set its own).
Resident Count (ResidentCount)FIntPointResidentsD-161: how many live here (the story's inhabitants included; random between the two). 0 = only the inhabitant slots.
Residents (Residents)TObjectPtr<URSEInteriorResidentSetData>ResidentsD-161: who lives here when the interior does not say (resident profiles by role).
Max Floors (MaxFloors)int32Size
Min Floors (MinFloors)int32SizeD-161: the floors this program is made for: a building with more is given MaxFloors (a cottage stays one storey, its loft left out), one with fewer gets MinFloors. 0 = no limit.

URSEInteriorResidentSetData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. Who lives in a settlement's interiors (D-161): resident profiles by role, picked by each interior's seed (names, looks, lines, schedules, the odd card player).

PropertyTypeCategoryDescription
Household Role (HouseholdRole)FGameplayTagResidentsThe household's role (Interior.Role.Resident): profiles of it (or under it) fill the interior up to its Resident Count, each in a spot of its own; the program's slots of this role are filled only while the count allows. Other roles fill their work places.
Profiles (Profiles)TArray<FRSEInteriorResidentProfile>Residents

URSEInteriorTemplateData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A kind of interior (D-150): a reusable small map with an entry point, an exit and slots (inn, house, shop, smithy, temple, cellar).

PropertyTypeCategoryDescription
Default Floors (DefaultFloors)int32GenerationD-158: floors above ground of a generated interior when its building does not say.
Program (Program)TObjectPtr<URSEInteriorProgramData>GenerationD-158: the rooms of interiors generated from this template (an inn: common room, kitchen, bedrooms upstairs, cellar).
Program Choices (ProgramChoices)TArray<FRSEInteriorProgramChoice>GenerationD-161: programs by building size (a cottage, a family house, a large house): the generator picks the one whose floor area and floors fit the interior (the seed decides between equal fits). Empty = Program for every size.
Themes (Themes)TArray<FRSEThemeChoice>GenerationD-158: the personalities its generated interiors may get (the seed picks one by weight).
Keywords (Keywords)TArray<FString>TemplateWords in a building's name or mesh that suggest this template ("inn", "tavern"): the building analyzer.
Map (Map)TSoftObjectPtr<UWorld>TemplateThe template's map (a small level: floor, walls, the entry point, the exit, the slots). Duplicate it to fill it.
Rules (Rules)FRSEInteriorRulesTemplateD-153: who goes in, battles, the sealed shell and the world's lighting while inside (interiors made from it inherit it).
Size (Size)FVectorTemplateThe inside size (cm), for the designer and the analyzer's report.
Slots (Slots)TArray<FRSEInteriorSlotInfo>TemplateThe slots of the map (what a buyer fills).
Template Tag (TemplateTag)FGameplayTagTemplateInterior.Template.Inn, .House, .Shop, .Smithy, .Temple, .Cellar (open set).

URSEInteriorThemeData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A dwelling's personality (D-158): a craftsman's workshop, a hunter's lodge, a witch's hut, a merchant's or a noble's house.

PropertyTypeCategoryDescription
Room Light Color (RoomLightColor)FLinearColorLightThe rooms' own light (a warm lamp light by default).
Room Light Intensity Range (RoomLightIntensityRange)FVector2DLight
Room Light Jitter (RoomLightJitter)floatLightThe seed varies the light's colour this much (0..1).
Room Light Per Square Meter (RoomLightPerSquareMeter)floatLightThe room light's intensity per square metre of floor (candela-like units), clamped below.
Snap to Kit Grid (bSnapToKitGrid)boolLookD-164 / K4: the layout snaps to the kit asset's module grid (off: the pieces are fitted to the free layout).
Floor Materials (FloorMaterials)TArray<TSoftObjectPtr<UMaterialInterface> >LookMaterials picked by the seed: floors, walls, wood (door frames, stairs).
Kit (Kit)FRSEInteriorKitLook
Kit Variants (KitVariants)TArray<FRSEInteriorKit>LookD-161: other kits the seed may pick instead of Kit (other floor boards, other wall timbers): neighbours of one size differ.
Trim Materials (TrimMaterials)TArray<TSoftObjectPtr<UMaterialInterface> >Look
Wall Materials (WallMaterials)TArray<TSoftObjectPtr<UMaterialInterface> >Look
Keywords (Keywords)TArray<FString>ThemeWords in a building's name that ask for this theme ("witch", "hunter"): the Building Analyzer.
Room Furnishings (RoomFurnishings)TArray<FRSEThemeRoomFurnishing>Theme
Style Tags (StyleTags)FGameplayTagContainerThemeD-164: its style (Interior.Style.Medieval, .SciFi...): kits and themes are matched by it.
Substitutions (Substitutions)TArray<FRSEFurnitureSubstitution>ThemeD-164: pieces swapped by kind (the first substitution whose Furniture Tag the piece has wins). Programs, interaction sets and resident sets keep their own pieces and tags; the seed (its own stream) picks the replacement.
Theme Tag (ThemeTag)FGameplayTagThemeInterior.Theme.Workshop, .Hunter, .Witch...

URSEItemData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. Base item definition (D-024).

PropertyTypeCategoryDescription
Sellable (bSellable)boolEconomyShops may buy it. Key items and documents never sell, whatever this says.
Buy Price (BuyPrice)int32EconomyPrice in shops, before the Economy BuyPriceMultiplier. 0 = no value (shops need a price override; it cannot be sold).
Sell Price Override (SellPriceOverride)int32EconomyWhat shops pay for one. -1 = BuyPrice x the sell ratio (the shop's or the Economy settings').
Category (Category)FGameplayTagGrid InventoryCategory (Item.Category.*), for inventory tab filters and sorting. Optional.
Grid Size (GridSize)FIntPointGrid InventoryCells the item takes in grid inventories (width x height). 1x1 for most items; at most Items -> Max Item Grid Size and never wider than the narrowest stash tab that shows it.
Rarity (Rarity)FGameplayTagGrid InventoryRarity tier (Item.Rarity.*): name color, frame and sort order. Empty = Items -> Default Rarity.
Weight (Weight)floatGrid InventoryWeight of one (D-143): counts against a member's carry capacity when Inventory Rules -> Use Weight is on.
Description (Description)FTextItem
Icon (Icon)TSoftObjectPtr<UTexture2D>Item
Icon Mesh Rotation (IconMeshRotation)FRotatorItemTurns the icon mesh before it is framed (packs model weapons along different axes; the studio's view does the rest).
Item Mesh (ItemMesh)TSoftObjectPtr<UStaticMesh>ItemThe item's mesh (D-126): the Portrait & Icon Studio renders Icon from it, and equipment without an Appearance Part shows it on its wearer at its slot's Attach Anchor (weapons in the hand). Empty: equipment uses its Appearance Part's mesh for the icon; items with neither get a template icon (a glyph of their kind).
Max Stack (MaxStack)int32ItemMaximum stack size. 0 = the default from Project Settings -> RPG Saga Engine -> Items.

URSEItemFamily

Module RSECore, parent URSEArchetype, primary asset. Item family: "potion", "bomb", "melee weapon", "ranged weapon" (content: an Item of the family's item class).

URSEItemRecipeData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. Two items combined into a third (D-039), e.g.

PropertyTypeCategoryDescription
Consume First (bConsumeFirst)boolRecipe
Consume Second (bConsumeSecond)boolRecipe
Effects (Effects)FRSEEffectListRecipeExtra effects of the combination (e.g. a story flag).
First Ingredient (FirstIngredient)TObjectPtr<URSEItemData>Recipe
Result (Result)TObjectPtr<URSEItemData>Recipe
Result Count (ResultCount)int32Recipe
Second Ingredient (SecondIngredient)TObjectPtr<URSEItemData>Recipe
Success Text (SuccessText)FTextRecipeShown after combining. Empty = Project Settings -> RPG Saga Engine -> Puzzles -> Combine Success Format.

URSEItemUseData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. Items an object accepts (D-039): "Use the Minute Hand?" is asked automatically when the party holds one, and any key item can be tried on the object from the party menu (a wrong one gets the refusal lines).

PropertyTypeCategoryDescription
Accepted Items (AcceptedItems)TArray<FRSEItemUseRule>Use
Offer Automatically (bOfferAutomatically)boolUseAsk "Use ...?" on Interact when the party holds an accepted item. Off = only from the party menu.
Conditions (Conditions)FRSEConditionSetUseWhen items can be used on the object at all (e.g. the puzzle is not solved yet). Empty = always.
Refusal Lines (RefusalLines)TArray<FText>UseSaid for a wrong item. Empty = Project Settings -> RPG Saga Engine -> Puzzles -> Default Refusal Lines.

URSEKitLibrary

Module RSEEditor, parent UDataAsset. The interior kit library asset.

PropertyTypeCategoryDescription
Entries (Entries)TArray<FRSEKitLibraryEntry>Library
Folders (Folders)TArray<FDirectoryPath>LibraryFolders scanned (a rescan scans them again: changed meshes measured, everything reclassified, corrections kept).
Grid Overrides (GridOverrides)FRSEKitGridOverridesLibraryThe buyer's kit corrections (typed grid values per kit; piece moves are taken from the entries' Kit corrections).
Kits (Kits)TArray<FRSEKitGroupInfo>Library
Languages (Languages)TArray<FName>LibraryLanguage packs used (ids); empty = the taxonomy's defaults.
Last Report (LastReport)FRSEKitScanReportLibrary
Provenance (Provenance)TArray<FRSEProvenanceRecord>LibraryWhat the Create step wrote into kit and furniture assets (a field is rewritten only while it still holds this).
Taxonomy (Taxonomy)TSoftObjectPtr<URSEKitTaxonomy>LibraryThis library's taxonomy (empty = Project Settings -> Interior Kits -> Taxonomy).

URSEKitTaxonomy

Module RSEEditor, parent UDataAsset. The kit classifier's rules (data asset, Project Settings -> RPG Saga Engine -> Interior Kits -> Taxonomy).

PropertyTypeCategoryDescription
Front Axis Min Ratio (FrontAxisMinRatio)floatFrontK11: Long Side / Short Side front rules apply when the footprint's long side is at least this many times its short side.
Front Mirror Threshold (FrontMirrorThreshold)floatFrontK11: an axis whose mirror symmetry reaches this looks the same from the front and the back: either front on it is right.
Front Softness (FrontSoftness)floatFrontK11: confidence of a front read through a front rule = evidence on the axis / (evidence + the other axis' evidence + this).
Folder Only Max Confidence (FolderOnlyMaxConfidence)floatReviewK11: the highest confidence of a kind named only by folder words (the mesh's own name says nothing).
Front Review Threshold (FrontReviewThreshold)floatReviewK11: furniture and props whose kind's front matters (Front Matters) need review when the front is less sure than this (and the piece is neither symmetric nor the same from the front and the back).
Named Shape Veto (NamedShapeVeto)floatReviewK11: the shape tests lower a named kind's score at most by this share of its word score, so a named piece that does not look the part stays a doubtful guess (low confidence, review) instead of becoming unclassified. 1 = the shape may veto the name entirely.
Review Threshold (ReviewThreshold)floatReviewRows below this confidence are listed as needing review (a kind may set its own).
Rival Word Share (RivalWordShare)floatReviewK11, confidence calibration: a word naming an unrelated kind is a conflict even when that kind's shape tests ruled it out ("Workbench_Forge"): the runner-up counts at least this share of the best unrelated kind's word score.
Shape Conflict Penalty (ShapeConflictPenalty)floatReviewK11: when the shape tests of a named winner add up against it, the confidence is scaled by 1 - this x (shape against / word score), down to 1 - this: the name says one thing, the geometry another.
Shape Only Max Confidence (ShapeOnlyMaxConfidence)floatReviewK11: the highest confidence of a kind guessed from the shape alone (no word names any kind). Below Review Threshold by default: on a real pack shape-only guesses (a lily pad, a flag) passed as tables.
Drop Single Letters (bDropSingleLetters)boolRulesDrop one-letter words (variant tails: _A, _B; also the "S" of "S_Wall").
Group Words (GroupWords)TArray<FString>RulesK11: words that make a name a group of pieces ("Barrel_Stack", "Crate_Pile", "Books"): one piece's size tests do not describe it, so the named kind's shape score counts at Group Shape Weight.
Ignore Folder Words (IgnoreFolderWords)TArray<FString>RulesMeshes under a folder with one of these words are ignored without being loaded (fx, vehicles, characters).
Ignore Patterns (IgnorePatterns)TArray<FRSEPackNamePattern>RulesMeshes whose name matches are ignored without being loaded (LODs, UCX_ collision, _Broken chunks...).
Languages (Languages)TArray<FRSEKitLanguagePack>Rules
Rules (Rules)TArray<FRSEKitWordRule>Rules
Stop Words (StopWords)TArray<FString>RulesWords dropped from names before matching (prefixes and filler: sm, mesh, prop, bld, env, geo, static).
Confidence Softness (ConfidenceSoftness)floatScoringConfidence = best / (best + runner-up + this).
Folder Weight (FolderWeight)floatScoringFolder words count this much of a name word.
Group Shape Weight (GroupShapeWeight)floatScoringK11: share of the shape score kept for a group (0 = the name alone decides).
Max Reasons (MaxReasons)int32ScoringReasons kept per classification (strongest first).
Min Score (MinScore)floatScoringA best score below this leaves the mesh unclassified.
Shape Only Weight (ShapeOnlyWeight)floatScoringKinds guessed from shape alone count this much of their shape score.
Description (Description)FTextTaxonomy
Kinds (Kinds)TArray<FRSEKitPieceKindDef>Taxonomy

URSELockData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A kind of lock (D-109): how hard it is to pick, who may pick it, which keys open it, what a failure costs.

PropertyTypeCategoryDescription
Consume Key (bConsumeKey)boolLockThe key is used up when it opens the lock.
Pickable (bPickable)boolLockIt can be picked at all (off = only a key or the story opens it).
Breaks on Failure (BreaksOnFailure)TObjectPtr<URSEItemData>LockA failed attempt uses up one of this item (a lockpick breaks). Empty = nothing.
Difficulty (Difficulty)floatLockLockpick score at which the chance is Chance At Equal Score (and the sweet spot has its base width).
Failure Effects (FailureEffects)FRSEEffectListLockStory effects of a failed attempt.
Failure Noise Radius (FailureNoiseRadius)floatLockVisible enemies within this distance hear a failed attempt (cm; 0 = silent).
Keys (Keys)TArray<TObjectPtr<URSEItemData> >LockKeys that open it at once (any one of them).
Pick Requirements (PickRequirements)FRSEExploreRequirementsLockWho may pick it (usually: the party carries Thieves' Tools).
Pins Override (PinsOverride)int32LockPins of the minigame (0 = from the difficulty: Exploration RPG -> Base Pins, Difficulty Per Pin).

URSELootTable

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A reusable loot table (D-042): what an enemy drops when defeated.

PropertyTypeCategoryDescription
Loot (Loot)FRSELootLoot

URSELoreLibraryData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A library of lore texts (D-158): Buildings -> Lore Libraries, and an interior's own Lore.

PropertyTypeCategoryDescription
Entries (Entries)TArray<FRSELoreEntry>Lore

URSEMapData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. The area map of one level (D-089): the top-down picture Generate Map made, where it lies in the world, and what the designers added by hand (name, regions, markers, hidden categories).

PropertyTypeCategoryDescription
Show Minimap (bShowMinimap)boolContentShow the minimap on this level (the area map stays available).
Fog Of War (FogOfWar)ERSEMapFogModeContent
Hidden Categories (HiddenCategories)FGameplayTagContainerContentMarker categories this map never shows (e.g. enemies on a town map).
Markers (Markers)TArray<FRSEMapManualMarker>ContentMarkers placed by hand (kept when the map is regenerated).
Regions (Regions)TArray<FRSEMapRegion>ContentNamed parts of the map. Regions made from the level's area volumes are marked Generated and refreshed each time.
Generated Resolution (GeneratedResolution)int32GenerationPicture size of the last generation.
North Yaw (NorthYaw)floatGenerationWorld yaw that points up on the map, used when the level has no Map Bounds Volume (0 = world +X up, 90 = world +Y up).
Resolution (Resolution)int32GenerationPicture size in pixels for this map (0 = Map Generator settings -> Resolution).
Style (Style)TSoftObjectPtr<URSEMapStyle>GenerationThe look Generate Map uses for this map (empty = Map Generator settings -> Default Style).
Frame (Frame)FRSEMapFrameMapWhere the picture lies in the world (written by Generate Map).
Level (Level)TSoftObjectPtr<UWorld>MapThe level this map shows.
Playable Bounds (PlayableBounds)FBoxMapThe playable part of the level (navmesh and gameplay actors; written by Generate Map). The area map opens fitted to it and does not pan far outside it. Invalid = the whole picture.
Target Index (TargetIndex)FStringMapThe target ids above as "|id|id|", searchable without loading the map (objectives on another level).
Targets (Targets)TArray<FRSEMapTargetLocation>MapWhere the level's map target ids lie (written by Generate Map from Map Marker components).
Texture (Texture)TSoftObjectPtr<UTexture2D>MapThe generated top-down picture.
World Bounds (WorldBounds)FBoxMapThe level content the picture was made from (written by Generate Map).

URSEMapStyle

Module RSECore, parent URSEPrimaryDataAsset, primary asset. The look of a generated area map (D-089): what Generate Map does to the top-down picture of the level.

PropertyTypeCategoryDescription
Building Color (BuildingColor)FLinearColorBuildings--- Buildings (Stylized) ---
Building Edge Color (BuildingEdgeColor)FLinearColorBuildings
Building Roof Shade (BuildingRoofShade)floatBuildingsLight and shade of the roof sides (0 = flat).
Building Roof Tint (BuildingRoofTint)floatBuildingsHow much of the roofs' own color shows (0 = every building in Building Color).
Building Shadow (BuildingShadow)floatBuildingsThe shadow buildings cast on the ground (0 = none).
Shadow Offset (ShadowOffset)floatBuildingsHow far shadows fall, in pixels at 2048 (toward the bottom right).
Exposure Bias (ExposureBias)floatCaptureExposure compensation of the capture, in stops.
Post Process Material (PostProcessMaterial)TSoftObjectPtr<UMaterialInterface>CaptureOptional post-process material blended into the top-down capture (outlines, toon shading...).
Brightness (Brightness)floatColor--- Color ---
Contrast (Contrast)floatColor
Posterize Levels (PosterizeLevels)int32ColorColor steps per channel (0 = off): fewer steps give flat, painted areas.
Saturation (Saturation)floatColor0 = gray, 1 = as captured.
Smooth Radius (SmoothRadius)int32ColorBlur radius in pixels before the color steps (0 = off).
Tint (Tint)FLinearColorColor
Tint Strength (TintStrength)floatColorHow much the colors are multiplied by Tint (0 = not at all).
Forest Canopy Shade (ForestCanopyShade)floatForestsLight and shade of the tree crowns inside forests (0 = flat color).
Forest Color (ForestColor)FLinearColorForests--- Forests (Stylized) ---
Forest Edge Color (ForestEdgeColor)FLinearColorForests
Forest Merge Distance (ForestMergeDistance)floatForestsTrees closer than this merge into one forest shape.
Forest Shadow (ForestShadow)floatForestsThe shadow forests cast on the ground (0 = none).
Border Color (BorderColor)FLinearColorFrame
Border Width (BorderWidth)int32FrameBorder line width in pixels (at 2048; scaled with the resolution). 0 = none.
Frame Texture (FrameTexture)TSoftObjectPtr<UTexture2D>FrameOptional frame picture laid over the whole map (its alpha shows the map through).
Edges Only (bEdgesOnly)boolOutlinesOnly the outlines on the background color (plans, blueprints).
Edge Color (EdgeColor)FLinearColorOutlines
Edge Strength (EdgeStrength)floatOutlinesOutline strength (0 = none) along edges of shapes and height changes.
Edge Threshold (EdgeThreshold)floatOutlinesBrightness difference that counts as an edge (lower = more lines).
Outside Desaturate (OutsideDesaturate)floatOutsideColor loss outside the playable area (0 = none).
Outside Dim (OutsideDim)floatOutsideDarkening of what lies outside the playable area (0 = none).
Outside Feather (OutsideFeather)floatOutsideSoftness of the playable area's edge, in pixels at 2048.
Background Color (BackgroundColor)FLinearColorPaperWhere the level has nothing (outside the ground), and under the lines of an edges-only style.
Grid Color (GridColor)FLinearColorPaperGrid line color; alpha = opacity.
Grid Spacing (GridSpacing)int32PaperGrid line every N pixels (0 = no grid).
Paper Noise (PaperNoise)floatPaperGenerated paper grain and blotches when there is no paper picture (0 = none).
Paper Strength (PaperStrength)floatPaperHow strongly the paper picture shows (0 = not at all).
Paper Texture (PaperTexture)TSoftObjectPtr<UTexture2D>PaperOptional paper picture multiplied over the map (tiled at its own size).
Vignette (Vignette)floatPaperDarkening toward the corners (0 = none).
Vignette Color (VignetteColor)FLinearColorPaper
Preset (Preset)ERSEMapStylePresetPresetPreset Apply Preset writes.
Contour Color (ContourColor)FLinearColorRelief
Contour Interval (ContourInterval)floatReliefHeight between contour lines (0 = no contour lines).
Contour Major Every (ContourMajorEvery)int32ReliefEvery Nth contour line is stronger (0 = all the same).
Contour Strength (ContourStrength)floatRelief
Hillshade Altitude (HillshadeAltitude)floatReliefHeight of that light above the horizon (lower = longer, stronger shading).
Hillshade Azimuth (HillshadeAzimuth)floatReliefWhere the light of the hill shading comes from on the map (degrees clockwise from up; 315 = top left).
Hillshade Exaggeration (HillshadeExaggeration)floatReliefHeights are multiplied by this for the shading (gentle levels need more).
Hillshade Strength (HillshadeStrength)floatReliefHill shading from the ground's height (0 = none).
Road Color (RoadColor)FLinearColorRoadsRoad and path meshes (Map Generator -> Road Keywords) in this color, with a thin edge. Alpha = how much.
Road Edge Color (RoadEdgeColor)FLinearColorRoads
Rock Color (RockColor)FLinearColorRocks--- Rocks (Stylized) ---
Source (Source)ERSEMapSourceSourceWhat the picture is made from: a drawn map (Stylized) or a lit photo from above (Photo).
Palette Strength (PaletteStrength)floatTerrainHow strongly each terrain type takes its palette color (0 = the level's color, 1 = the palette's).
Rock Slope (RockSlope)floatTerrainShape terrain: slopes steeper than this are rock.
Sand Distance (SandDistance)floatTerrainShape terrain: ground this close to water (and at most Sand Height above it) is sand.
Sand Height (SandHeight)floatTerrain
Terrain Border Strength (TerrainBorderStrength)floatTerrainA thin line where two terrain types meet (0 = none).
Terrain Clean Radius (TerrainCleanRadius)int32TerrainSpeckle cleanup: a pixel takes the most common terrain type around it within this radius (pixels at 2048).
Terrain Detail (TerrainDetail)floatTerrainHow much of the ground's own light and dark detail is kept inside a terrain type (0 = flat color).
Terrain Layer Colors (TerrainLayerColors)TArray<FRSEMapTerrainLayerColor>TerrainLandscapes: the map color of each paint layer by a word of its name (first match wins). Layers without a match keep the color the landscape shows. The terrain types are then sorted from these colors.
Terrain Max Lightness (TerrainMaxLightness)floatTerrain
Terrain Min Lightness (TerrainMinLightness)floatTerrainLightness range the terrain colors are brought into (maps read best light).
Terrain Palette (TerrainPalette)TArray<FLinearColor>TerrainMap colors the terrain types are pulled toward (nearest color wins). Empty = keep the level's own colors.
Terrain Saturation (TerrainSaturation)floatTerrainSaturation of the terrain colors (1 = as sorted).
Terrain Smooth Radius (TerrainSmoothRadius)int32TerrainBlur of the ground colors before they are sorted, in pixels at 2048 (removes texture noise).
Terrain Source (TerrainSource)ERSEMapTerrainSourceTerrainWhere the terrain colors come from: the ground's colors, or its shape (slopes, shores) when the colors say nothing.
Terrain Types (TerrainTypes)int32TerrainHow many terrain types the ground colors are sorted into (grass, road, sand, rock...). 0 or 1 = keep the colors.
Water Color (WaterColor)FLinearColorWater--- Water (Stylized) ---
Water Edge Color (WaterEdgeColor)FLinearColorWater
Water Shore Color (WaterShoreColor)FLinearColorWaterThe lighter band along the shore, inside the water.
Water Shore Width (WaterShoreWidth)floatWaterWidth of the shore band in pixels at 2048.

URSENPCArchetype

Module RSECore, parent URSEArchetype, primary asset. NPC type: merchant, quest giver, recruiter, innkeeper, card player, passer-by (content: the NPC's Interaction).

URSENPCReactionData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. How a living NPC reacts to danger (D-173, docs/product/living-npcs.md "Reactions"): a battle that starts near it (flee, watch, cower, help, or ignore) and the crimes it witnesses (guards: warn, chase, effects).

PropertyTypeCategoryDescription
Battle Response (BattleResponse)ERSENPCBattleResponseBattle--- Battles ---
Reaction Activity (ReactionActivity)FGameplayTagBattleThe activity shown while it reacts (its animation: NPC.Activity.Cower, .Watch, .Flee). Empty = the response's default.
Reaction Bark Kind (ReactionBarkKind)FGameplayTagBattleThe line it says when it reacts (Bark.Kind.Panic from its pools). Empty = none.
Reaction Delay (ReactionDelay)FVector2DBattleSeconds before it reacts (random between the two: a crowd never moves in unison).
Return Delay (ReturnDelay)FVector2DBattleSeconds it waits after the battle ended before it returns to its day (random between the two).
Trigger Distance (TriggerDistance)floatBattleIt reacts to a battle that starts within this distance of it (cm).
Crimes (Crimes)TArray<FRSENPCCrimeRule>CrimesThe crimes it answers, the first rule that fits wins. Empty = it ignores crimes.
Require Line Of Sight (bRequireLineOfSight)boolCrimes|SensesWithout a Senses asset: sight needs a clear line.
Eye Height (EyeHeight)floatCrimes|SensesHeight of its eyes above its feet (cm), for the line of sight.
Hearing Radius (HearingRadius)floatCrimes|SensesWithout a Senses asset: how far it hears all around (cm).
Senses (Senses)TSoftObjectPtr<URSERoamingBehaviorData>Crimes|SensesIts senses for crimes: a Roaming Behavior asset (sight cone and radius, hearing, line of sight; the time and weather rules scale them). Empty = the values below.
Sight Half Angle (SightHalfAngle)floatCrimes|SensesWithout a Senses asset: half the opening of its sight cone (degrees).
Sight Radius (SightRadius)floatCrimes|SensesWithout a Senses asset: how far it sees (cm).
Hide at Flee Place (bHideAtFleePlace)boolFleeIt goes inside at the end of the run (hidden, like a night at home) until the battle is over. Off: it stays out and cowers there.
Flee Distance (FleeDistance)floatFleeFlee without a place: how far from the fight it runs (cm).
Flee Place (FleePlace)FNameFleeFlee: the NPC Place it runs to (its door, a cellar, the church). Empty = it runs away from the fight (Flee Distance).
Flee Speed Scale (FleeSpeedScale)floatFleeMultiplies its walking speed while it flees.
Help Distance (HelpDistance)floatHelpHelp: it stops this far from the fight, ready (cm).
Help Effects (HelpEffects)FRSEEffectListHelpHelp: run once when it answers the call (a flag, a story effect: "the guards joined the fight"). Reinforcements of the encounter itself are the encounter's.
Help Speed Scale (HelpSpeedScale)floatHelpHelp: multiplies its walking speed on the way.
Watch Distance (WatchDistance)floatWatchWatch: it keeps at least this far from the fight (cm).

URSENPCScheduleData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A living NPC's day (D-104, docs/product/living-npcs.md): hour ranges (or phases of the day, weather, story conditions) -> an activity at a place (stay and work, wander, walk a route, or be away at home).

PropertyTypeCategoryDescription
Reaction (Reaction)TSoftObjectPtr<URSENPCReactionData>ReactionD-173: how an NPC with this schedule reacts to a battle nearby and to crimes (flee, watch, cower, help; guards warn and chase). The Living NPC component's own Reaction wins; empty = the project's default (Living NPCs -> Default Reaction).
Default (Default)FRSENPCActivityScheduleWhat it does when no line holds.
Entries (Entries)TArray<FRSENPCScheduleEntry>ScheduleThe day, first matching line wins (put the special cases first: "in the rain", "after the quest").
Seek Shelter (bSeekShelter)boolWeatherReacts to bad weather: an outdoor activity (not Sheltered, not Away) becomes Shelter in the Shelter Weathers.
Shelter (Shelter)FRSENPCActivityWeatherWhere it goes in that weather: home (Away) or a spot under a roof (Stay, Sheltered).
Shelter Weathers (ShelterWeathers)FGameplayTagContainerWeather

URSENPCStyleData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. An NPC style (D-173, docs/product/living-npcs.md "Presets"): one pick for a kind of person: its day (schedule), how it reacts to battles and crimes (reaction), what it says (bark pools) and the places its day needs (Home, Field, Tavern...).

PropertyTypeCategoryDescription
Bark Pools (BarkPools)TArray<TSoftObjectPtr<URSEBarkPoolData> >StyleWhat it says. Empty = the project's default pools.
Names (Names)TArray<FText>StyleNames used in turn when the request gives none ("Old Hob", "Mara").
Places (Places)TArray<FName>StyleThe NPC Place ids its schedule uses (Home, Field...). Populate NPCs puts an area place with each id over the populated area unless the level has one already (then the NPCs use yours: move the places where they belong).
Reaction (Reaction)TSoftObjectPtr<URSENPCReactionData>StyleHow it reacts to a battle nearby and to crimes. Empty = the project's default reaction.
Schedule (Schedule)TSoftObjectPtr<URSENPCScheduleData>StyleIts day: hours / phases -> activities at places.
Tags (Tags)FGameplayTagContainerStyleThe roles this style covers (a Merchant style: Archetype.Role.NPC.Merchant), for search and the NPC Type presets.

URSEOptionalSceneData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. An optional scene (D-039): what other characters are doing elsewhere.

PropertyTypeCategoryDescription
Missed when Skipped (bMissedWhenSkipped)boolSceneWalking away without viewing it skips it for good (marked seen, like a missed ATE). Off = offered again next time.
Conditions (Conditions)FRSEConditionSetSceneWhen the scene is offered (empty = always, until seen).
Dialog (Dialog)TSoftObjectPtr<URSEDialogData>SceneThe scene itself.
Effects (Effects)FRSEEffectListSceneRun when the player chooses to view it.
Event (Event)FGameplayTagSceneStory id; seen = the scene is no longer offered. Required.

URSEPactData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A Pact (D-013, docs/design/pacts.md): the customization layer of main characters.

PropertyTypeCategoryDescription
Backlash Damage Percent (BacklashDamagePercent)floatBacklashDamage to the summoner, in percent of its maximum HP.
Backlash Status (BacklashStatus)TObjectPtr<URSEStatusData>Backlash
Backlash Status Chance (BacklashStatusChance)floatBacklashChance in percent to apply BacklashStatus.
Abilities (Abilities)TArray<FRSEPactAbility>HolderAbilities learned with Pact points.
Affinities (Affinities)TArray<FRSEElementAffinityEntry>HolderElemental affinities of the holder, combined with class, equipment and statuses.
Granted Tags (GrantedTags)FGameplayTagContainerHolderTraits of the holder (e.g. a status immunity).
Description (Description)FTextPact
Resonance on Act (ResonanceOnAct)floatResonanceResonance the holder gains each time it uses an ability or item (not the summon itself).
Resonance on Hit (ResonanceOnHit)floatResonanceResonance the holder gains for each damaging hit it receives.
Resonance Per Damage Percent (ResonancePerDamagePercent)floatResonanceExtra Resonance per percent of maximum HP lost to a hit.
Summon Controlled by AI (bSummonControlledByAI)boolSummonPlayer-commanded (default) or AI-commanded. A summon of an AI unit is always AI-commanded.
Summon Ability (SummonAbility)TObjectPtr<URSEAbilityData>SummonThe summon command: an ability with a Summon effect, targeting Self. Always available to the holder.
Summon AIProfile (SummonAIProfile)TObjectPtr<URSEAIProfile>SummonProfile when the summon is AI-commanded. Empty = the summoner's profile, then the default one.
Summon Character (SummonCharacter)TObjectPtr<URSECharacterData>SummonThe summoned creature: class, stats and abilities like any character.
Summon Footprint Radius (SummonFootprintRadius)floatSummonFree Tactics (D-110): footprint radius of the summon in meters (a big creature takes more room). 0 = Free Tactics -> Default Summon Radius.
Summon Level (SummonLevel)int32SummonLevel of the summon. 0 = the summoner's level.
Summon Turns ATB (SummonTurnsATB)int32SummonATB: own turns (commands) the summon keeps the summoner's place.
Summon Turns Tactics (SummonTurnsTactics)int32SummonTactics: own turns the summon stays on the grid.

URSEPairedAnimationData

Module RSE, parent URSEPrimaryDataAsset, primary asset. One paired animation (D-172): the attacker's and the victim's montages, where they stand, the sync point, when it may play, and its camera, slow motion and effects.

PropertyTypeCategoryDescription
Align Mode (AlignMode)ERSEPairedAlignModeAlignment
Align Seconds (AlignSeconds)floatAlignmentSeconds the alignment slide takes (negative = Paired Animations -> Align Seconds). Motion warping replaces it when available.
Relative (Relative)FRSEPairedRelativeTransformAlignment
Warp Target Name (WarpTargetName)FNameAlignmentWarp target name of the attacker montage's Motion Warping window (AnimationWarping / MotionWarping plugins): when the attacker has a motion warping component, its target is set to the aligned transform and the montage carries it there (no slide).
Conditions (Conditions)FRSEPairedConditionsConditions
Weight (Weight)floatConditionsRelative chance among the pairs that fit (0 = never picked by chance; still usable by name from an ability's look).
Attacker Montage (AttackerMontage)TSoftObjectPtr<UAnimMontage>PairPlayed on the unit acting.
Kind (Kind)ERSEPairedAnimationKindPair
Play Rate (PlayRate)floatPairSpeed of both montages.
Victim Montage (VictimMontage)TSoftObjectPtr<UAnimMontage>PairPlayed on its primary target. Empty = the victim keeps its own reactions (a one-sided pair).
Skippable (bSkippable)boolPresentationConfirm / Cancel may skip it (Paired Animations -> Skippable decides when unset).
Camera (Camera)TObjectPtr<URSECue_Camera>PresentationThe cinematic camera while the pair plays (when the battle allows camera shots). Empty = Paired Animations -> Default Camera.
Slow Motion (SlowMotion)FRuntimeFloatCurvePresentationTime dilation over real seconds from the sync point (empty = Paired Animations -> Default Slow Motion; flat 1 = none).
Sync Cues (SyncCues)TArray<TObjectPtr<URSEBattleCue> >PresentationCues that start at the sync point (VFX, sounds, flashes, shakes...).
Attacker Sync Time (AttackerSyncTime)floatSyncSeconds into the attacker montage where the two meet (the hit). Negative = its first RSEImpact notify, else half its length.
Victim Sync Time (VictimSyncTime)floatSyncSeconds into the victim montage that match the attacker's sync point. Negative = its first RSEImpact notify, else its start.

URSEPairedAnimationLibrary

Module RSE, parent URSEPrimaryDataAsset, primary asset. The pairs a project can pick from (D-172): finishers, counters, parries, grabs and phase moments, chosen by their conditions and weights.

PropertyTypeCategoryDescription
Pairs (Pairs)TArray<TObjectPtr<URSEPairedAnimationData> >Library

URSEPartyCommandData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A delegated party command (D-097): what it does, who may do it (class, abilities, items, story conditions) and its result (success chance, effects on success and failure, noise that draws enemies).

PropertyTypeCategoryDescription
Behavior (Behavior)ERSEPartyCommandBehaviorCommand
Icon (Icon)TSoftObjectPtr<UTexture2D>CommandIcon of the radial menu entry (empty = the name only).
Max Range (MaxRange)floatCommandFarthest target from the leader (cm; 0 = no limit).
Sort Order (SortOrder)int32CommandPosition of the entry in the radial menu (lower first).
Target (Target)ERSEPartyCommandTargetCommand
Conditions (Conditions)FRSEConditionSetRequirementsStory conditions (flags, items, members...). Empty = always.
Required Abilities (RequiredAbilities)TArray<TObjectPtr<URSEAbilityData> >RequirementsThe member must know one of these abilities (empty = none needed).
Required Class Tags (RequiredClassTags)FGameplayTagContainerRequirementsThe member's class tag must match one of these (empty = any class).
Required Equipment Tags (RequiredEquipmentTags)FGameplayTagContainerRequirementsD-148: the member must wear equipment with one of these tags (its Equipment Type, Slot Type or Granted Tags: a lute, a grappling hook...). Empty = none needed. A member without it never sees the command on its radial.
Required Items (RequiredItems)TArray<TObjectPtr<URSEItemData> >RequirementsThe party must carry every one of these items ("only who has lockpicks").
Requirement Text (RequirementText)FTextRequirementsWhy nobody may do it now ("Needs lockpicks."), shown on the disabled entry. Empty = a generic text.
Failure Effects (FailureEffects)FRSEEffectListResultEffects when it fails.
Failure Noise Radius (FailureNoiseRadius)floatResultA failure makes noise: visible enemies within this distance of the member notice the party (cm; 0 = silent).
Failure Text (FailureText)FTextResultLine shown when it fails. {Member} = the member's name.
Preferred Bonus (PreferredBonus)floatResult
Preferred Class Tags (PreferredClassTags)FGameplayTagContainerResultClasses that are good at it ("the thief opens locks more easily"): their chance rises by Preferred Bonus.
Success Chance (SuccessChance)floatResultChance (0..1) that it works.
Success Effects (SuccessEffects)FRSEEffectListResultEffects when it works (items found, a flag, a door unlocked).
Success Text (SuccessText)FTextResultLine shown when it works ("{Member} found something."). {Member} = the member's name. Empty = none.

URSEPickpocketData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. What an NPC carries and what happens when a thief is caught (D-109).

PropertyTypeCategoryDescription
Alert Radius (AlertRadius)floatCaughtVisible enemies (guards) within this distance are alerted when the thief is caught (cm; 0 = none).
Wary After Caught (bWaryAfterCaught)boolCaughtAfter being caught once, the NPC cannot be robbed again.
Caught Effects (CaughtEffects)FRSEEffectListCaughtWhen the thief is caught: the unified effects (flags, reputation, Start Battle, Alert Enemies, Start Dialog...).
Conditions (Conditions)FRSEConditionSetPickpocketStealing is possible only while these pass (not from a friend, not after the quest). Empty = always.
Difficulty (Difficulty)floatPickpocketPickpocket score at which the chance is Chance At Equal Score.
Loot (Loot)TArray<FRSEPickpocketEntry>Pickpocket
Stolen Effects (StolenEffects)FRSEEffectListPickpocketEffects after a successful theft (a quest flag, a reputation drop nobody sees yet).

URSEPopulateRules

Module RSEEditor, parent UDataAsset. Rules of the Populate tool (D-076, docs/product/world-tools.md): how many of each kind, spacing, density, distances from the player start, and what the placed actors get (random battle rules, spawner behaviors, chest loot by level, the trader's shop).

PropertyTypeCategoryDescription
Chest Level Follows Distance (bChestLevelFollowsDistance)boolChestsFarther chests (path from the player start) get levels nearer the top of the zone's range.
Chest Flag Root (ChestFlagRoot)FStringChestsParent of the chests' Opened flags (a tag per chest is created under it).
Chest Flag Tag File (ChestFlagTagFile)FStringChestsTag file (Config/Tags) that receives the chests' flags.
Chest Loot Tiers (ChestLootTiers)TArray<FRSEPopulateLootTier>ChestsContents by chest level (sorted by Min Level when used).
Chests (Chests)FRSEPopulateKindRuleKinds
Random Areas (RandomAreas)FRSEPopulateKindRuleKinds--- Kinds ---
Save Points (SavePoints)FRSEPopulateKindRuleKinds
Signposts (Signposts)FRSEPopulateKindRuleKindsPlaced only when the request asks for signposts.
Spawners (Spawners)FRSEPopulateKindRuleKinds
Traders (Traders)FRSEPopulateKindRuleKinds
Zone Exits (ZoneExits)FRSEPopulateKindRuleKindsPlaced only when the request asks for zone exits (placeholders: set their destination afterwards).
Pools Per Area (PoolsPerArea)int32Random AreasPools of the zone offered by one area (picked by seed).
Random Area Extent (RandomAreaExtent)FVectorRandom AreasHalf size of a random encounter area's volume.
Random Area Rules (RandomAreaRules)FRSERandomEncounterRulesRandom Areas
Battle Site Margin (BattleSiteMargin)floatSpacingKept free around Tactics zones and ATB stages.
Candidate Spacing (CandidateSpacing)floatSpacingDistance between two candidate points (smaller = finer, slower).
Max Placements Per 100Square Meters (MaxPlacementsPer100SquareMeters)floatSpacingAll kinds together: at most this many per 100 m² (0 = no cap).
Min Distance Between Kinds (MinDistanceBetweenKinds)floatSpacingPlacements of different kinds stand at least this far apart.
Nav Projection Extent (NavProjectionExtent)floatSpacingHow far a candidate may move to reach the navmesh.
Groups Per Spawner (GroupsPerSpawner)int32Spawners
Patrol Points (PatrolPoints)int32SpawnersPatrol points given to each spawner (walked by patrolling behaviors), on the navmesh around it.
Patrol Radius (PatrolRadius)floatSpawners
Spawner Behaviors (SpawnerBehaviors)TArray<FRSEPopulateBehaviorChoice>SpawnersBehaviors mixed over the spawners by weight. Empty = every roaming behavior of the project, equally.
Spawn Radius (SpawnRadius)floatSpawners
Default Shop (DefaultShop)TSoftObjectPtr<URSEShopData>TraderShop of the trader when the request names none. Empty = no trader.
Trader Name (TraderName)FTextTraderName shown on the trader's prompt.

URSEPrimaryDataAsset

Module RSECore, parent UPrimaryDataAsset, abstract, primary asset. Base class for all game content definitions (classes, abilities, items, tactical maps...).

PropertyTypeCategoryDescription
Archetype Link (ArchetypeLink)FRSEArchetypeLinkArchetypeThe archetype this asset was made from and the fields its author changed (D-095). Unset = no archetype. The fields always hold the resolved values; the RPG Saga Studio and URSEArchetypeLibrary edit this link (propagation, "Reset to archetype"). Editing an inherited field in the Details panel marks it overridden. Editor-only, stripped from cooked builds.
Balance Locked (bBalanceLocked)boolInfoBalance tools never change this asset (D-077, "Balance My Campaign"): no proposal targets it, and Apply skips it. Editor-only, stripped from cooked builds.
Dev Notes (DevNotes)FStringInfoDesign notes for the team. Editor-only, stripped from cooked builds.
Display Name (DisplayName)FTextInfoPlayer-facing name. Localizable.

URSEProgressionZoneData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A progression zone (D-051, docs/design/progression-designer.md): one chapter of the campaign with the level range of its regular enemies, the battles a player is expected to fight there and the party levels the designer aims for.

PropertyTypeCategoryDescription
Encounter Pool (EncounterPool)TArray<FRSEProgressionEncounterEntry>BattlesThe zone's regular encounters (usually Level Mode "Scaled"), picked at random by weight by the projection. The game itself picks encounters through its triggers and random encounter areas; this list mirrors them.
Key Encounters (KeyEncounters)TArray<TSoftObjectPtr<URSEEncounterData> >BattlesStory battles, bosses, epic quest bosses of the zone (usually Level Mode "Fixed"), fought in this order after the regular battles.
Max Enemy Level (MaxEnemyLevel)int32Enemy LevelsHighest level of a regular (scaled) enemy fought in this zone.
Min Enemy Level (MinEnemyLevel)int32Enemy LevelsLowest level of a regular (scaled) enemy fought in this zone.
Expected Battles (ExpectedBattles)int32ExpectationsRegular battles a player fights on the critical path through this zone.
Expected Optional Battles (ExpectedOptionalBattles)int32ExpectationsExtra regular battles the zone offers off the critical path (side areas, optional fights).
Target Entry Level (TargetEntryLevel)int32ExpectationsParty level the designer expects when the party enters the zone (0 = not set).
Target Exit Level (TargetExitLevel)int32ExpectationsParty level the designer expects when the party leaves the zone, after its key battles (0 = not set).
Optional Zone (bOptionalZone)boolZoneOptional content (a post-game area, an epic quest region): not on the critical path. The campaign projection plays it after the story is complete and reports it separately (optional content targets).
Order Index (OrderIndex)int32ZonePosition of the zone in the campaign (informational; the campaign's Zones list decides the order).

URSEQuestData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A quest (D-027): the main storyline, a side quest, a card challenge or an optional event.

PropertyTypeCategoryDescription
Auto Start Maps (AutoStartMaps)TArray<TSoftObjectPtr<UWorld> >AvailabilityAuto Start only while one of these maps is loaded (D-081): a demo map, a chapter's maps, a parallel scenario's. Empty = on any map. Effects (Start Quest) start the quest anywhere; once started it stays active on every map.
Available When (AvailableWhen)FRSEConditionSetAvailabilityThe quest can be started only while these pass (empty = always). Also drives giver markers.
Auto Start (bAutoStart)boolAvailabilityStarts by itself as soon as it is available (story beats, events), instead of from an effect.
Can Abandon (bCanAbandon)boolAvailabilityThe player may abandon it (it can then be started again). Only side quests (Quest.Category.Side, D-029).
Can Retry After Fail (bCanRetryAfterFail)boolAvailabilityA failed quest can be taken again from the beginning (D-029). Auto-start quests are not restarted by themselves.
Fails at Point Of No Return (bFailsAtPointOfNoReturn)boolFailureMissed (default failure outcome runs) when the point of no return is passed while it is active; the warning lists it. With bMissable, a quest not started by then is listed as Missed too.
Missable (bMissable)boolFailureThe quest can be missed (journal hint). Its missed rules (FailWhen with bMissed) and bFailsAtPointOfNoReturn then also apply before it starts: a quest never started whose window closes is listed as Missed.
Fail When (FailWhen)TArray<FRSEQuestFailureRule>FailureChecked while active, before objectives. The first rule that passes fails (or, with bMissed, misses) the quest.
Outcomes (Outcomes)TArray<FRSEQuestOutcome>OutcomesSuccess variants and failures. The first of each kind is the default.
Characters (Characters)TArray<TSoftObjectPtr<UObject> >PresentationD-155: who the journal shows with the quest (portraits): the giver first, then the others. Characters or speakers.
Header Image (HeaderImage)TSoftObjectPtr<UTexture2D>PresentationD-155: the picture at the top of the journal page. Made by RPG Saga Engine -> Content -> Capture Quest Images (a view of the quest's place, captured from the level), or any texture. Empty = the generated art library's, else the category's colors.
Category (Category)FGameplayTagQuestJournal category (presentation grouping).
Description (Description)FTextQuestJournal summary shown under the title.
Giver (Giver)FGameplayTagQuestGiver id for world markers (the NPC actor carries the same tag).
Giver Name (GiverName)FTextQuestWho gives the quest, as shown in the journal (may be empty).
Region (Region)FGameplayTagQuestWhere the quest takes place (journal grouping, map markers).
Stages (Stages)TArray<FRSEQuestStage>StagesThe first stage is where the quest starts.

URSEReinforcementData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. Reinforcements (D-117, docs/product/reinforcements.md): a group calls for help during a battle.

PropertyTypeCategoryDescription
Announce Text (AnnounceText)FTextCallBanner when the help is called. Empty = Reinforcements (Presentation) -> Announce Text ("Reinforcements!").
Cancel if Caller Interrupted (bCancelIfCallerInterrupted)boolCallA call in progress is lost when the caller falls or gets an interrupting status (Reinforcements -> Interrupting Statuses).
Call Bark (CallBark)FTextCallWhat the caller shouts while calling ("To me!"). Empty = Reinforcements (Presentation) -> Default Call Bark.
Caller (Caller)ERSEReinforcementCallerCallWho calls.
Call Sound (CallSound)FGameplayTagCallSound of the call (an Audio.* tag of the sound catalog; a wolf's howl). Empty = the presentation settings' default.
Call Turns (CallTurns)int32CallHow long the call takes, in the caller's turns: 0 = at once; 1 = it completes when the caller's next turn starts (the player has the turns in between to stop it).
Leftover (Leftover)ERSEReinforcementLeftoverFree TacticsFree Tactics: units still on their way when the battle ends.
Spawn Points (SpawnPoints)ERSEReinforcementSpawnPointsFree TacticsFree Tactics: how the placed Reinforcement Spawn Points are used.
Waves (Waves)TArray<FRSEReinforcementWave>WavesThe waves, in order.

URSERewardFeedStyle

Module RSE, parent UDataAsset. The look and timing of the reward feed (D-128): a UI style asset (DA_RewardFeedStyle_*).

PropertyTypeCategoryDescription
Skip Fade Seconds (SkipFadeSeconds)floatCommonSeconds everything takes to leave after a skip.
Skip Keys (SkipKeys)TArray<FKey>CommonKeys that hurry everything off the screen (empty = none).
Steam Deck Scale (SteamDeckScale)floatCommonScale on a Steam Deck (its 7" screen).
Experience Color (ExperienceColor)FRSEUIColorFloaters
Experience Format (ExperienceFormat)FTextFloaters{Amount}.
Experience Role (ExperienceRole)ERSETextRoleFloaters
Floater Fade Seconds (FloaterFadeSeconds)floatFloaters
Floater Height (FloaterHeight)floatFloatersHeight above the character's feet (cm) the texts start at.
Floater Rise (FloaterRise)floatFloatersThe experience text rises this far (pixels at 1080p) over its life.
Floater Seconds (FloaterSeconds)floatFloaters
Floater Stagger Seconds (FloaterStaggerSeconds)floatFloatersDelay between two characters' texts.
Detail Color (DetailColor)FRSEUIColorLevel Up
Level Up Color (LevelUpColor)FRSEUIColorLevel Up
Level Up Delay (LevelUpDelay)floatLevel UpAfter the experience text, before the level up appears.
Level Up Glow Color (LevelUpGlowColor)FRSEUIColorLevel UpThe glow behind it.
Level Up Pop Scale (LevelUpPopScale)floatLevel UpIt grows from this scale and settles at 1.
Level Up Pop Seconds (LevelUpPopSeconds)floatLevel Up
Level Up Role (LevelUpRole)ERSETextRoleLevel Up
Level Up Seconds (LevelUpSeconds)floatLevel Up
Level Up Text (LevelUpText)FTextLevel UpThe level up: its text, color, size, and the pop it makes.
Max New Abilities Shown (MaxNewAbilitiesShown)int32Level Up
More Abilities Format (MoreAbilitiesFormat)FTextLevel Up
New Ability Format (NewAbilityFormat)FTextLevel Up
New Level Format (NewLevelFormat)FTextLevel UpUnder it: {Level} and each new ability ({Ability}), at most Max New Abilities Shown (then "+N more").
Providers (Providers)TArray<TObjectPtr<URSERewardToastProvider> >ProvidersWhat makes toasts, in order. Empty = the built-in list (items, money, Pact points, recruits, bestiary, quests).
Avoid HUDElements (bAvoidHUDElements)boolToasts|LayoutP32d: the stack starts below HUD elements that report their area in its column (the quest tracker; URSEHUDLayoutSubsystem).
Icon Size (IconSize)floatToasts|Layout
Max Visible (MaxVisible)int32Toasts|LayoutToasts on screen at once; more wait their turn.
Right Margin (RightMargin)floatToasts|LayoutDistance of the stack from the right edge, and its top as a share of the screen's height.
Stack Top (StackTop)floatToasts|Layout
Toast Height (ToastHeight)floatToasts|Layout
Toast Spacing (ToastSpacing)floatToasts|Layout
Toast Width (ToastWidth)floatToasts|Layout--- Toasts ---
Accent Bar Width (AccentBarWidth)floatToasts|LookThe accent bar on the toast's left edge and the soft glow it casts.
Accent Glow Opacity (AccentGlowOpacity)floatToasts|Look
Arrival Flash Opacity (ArrivalFlashOpacity)floatToasts|LookA light flash over a toast as it arrives.
Background Color (BackgroundColor)FRSEUIColorToasts|Look
Corner Radius (CornerRadius)floatToasts|Look
Default Accent (DefaultAccent)FRSEUIColorToasts|LookKinds without a color.
Kind Colors (KindColors)TMap<FName,FRSEUIColor>Toasts|LookColor of each kind of toast (items use their rarity).
Subtitle Role (SubtitleRole)ERSETextRoleToasts|Look
Title Role (TitleRole)ERSETextRoleToasts|Look
Value Role (ValueRole)ERSETextRoleToasts|Look
Fade in Seconds (FadeInSeconds)floatToasts|Motion
Fade Out Seconds (FadeOutSeconds)floatToasts|Motion
Hold Seconds (HoldSeconds)floatToasts|Motion
Restack Speed (RestackSpeed)floatToasts|MotionHow fast the stack closes up when a toast leaves (per second, a share of the gap).
Slide Distance (SlideDistance)floatToasts|MotionA toast slides in from the right over this distance.
Stagger Seconds (StaggerSeconds)floatToasts|MotionTime between two toasts appearing.

URSERoamingBehaviorData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. Behavior profile of visible enemy groups (D-063, visible soldiers): attitude, speeds, detection, chase limits and the alert shown when they notice the party.

PropertyTypeCategoryDescription
Alarm Radius (AlarmRadius)floatAlarmWhen it becomes aware of the party it raises the alarm this far: the groups inside join its battle, the others stay unaware. -1 = Stealth -> Alarm -> Default Alarm Radius; 0 = it never raises the alarm (a lone animal).
Alert Seconds (AlertSeconds)floatAlertHow long the alert stays.
Alert Text (AlertText)FTextAlertThe alert text. Empty = the default of the Encounter Presentation settings ("!").
Show Alert (bShowAlert)boolAlertShows an alert above the leader when it notices the party.
Attitude (Attitude)ERSERoamingAttitudeBehavior
Behavior Tags (BehaviorTags)FGameplayTagContainerBehaviorTags the time and weather rules (Time & Weather Rules -> Behavior Rules -> Applies To, D-101 / D-104) target these enemies by, together with their character's traits and bestiary category ("Enemy.Nocturnal": wolves hunt at night).
Idle (Idle)ERSERoamingIdleBehavior
Flee if Party Levels Above (FleeIfPartyLevelsAbove)int32ChaseAny attitude runs away from a party this many levels above the group (0 = never).
Give Up Distance (GiveUpDistance)floatChaseGives up when it gets this far from its spawn point.
Lose Sight Seconds (LoseSightSeconds)floatChaseGives up after this long without seeing the party.
Max Chase Seconds (MaxChaseSeconds)floatChaseGives up after chasing this long in total (0 = no limit).
Safe Distance (SafeDistance)floatChaseCautious: runs until it is this far from the party.
Contact Padding (ContactPadding)floatContactExtra distance around the body that counts as touching the party.
Require Line Of Sight (bRequireLineOfSight)boolDetectionSight needs a clear line (a visibility trace).
Detection Speed (DetectionSpeed)floatDetectionHow quickly this kind of enemy fills its detection meter (D-097, Stealth settings): 2 = twice as alert, 0.5 = half. 0 = it never notices the party by itself (it still joins a battle it is called to).
Hearing Radius (HearingRadius)floatDetectionNotices the party inside this distance whatever its facing (Aggressive: hearing; Cautious: the distance that scares it).
Reaction Seconds (ReactionSeconds)floatDetectionSeconds between noticing the party (the alert shows) and starting the chase.
Sight Half Angle (SightHalfAngle)floatDetection...and within this half angle of its facing.
Sight Max Height Difference (SightMaxHeightDifference)floatDetectionD-151: its eyes do not reach a party member this much higher or lower (a cliff, a roof, a ditch); hearing still does. 0 = any height.
Sight Radius (SightRadius)floatDetectionAggressive: sees the party inside this distance...
Chase Speed (ChaseSpeed)floatMovementSpeed while chasing the party (Aggressive).
Flee Speed (FleeSpeed)floatMovementSpeed while running away (Cautious, or an overleveled party).
Pause Max (PauseMax)floatMovement
Pause Min (PauseMin)floatMovementWander / Patrol: pause at each point (random between the two).
Walk Speed (WalkSpeed)floatMovement--- Movement ---
Wander Radius (WanderRadius)floatMovementWander: how far from the spawn point the group walks.
Reinforcements (Reinforcements)TObjectPtr<URSEReinforcementData>ReinforcementsGroups with this behavior call for help in their battles (a wolf alpha howling for the pack). Below the spawner's and the encounter's own.

URSERulesProfile

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A set of gameplay-rule overrides (D-035, docs/design/rules-profiles.md): e.g.

PropertyTypeCategoryDescription
Description (Description)FTextInfoDesigner-facing explanation (what this profile is for).
Parent (Parent)TObjectPtr<URSERulesProfile>RulesOptional base profile: sections missing here are looked up there (then in its parent, then globally).
Sections (Sections)TArray<TObjectPtr<URSEDeveloperSettings> >RulesOverridden settings sections, one per settings class. Add one with the "+" and pick a class.

URSESaveItemData

Module RSE, parent URSEConsumableData, primary asset. The consumable save item (D-010): saves anywhere outside battles, dialogs, cutscenes and no-save zones.

URSESceneData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A story scene played with a Level Sequence (D-043, docs/design/scenes.md).

PropertyTypeCategoryDescription
Auto Advance Lines (bAutoAdvanceLines)boolLine SectionsLines go on by themselves when their spoken part ends (a film). Off = the player advances (the hold loops meanwhile).
Dialog (Dialog)TSoftObjectPtr<URSEDialogData>Line SectionsLine Sections: the conversation. It starts when the sequence reaches Dialog Start.
Dialog Start Marker (DialogStartMarker)FNameLine SectionsMarked frame where the dialog starts (after the establishing shot). None or missing = Dialog Start Time.
Dialog Start Time (DialogStartTime)floatLine Sections
Line Sections (LineSections)TArray<FRSESceneLineSection>Line SectionsOne section per line or choice of Dialog (made by Cinematic from Screenplay). Lines without one keep the current shot.
Outro Marker (OutroMarker)FNameLine SectionsMarked frame of the outro, played from there to the end when the dialog ends. None or missing = Outro Time.
Outro Time (OutroTime)floatLine SectionsSeconds of the outro start (negative = the dialog's end ends the scene at once).
Restore Music at End (bRestoreMusicAtEnd)boolMusicThe music from before the scene comes back at the end. Off = Music keeps playing until Restore Music.
Music (Music)TSoftObjectPtr<UObject>MusicStory music while the scene plays (empty = the current music continues).
Music Fade In (MusicFadeIn)floatMusicFade-in of Music. Negative = the audio default.
Hide Player (bHidePlayer)boolPlaybackHides the player's pawn while the scene plays (when it is not bound in the sequence).
Keep State at End (bKeepStateAtEnd)boolPlaybackActors keep what the scene did to them (the NPC stays turned). Off = everything is restored at the end.
Blend Out Seconds (BlendOutSeconds)floatPlaybackCamera blend back to gameplay at the end. Negative = the Scenes settings' default.
Skippable (bSkippable)boolPlaybackThe player may skip it (after a confirmation).
Bindings (Bindings)TArray<FRSESceneBinding>SceneTagged Sequencer bindings played by real actors.
Dialog Cues (DialogCues)TArray<FRSESceneDialogCue>SceneDialogs synced with the sequence (in time order or not; they are sorted when the scene starts).
Dialog Sync (DialogSync)ERSESceneDialogSyncSceneCues: dialogs started at moments of the sequence (D-043). Line Sections: the dialog drives the sequence line by line (D-078).
End Effects (EndEffects)FRSEEffectListSceneRun once when the scene ends or is skipped (not on theater replays).
Seen Event (SeenEvent)FGameplayTagSceneMarked seen when the scene ends or is skipped (saved; Event Seen condition; the theater lists seen scenes).
Sequence (Sequence)TSoftObjectPtr<UObject>SceneThe Level Sequence.

URSEShopData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A shop (D-042, docs/design/economy.md): its stock and whether it buys from the party.

PropertyTypeCategoryDescription
Buys Items (bBuysItems)boolShopThe shop buys items from the party (Sell tab).
Greeting (Greeting)FTextShopLine under the title ("Welcome! Take a look.").
Sell Ratio Override (SellRatioOverride)floatShopSell ratio of this shop. Negative = the Economy settings' SellRatio.
Stock (Stock)TArray<FRSEShopEntry>Shop

URSESoundCatalog

Module RSE, parent URSEPrimaryDataAsset, primary asset. The sound effect library (D-036): GameplayTag -> sound.

PropertyTypeCategoryDescription
Parent (Parent)TObjectPtr<URSESoundCatalog>CatalogFallback catalog (e.g. a project catalog over the framework's defaults).
Sounds (Sounds)TMap<FGameplayTag,FRSESoundCatalogEntry>Catalog

URSESpeakerData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. Someone who speaks in dialogs (dialog-proposal.md 4.4).

PropertyTypeCategoryDescription
Blip Pitch Range (BlipPitchRange)FVector2DPresentationRandom pitch range of the blip.
Default Portrait Side (DefaultPortraitSide)ERSEDialogPortraitSidePresentation
Emote Set (EmoteSet)TSoftObjectPtr<UObject>PresentationEmote set (a data type of the RSE module: montages and balloons per Emote.* tag).
Name Color (NameColor)FLinearColorPresentation
Portraits (Portraits)TMap<FGameplayTag,TSoftObjectPtr<UTexture2D> >PresentationExpression (Dialog.Expression.*) -> portrait. Dialog.Expression.Neutral is required.
Voice Blip (VoiceBlip)TSoftObjectPtr<USoundBase>PresentationTypewriter sound for unvoiced lines.
Appearance (Appearance)TSoftObjectPtr<URSECharacterAppearanceBase>Presentation|Portrait ModeThe look of the Live mode and of generated portraits for speakers without a Character (NPCs). Empty = the Character's appearance.
Appearance Variant (AppearanceVariant)FNamePresentation|Portrait ModeOne of the appearance's variants (None = its parts as they are).
Portrait Mode (PortraitMode)ERSEDialogPortraitModePresentation|Portrait ModeHow the portrait is shown (D-075): Image (Portraits), Video (Portrait Videos) or Live (a render of the appearance). Lines may override it. Missing clips / appearance, or modes turned off (settings, Steam Deck profile), fall back to Image.
Portrait Videos (PortraitVideos)TMap<FGameplayTag,TSoftObjectPtr<UObject> >Presentation|Portrait ModeExpression (Dialog.Expression.*) -> looping clip (a Media Source: talking / idle), for the Video mode. Neutral is the fallback.
Character (Character)TSoftObjectPtr<URSECharacterData>SpeakerThe playable character this speaker is, if any: "first available" speakers check it is in the party.
Name Revealed Condition (NameRevealedCondition)FRSEConditionSetSpeakerWhen the player knows the real name. Empty = always known.
Speaker Tag (SpeakerTag)FGameplayTagSpeakerId used by cues and by speaker components on actors.
Unknown Name (UnknownName)FTextSpeakerShown until NameRevealedCondition passes (empty = the dialog settings' DefaultUnknownName).

URSEStatusData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A status effect (poison, haste, stun...).

PropertyTypeCategoryDescription
AIValue Scale (AIValueScale)floatAIMultiplies what the AI thinks applying this status is worth. The AI measures stat changes against the threats around the unit (damage prevented or added) and gives a flat value to what it cannot measure (granted tags, other stats, affinities). 0 = the AI ignores the status, 2 = it values it twice.
Behaviors (Behaviors)TArray<TObjectPtr<URSEStatusBehavior> >ControlHow the status changes the way its bearer acts: Confuse (random targets, allies included), Charm (fights for the other side), Berserk (attacks only, on its own) or your own (Custom (Blueprint)). Every battle mode and the AI follow them.
Periodic Percent Of Max HP (PeriodicPercentOfMaxHP)floatPeriodicHP change per period as a percentage of max HP. Positive damages (poison), negative heals (regen).
Periodic Timing (PeriodicTiming)ERSEStatusTimingPeriodic
Persists After Battle (bPersistsAfterBattle)boolStatusThe status stays on party members after battle, until cured (Poison, Blind...). Others end with the battle (D-025).
Removed by Damage (bRemovedByDamage)boolStatusThe status ends when the unit takes damage (e.g. Sleep).
Duration Turns (DurationTurns)int32StatusTurns of the afflicted unit before the status wears off. 0 = until removed.
Icon (Icon)TSoftObjectPtr<UTexture2D>StatusIcon in menus and on battle cards (D-075). Empty = no icon (or the generated art library's); the Portrait & Icon Studio makes one from its polarity.
Immunity Tag (ImmunityTag)FGameplayTagStatusUnits with this tag (from equipment, class traits, Pacts...) cannot receive the status.
Stacking (Stacking)ERSEStatusStackingStatus
Status Tag (StatusTag)FGameplayTagStatus
Effect Anchor (EffectAnchor)FGameplayTagStatus|VisualWhere the loop effect sits on the body (Appearance.Anchor.*; empty = the feet).
Effect Scale (EffectScale)floatStatus|Visual
Loop Effect (LoopEffect)TSoftObjectPtr<UObject>Status|VisualD-115: a looping effect on the unit while the status lasts in battle (embers for a burn, bubbles for poison). A Niagara system or a legacy particle system. Empty = Battle Feel -> Status Visuals for this tag (or none).
Dispellable (bDispellable)boolToolkitDispel / Purge / Steal Buff may remove it (off for curses, transformations, story statuses).
Taunt (bTaunt)boolToolkitA taunt: AI units with it strongly prefer (or must, see Ability Toolkit settings) to target the unit that applied it.
Polarity (Polarity)ERSEStatusPolarityToolkitBuff or debuff: Dispel / Purge effects remove statuses by polarity, Steal Buff takes buffs.
Shield Absorbs (ShieldAbsorbs)ERSEShieldAbsorbToolkitA shield (barrier): absorbs damage of this kind before HP, from a pool set by the Shield effect that applies it. The status ends when the pool is empty (or when its duration runs out).
Affinities (Affinities)TArray<FRSEElementAffinityEntry>While Active
Granted Tags (GrantedTags)FGameplayTagContainerWhile Active
Modifiers (Modifiers)TArray<FRSEStatModifier>While Active

URSESurfaceData

Module RSECore, parent URSETileZoneData, primary asset. A surface type for Free Tactics (D-108): a tile zone (URSETileZoneData: effects on enter and at turn start, who it touches, duration, the Tactics look) with the free-movement extras: movement cost, slipping, a tooltip and the look of its decal.

PropertyTypeCategoryDescription
Look (Look)ERSESurfaceLookPresentationHow its ground decal looks (pattern and animation); the color is the zone's Color.
Slip Ends Move (bSlipEndsMove)boolSurfaceA unit that slips stops where it fell (its move ends).
Description (Description)FTextSurfaceWhat the tooltip says about it ("Burns whoever stands in it. Water puts it out.").
Move Cost Multiplier (MoveCostMultiplier)floatSurfaceMovement cost multiplier while walking through it (1 = normal, 2 = each meter costs two).
Route Avoid Cost (RouteAvoidCost)floatSurfaceD-156: how hard routes avoid it, in meters of extra walking a route accepts to keep one meter out of it (the same for the player's paths and the AI's). Below 0 = automatic: Free Tactics Field -> Route Hazards (Harmful Avoid Cost for a surface that hurts, Slippery Avoid Cost for one that only makes units slip, nothing otherwise). 0 = routes walk through it freely.
Slip Chance (SlipChance)floatSurfaceChance (percent) that a unit walking onto it slips and falls (ice, oil). 0 = never.
Slip Status (SlipStatus)TObjectPtr<URSEStatusData>SurfaceStatus of a unit that slips (prone). Empty = Free Tactics Field -> Default Slip Status.

URSETargetingStyle

Module RSE, parent UDataAsset. D-146: how single-target aiming looks in the live mode (docs/design/free-tactics.md, "Targeting"): the rings on the units an ability can be aimed at (the chosen one highlighted, the others dimmed with their reason), the subtle arc of a projectile colored by the line of sight, the card at the target...

PropertyTypeCategoryDescription
Arc Blocked (ArcBlocked)FRSEUIColorArc
Arc Clear (ArcClear)FRSEUIColorArc
Arc Dash (ArcDash)floatArcDash and gap of the arc (pixels).
Arc Gap (ArcGap)floatArc
Arc Partial (ArcPartial)FRSEUIColorArc
Arc Thickness (ArcThickness)floatArc
Projectile Arc (bProjectileArc)boolArcProjectiles (ranged abilities that need a line of sight) show a subtle dashed arc from the user to the target.
Direct Arc Rise (DirectArcRise)floatArcRise of the arc of a straight shot (cm; lobbed attacks use their own arc height).
Body Font Size (BodyFontSize)int32Card
Card Background (CardBackground)FRSEUIColorCard
Card Offset (CardOffset)floatCardThe card stands this far to the right of the target's head on screen (pixels).
Card Subtle (CardSubtle)FRSEUIColorCard
Card Text (CardText)FRSEUIColorCard
Card Width (CardWidth)floatCard--- Card at the target ---
Damage Color (DamageColor)FRSEUIColorCard
Heal Color (HealColor)FRSEUIColorCard
HPBack (HPBack)FRSEUIColorCard
HPFill (HPFill)FRSEUIColorCard
HPGain (HPGain)FRSEUIColorCard
HPLoss (HPLoss)FRSEUIColorCardThe part of the HP bar the hit would take (or the heal would add).
Reason Color (ReasonColor)FRSEUIColorCardThe reason a target cannot be aimed at (out of range, no line of sight).
Title Font Size (TitleFontSize)int32Card
Ally Watch Color (AllyWatchColor)FRSEUIColorOverwatch
Enemy Watch Color (EnemyWatchColor)FRSEUIColorOverwatchRings of the units on Overwatch at their watch range (enemies' while you choose where to walk) and the label over them.
Watch Callout (WatchCallout)FTextOverwatch
Watch Label (WatchLabel)FTextOverwatch"Overwatch" over a watching unit, and the callout when it goes on watch. Empty = the built-in texts.
Watch Ring Thickness (WatchRingThickness)floatOverwatch
Gamepad Key Hints (GamepadKeyHints)FTextPrompt
Key Hints (KeyHints)FTextPromptKey hints under the prompt (keyboard and mouse; gamepad). Empty = the built-in texts.
Prompt Font Size (PromptFontSize)int32Prompt
Prompt Top (PromptTop)floatPromptThe prompt over the field while aiming (title and key hints), this far below the top of the screen (pixels).
Candidate Opacity (CandidateOpacity)floatRingsOpacity of a valid candidate that is not chosen.
Dimmed Color (DimmedColor)FRSEUIColorRingsA unit that cannot be aimed at (out of range, hidden): its ring and reason in this color and opacity.
Dimmed Opacity (DimmedOpacity)floatRings
Marker Height (MarkerHeight)floatRings
Marker Size (MarkerSize)floatRingsThe marker over the chosen unit's head (pixels; 0 = none) and its height above the feet (cm).
Pulse Amount (PulseAmount)floatRings
Pulse Speed (PulseSpeed)floatRingsThe chosen ring breathes (cycles per second; 0 = still) by this fraction of its radius.
Ring Min Radius (RingMinRadius)floatRings
Ring Radius Scale (RingRadiusScale)floatRingsA ring's radius around a unit: its footprint times this (cm), at least Ring Min Radius.
Ring Segments (RingSegments)int32RingsPoints of a ring (smoother = more).
Ring Thickness (RingThickness)floatRingsLine width of a candidate's ring and of the chosen one's (pixels).
Selected Ring Thickness (SelectedRingThickness)floatRings
Compact Below Height (CompactBelowHeight)floatSmall ScreensOn screens at most this tall (pixels; the Steam Deck is 800), texts and lines grow by Compact Scale.
Compact Scale (CompactScale)floatSmall Screens
Hostile (Hostile)FRSETargetingThemeThemesAttacks and debuffs on enemies.
Self (Self)FRSETargetingThemeThemesAbilities used on the user alone (a stance, Overwatch).
Support (Support)FRSETargetingThemeThemesHeals and buffs on allies.

URSETeacherData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. An NPC who teaches abilities (D-144): an "ability shop" opened from a dialog (effect Open Teacher) or a single lesson (effect Teach Ability).

PropertyTypeCategoryDescription
Offers Respec (bOffersRespec)boolRespecThis teacher resets a character's points (used when Respec Mode is NPC; also offered in other modes).
Respec Money (RespecMoney)int32Respec
Greeting (Greeting)FTextTeacherLine shown at the top of the teacher screen.
Offers (Offers)TArray<FRSETeacherOffer>Teacher

URSETestRoomDefinition

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A test room (P55, D-179): a small map built to exercise one area of the framework, with a smoke script that proves it works.

PropertyTypeCategoryDescription
Presets (Presets)TArray<FRSEBattleLaunchPreset>LaunchBattle setups the launcher offers in this room.
Needs Network (bNeedsNetwork)boolRoomThe room needs more than one player (a listen server and a client): the single-process smoke test skips it.
Description (Description)FTextRoomWhat the room shows and what its smoke test proves (one or two sentences, for the menu tooltip and the docs).
Map (Map)TSoftObjectPtr<UWorld>RoomThe room's map.
Room Id (RoomId)FNameRoomStable name of the room (letters, digits, underscore): used by RSE.Rooms.Go and the test name RSE.Rooms.<RoomId>.
Smoke Script (SmokeScript)TArray<FString>Smoke TestThe smoke test, one dev-script line each (the language of RSE.Dev.Script): console commands, "wait <seconds>", "waituntil <state> [timeout]" and "assert <state>" / "assertnot <state>" (states: battle, exploration, results, gameover, dialog, nodialog, scene, noscene, ready, action, noaction, freebattle, nofreebattle, playerturn). Lines starting with # are comments. Empty = the room has no scripted test (it only has to open and start play).
Timeout Seconds (TimeoutSeconds)floatSmoke TestSeconds the test waits for the room to start play, and again for the script to finish (on top of the script's own waits).

URSETileZoneData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A tile zone (D-055): fire, ice, poison, healing, blessed ground, or a trap.

PropertyTypeCategoryDescription
Color (Color)FLinearColorPresentationTint of the default zone look (when Visual is empty).
Visual (Visual)TSoftObjectPtr<URSEFieldVisualBase>PresentationHow the zone looks (soft; RSE's field visual asset). Empty = the Tactics presentation's default zone look.
Hidden from Enemies (bHiddenFromEnemies)boolZoneOnly the creator's side sees it (traps). The presentation hides it from the others.
Slippery (bSlippery)boolZoneSlippery (ice): a unit ending its move here slides one more tile; knockbacks slide further (Ability Toolkit: Max Slide Tiles).
Trap (bTrap)boolZoneA trap: fires once, on the first unit that enters it and passes TriggerFilter, stops that unit's move, then disappears.
Duration Turns (DurationTurns)int32ZoneTurns of the creator the zone lasts (after it is gone: every unit's turn counts). 0 = until the battle ends.
Effects on Enter (EffectsOnEnter)TArray<TObjectPtr<URSEAbilityEffect> >ZoneApplied once per move to a unit entering the zone (walking, pushed, landing), if it passes TriggerFilter.
Effects on Turn Start (EffectsOnTurnStart)TArray<TObjectPtr<URSEAbilityEffect> >ZoneApplied to a unit that starts its turn inside the zone, if it passes TriggerFilter.
Extra Move Cost (ExtraMoveCost)int32ZoneExtra Action Points to walk into a tile of the zone (mud, thorns).
Power Multiplier (PowerMultiplier)floatZonePower of the zone's effects (like an ability's power multiplier).
Removes Zones (RemovesZones)FGameplayTagContainerZoneCreating this zone removes zones with these tags on the same tiles (fire melts ice).
Trigger Filter (TriggerFilter)ERSETargetFilterZoneWho the zone's effects touch, relative to its creator (Enemies: a trap never catches its owner's side).
Zone Tag (ZoneTag)FGameplayTagZoneIdentifies the zone kind (Zone.Fire, Zone.Ice...): other zones cancel it by tag.

URSETimeOfDayProfile

Module RSE, parent URSEPrimaryDataAsset, primary asset. The look of a whole day (D-101): hour keys (light, colors, fog, exposure, grading, stars) and the path of the sun and the moon.

PropertyTypeCategoryDescription
Max EV100 (MaxEV100)floatExposure
Min EV100 (MinEV100)floatExposureEye adaptation range (EV100): the night never adapts brighter than MinEV100, so it stays night.
Keys (Keys)TArray<FRSESkyKey>KeysHour keys, in any order (sorted when used). At least one.
Horizon Fade Degrees (HorizonFadeDegrees)floatSun & MoonThe sun / moon light fades in over this many degrees above the horizon.
Max Moon Elevation (MaxMoonElevation)floatSun & MoonMoon height in the middle of the night (degrees).
Max Sun Elevation (MaxSunElevation)floatSun & MoonSun height at midday (degrees).
Min Moon Light Elevation (MinMoonLightElevation)floatSun & MoonThe moon light never comes lower than this (long night shadows stay readable).
Moon Disc Brightness (MoonDiscBrightness)floatSun & MoonBrightness of the moon disc.
Moon Disc Scale (MoonDiscScale)floatSun & MoonSize of the moon disc in the sky (multiplies the light's source angle).
Sunrise Hour (SunriseHour)floatSun & MoonThe sun rises (crosses the horizon) at this hour.
Sunrise Yaw (SunriseYaw)floatSun & MoonWorld yaw of the sunrise (degrees). The sun crosses to the opposite side by sunset.
Sunset Hour (SunsetHour)floatSun & MoonThe sun sets at this hour.

URSETouchLayout

Module RSE, parent UPrimaryDataAsset, primary asset. "RSE Touch Layout" (D-180, docs/product/mobile.md): the on-screen controls and gestures of one moment of play (exploration, grid Tactics, live Tactics, classic battles, action battles).

PropertyTypeCategoryDescription
Context (Context)ERSETouchContextLayoutThe moment of play this layout is made for (validation, the Studio list). The settings decide where it is used.
Controls (Controls)TArray<FRSETouchControl>Layout
Display Name (DisplayName)FTextLayoutThe name in tools and logs.
Gestures (Gestures)TArray<FRSETouchGestureBinding>Layout

URSETrapData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A kind of trap (D-109): a pressure plate, a tripwire, a gas vent, an arrow trap.

PropertyTypeCategoryDescription
Battle Effects (BattleEffects)TArray<TObjectPtr<URSEAbilityEffect> >BattleExtra battle effects on the unit that sets it off in a Free Tactics battle, run as the unit's own (a surface or zone once the battle supports it, a push, a debuff). Damage and Statuses above already apply; leave empty for most traps.
Stops Movement (bStopsMovement)boolBattleThe unit stops on the trap when it goes off (its walk ends there).
Area Radius (AreaRadius)floatEffectIt hits every party member within Area Radius of the trap (a gas vent), not only the one who stepped on it. 0 = only the one who set it off.
Damage (Damage)FRSETrapDamageEffect--- When it goes off ---
Disarm Effects (DisarmEffects)FRSEEffectListEffectEffects on disarm (salvaged parts: Give Item).
Noise Radius (NoiseRadius)floatEffectVisible enemies within this distance hear it and come running (cm; 0 = silent).
Status Chance (StatusChance)floatEffectChance of each status (percent).
Statuses (Statuses)TArray<TObjectPtr<URSEStatusData> >EffectStatuses it tries to give (lasting ones stay after battles, D-025).
Trigger Effects (TriggerEffects)FRSEEffectListEffectStory effects when it goes off in exploration (an alarm flag, a door slamming shut).
Spotted Text (SpottedText)FTextTextsShown when a member spots it ("{Member} spotted a {Trap}."). Empty = Exploration RPG UI default.
Triggered Text (TriggeredText)FTextTextsShown when it goes off ("Click! Arrows fly from the wall."). Empty = the default.
Failure Triggers (bFailureTriggers)boolTrapA failed disarm sets it off (off = the attempt only fails and may be tried again).
Consumed Per Attempt (ConsumedPerAttempt)TArray<TObjectPtr<URSEItemData> >TrapItems used up by each disarm attempt (a spare wire). Empty = nothing is used.
Detect Difficulty (DetectDifficulty)floatTrapPerception needed to spot it (passive: a member whose score reaches it sees it).
Disarm Difficulty (DisarmDifficulty)floatTrapDisarm score at which the chance is Exploration RPG -> Chance At Equal Score.
Disarm Requirements (DisarmRequirements)FRSEExploreRequirementsTrapWho may try to disarm it.
Kind (Kind)FGameplayTagTrapWhat kind of trap it is (Trap.PressurePlate, Trap.Tripwire...): the world actor picks its look by it.
Rearm Seconds (RearmSeconds)floatTrapIt arms itself again this many seconds after going off (0 = once only).

URSETravelDestinationData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A place of the world map (D-044, docs/design/zones-travel.md): where fast travel can take the party once the place is discovered.

PropertyTypeCategoryDescription
Conditions (Conditions)FRSEConditionSetAvailabilityTravel there only while these pass (a discovered place may be closed by the story). Empty = always.
Area (Area)TSoftObjectPtr<URSEAreaData>DestinationThe area the party arrives in (its map is opened). Being in this area means "you are here".
Arrival Point (ArrivalPoint)FNameDestinationARSEArrivalPoint id on the area's map. None = the area's default arrival point.
Description (Description)FTextDestinationShown in the world map details.
Discovered by Default (bDiscoveredByDefault)boolDiscoveryKnown from the start (the home town).
Discover on Visit (bDiscoverOnVisit)boolDiscoveryDiscovered the first time the player is in Area (travel, load or walking in).
Discovery Flag (DiscoveryFlag)FGameplayTagDiscoveryAlso discovered while this story flag is set (Set Flag effect in a dialog, a map bought in a shop...).
Map Position (MapPosition)FVector2DWorld MapMarker position on the world map, normalized (0,0 = top left, 1,1 = bottom right).
Sort Order (SortOrder)int32World MapOrder in the list (lower first; equal orders sort by name).

URSETraversalKindData

Module RSECore, parent URSEPrimaryDataAsset, abstract, primary asset. A kind of traversal (D-121, docs/design/traversal.md): what every ladder, rope, swim area or jump of that kind shares.

PropertyTypeCategoryDescription
Kind Tag (KindTag)FGameplayTagKindIdentity for conditions, statistics and UI (Traversal.Kind.*).
Prompt Backward (PromptBackward)FTextKindPrompt at the end point, for links taken back ("Climb down"). Empty = Prompt Forward.
Prompt Forward (PromptForward)FTextKindPrompt at the start end ("Climb up", "Jump", "Swim").
Allow Save (bAllowSave)boolRulesSaving is allowed while someone is on it (D-010). Off for ladders and ropes: a save never holds a body mid-climb.
Blocked Tags (BlockedTags)FGameplayTagContainerWhoUnits or characters with any of these tags may not (heavy armor that sinks, a status that roots).
Required Tags (RequiredTags)FGameplayTagContainerWhoOnly units or characters with all of these tags (traits, statuses) may use it.

URSETraversalLinkKindData

Module RSECore, parent URSETraversalKindData, primary asset. A link between two standable points (D-121): ladders, ropes, jumps across gaps, vaults over low ledges, controlled drops, zip-lines, rope swings, rope bridges.

PropertyTypeCategoryDescription
Backward Anims (BackwardAnims)FRSETraversalLinkAnimsAnimationAnimations when taken backward (end to start). Empty slots use the forward ones.
Forward Anims (ForwardAnims)FRSETraversalLinkAnimsAnimationAnimations when taken forward (start to end).
AIUses (bAIUses)boolBattleThe AI may route through it (off: only players use it, a secret passage).
Battle Cost Multiplier (BattleCostMultiplier)floatBattleMovement cost per meter of the link's 3D length (at least 1: never cheaper than walking the same ground).
Battle Extra Cost (BattleExtraCost)floatBattleMeters of movement added to every use (getting on and off).
Usable in Battle (bUsableInBattle)boolBattleThe link exists in Free Tactics battles (a nav link with a movement cost).
Face Movement (bFaceMovement)boolMotionThe body faces the link's horizontal direction while moving (off: it keeps facing the actor's wall side, as on a ladder).
Dismount Seconds (DismountSeconds)floatMotionSeconds spent getting off after the motion ends.
Motion (Motion)TObjectPtr<URSETraversalMotion>MotionHow the body moves along the link's points (along the path for a ladder, an arc for a jump).
Mount Seconds (MountSeconds)floatMotionSeconds spent getting on before the motion starts (the mount animation plays meanwhile).
Speed (Speed)floatMotionSpeed along the motion (meters per second), in exploration and in battle playback.
Bidirectional by Default (bBidirectionalByDefault)boolRulesTaken both ways unless the placed actor says otherwise (a drop or a zip-line is one way).
Followers Use (bFollowersUse)boolRulesParty followers take the link after the leader; off = they are brought to the far end.

URSETraversalVolumeKindData

Module RSECore, parent URSETraversalKindData, primary asset. An area where bodies move differently (D-121): deep water today (swimming), deep mud or snow later.

PropertyTypeCategoryDescription
Anims (Anims)FRSETraversalVolumeAnimsAnimation
Allows Actions (bAllowsActions)boolBattleUnits inside may use abilities and items (off: no fighting while swimming).
Battle Cost Multiplier (BattleCostMultiplier)floatBattleMovement cost multiplier on the volume's cells (2 = swimming costs double).
Usable in Battle (bUsableInBattle)boolBattleThe volume exists in Free Tactics battles (its cells float at the surface with this kind's cost and rules).
Exit Check Distance (ExitCheckDistance)floatVolumeExploration: a bank this close ahead (meters) is climbed onto when the body moves toward it.
Exit Max Height (ExitMaxHeight)floatVolumeHighest bank (meters above the surface) a body climbs out onto, in exploration and in battle.
Exit Seconds (ExitSeconds)floatVolumeSeconds the climb out takes (exploration).
Min Depth (MinDepth)floatVolumeBelow this depth (meters of water above the ground) bodies walk (a ford), above it they swim.
Move Speed (MoveSpeed)floatVolumeExploration speed inside (meters per second).
Surface Offset (SurfaceOffset)floatVolumeHow far below the surface the body's feet hang (meters): the head stays above water.

URSETutorialData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A contextual tutorial (D-047): a few pages shown once, the first time its trigger happens (Trigger) or when the story asks for it (the Show Tutorial effect).

PropertyTypeCategoryDescription
Conditions (Conditions)FRSEConditionSetTutorialOptional gate checked when the trigger happens (e.g. only after a story flag). Empty = always.
Pages (Pages)TArray<FRSETutorialPage>Tutorial
Sort Order (SortOrder)int32TutorialWhen several tutorials share a trigger, the lowest value shows first. Also the order of the Help list.
Trigger (Trigger)FGameplayTagTutorialGame event that shows it the first time (Tutorial.Trigger.*). Empty = only the Show Tutorial effect shows it.

URSEUIStyle

Module RSE, parent URSEPrimaryDataAsset, primary asset. A UI style (D-162, docs/product/ui-styles.md): the colors, fonts, frames, rows, controls, gauges, key caps, icons, sounds and motion of every screen built on URSEHUDWidgetBase.

PropertyTypeCategoryDescription
Ramp (Ramp)FRSEUIRampSpecColorsHow the shades S50..S900 are derived from each seed.
Roles (Roles)FRSEUIColorRolesColorsThe roles every screen uses (surfaces, borders, selection, muted text...), each derived from a seed.
Tokens (Tokens)FRSEUIColorTokensColors--- Colors ---
Vision Overrides (VisionOverrides)TMap<ERSEColorVision,FRSEUIVisionOverride>Colors|AccessibilityOptional colors for the color vision modes (D-164): per mode, the tokens that change (Positive, Negative, Warning, Info, Charge...). A mode without an entry uses the global safe remap (UI Theme -> Accessibility): Positive blue, Negative orange.
Hue Shift (HueShift)floatColors|Global ShiftRotates the hue of every token that is not hue-locked (degrees).
Lightness Scale (LightnessScale)floatColors|Global ShiftLightness of every token times this.
Saturation Scale (SaturationScale)floatColors|Global ShiftSaturation of every token times this.
Buttons (Buttons)FRSEUIControlStyleControls
Chips (Chips)FRSEUIChipStyleControls
Key Caps (KeyCaps)FRSEUIKeyCapStyleControls
Meters (Meters)FRSEUIMeterStyleControls
Rows (Rows)FRSEUIStyleRowsControls--- Controls ---
Tabs (Tabs)FRSEUIControlStyleControls
Backdrop (Backdrop)FRSEUIBackdropStyleFrames
Divider Color (DividerColor)FRSEUIColorFramesThin separator lines.
Divider Thickness (DividerThickness)floatFrames
Frames (Frames)TMap<ERSEPanelKind,FRSEUIFrameStyle>FramesThe panel looks (Window, Inset, Plate, Hud, Tooltip, Modal). A missing kind uses Window.
Plain Panel Corner Radius (PlainPanelCornerRadius)floatFramesPlain one-color panels (rounded panels of screens).
Plain Panel Outline (PlainPanelOutline)FRSEUIColorFrames
Plain Panel Outline Width (PlainPanelOutlineWidth)floatFrames
Icon Overrides (IconOverrides)TMap<FGameplayTag,TSoftObjectPtr<UTexture2D> >IconsIcons replaced by this style (by tag). Missing = the plugin's icons.
Icon Tint (IconTint)ERSEUIIconTintIcons
Description (Description)FTextIdentityOne line in the options menu and the style editor.
Style Id (StyleId)FNameIdentityStable id: the options menu and the player's saved choice refer to it.
Thumbnail (Thumbnail)TSoftObjectPtr<UTexture2D>Identity
Default Battle Menu Style (DefaultBattleMenuStyle)FNameLayoutBattle menu style (List, Radial, Hotbar...) this style suggests (P61). None = the project's (Battle Menus -> Free Tactics Style). The player's choice in the options wins.
Layouts (Layouts)FRSEUILayoutVariantsLayoutThe arrangement of the dialog, the party menu and the battle HUDs, plus the inventory and Growth board this style suggests (P61). Every variant works with every style; switching styles at runtime rebuilds the screens.
Motion (Motion)FRSEUIMotionMotion
Sounds (Sounds)FRSEUISoundSetSounds
Typography (Typography)FRSEUITypographyTypography--- Typography ---

URSEUseGrowthCurve

Module RSECore, parent URSEPrimaryDataAsset, primary asset. How abilities grow with use (D-144): ranks reached by battle uses, each with its power and cost.

PropertyTypeCategoryDescription
Ranks (Ranks)TArray<FRSEUseGrowthRank>RanksRanks above the base (rank 1), in increasing Uses Required.

URSEVisualStyle

Module RSE, parent URSEPrimaryDataAsset, primary asset. A visual style preset (D-037): how the whole game looks, switchable live (Realistic, Stylized Realistic, Cel-shaded, Retro Low-poly...).

PropertyTypeCategoryDescription
Console Variables (ConsoleVariables)TMap<FString,FString>Console VariablesConsole variables set while the style is active (name -> value), e.g. r.ScreenPercentage for a low-resolution look or r.Tonemapper.Sharpen. Each one goes back to its previous value when the style changes. Prefer post-process materials and parameters: a console variable is global and also changes what scalability chose.
Description (Description)FTextInfoWhat the style is for (shown to the designer, not to the player).
Scalar Parameters (ScalarParameters)TMap<FName,float>Material ParametersScalar values written to the style parameter collection (Project Settings -> RPG Saga Engine -> Visual Style) while the style is active, e.g. OutlineWidth, ShadeSteps, PixelSize, ColorLevels, Saturation. Parameters not listed return to the collection's defaults, so materials that read the collection follow the style.
Vector Parameters (VectorParameters)TMap<FName,FLinearColor>Material ParametersVector values written to the style parameter collection, e.g. OutlineColor, ShadowTint.
Post Process (PostProcess)FPostProcessSettingsPost ProcessPost-process overrides of the style (color grading, bloom, vignette, exposure, film grain...). Only the fields whose override box is ticked apply; the rest come from the level's own volumes and the engine defaults. Post-process materials go in PostProcessMaterials below (soft references), not in this struct's Blendables.
Post Process Blend Weight (PostProcessBlendWeight)floatPost ProcessWeight of the whole post-process layer (0 = the style changes no post-process setting).
Post Process Materials (PostProcessMaterials)TArray<FRSEVisualStyleBlendable>Post ProcessPost-process materials of the style, in order. Loaded when the style becomes active.

URSEWeaponHoldProfile

Module RSE, parent UDataAsset. How weapons sit in the hands of one skeleton (D-185, docs/product/weapons.md): one hand socket per weapon hold type (pistol, rifle, one / two-handed melee, polearm, bow, staff), the support hand IK and the stance animations.

PropertyTypeCategoryDescription
Holds (Holds)TArray<FRSEWeaponHold>HoldsOne entry per hold type (a missing one is generated from the reference pose).
Left Hand Bone (LeftHandBone)FNameSkeletonLeft hand bone (None = found by name). Its parent is the elbow joint of the support hand IK.
Recoil Arm Bone (RecoilArmBone)FNameSkeletonThe weapon arm bone the procedural recoil pitches up (None = Weapon Hold settings -> Recoil Arm Bone Names).
Recoil Spine Bone (RecoilSpineBone)FNameSkeletonThe bone the procedural recoil pitches back (None = Weapon Hold settings -> Recoil Spine Bone Names).
Right Hand Bone (RightHandBone)FNameSkeletonRight hand bone (None = found by name: Weapon Hold settings -> Right Hand Bone Names).
Skeleton (Skeleton)TSoftObjectPtr<USkeleton>SkeletonThe skeleton this profile is for (the settings' profile list is matched by it).
Upper Body Bone (UpperBodyBone)FNameSkeletonFirst bone of the upper body (stance overlays layer from it; the procedural recoil bends the spine from it). None = found by name.
Default Ready Mode (DefaultReadyMode)ERSEStanceReadyModeStanceD-185 addendum 2: how stance Ready clips play when their hold says Profile Default (upper body or whole body).
Disable Support Hand IKCurve (DisableSupportHandIKCurve)FNameSupport Hand IKA curve of the playing animations that turns the support hand IK (position and rotation) off while it is 1 (reloads, melee bashes).

URSEWeaponPresentation

Module RSE, parent URSEWeaponPresentationBase, primary asset. How attacks with a weapon look (D-184), in every battle mode (grid, live, ATB, turn-based through the cue timelines; action battles through the combat presentation): the stance's swing or fire animations, the muzzle flash and shell ejection, tracers or projectiles, impacts per surface with decals, t...

PropertyTypeCategoryDescription
Stance Anims (StanceAnims)TArray<FRSEWeaponStanceAnims>AnimationAnimations per stance (the light and heavy melee stances, the gun stances, the bow, the caster).
Feel (Feel)FRSEWeaponFeelFeel--- Feel ---
Aim Time (AimTime)floatFiringSeconds aiming before the first shot (without an Aim animation, a still beat).
Muzzle Flash (MuzzleFlash)TSoftObjectPtr<UNiagaraSystem>Firing--- Firing ---
Muzzle Flash Scale (MuzzleFlashScale)floatFiring
Pellets Per Shot (PelletsPerShot)int32FiringTracers per shot (shotgun pellets).
Pellet Spread (PelletSpread)floatFiringVisual spread of pellets around the target (cm at the target).
Recoil Distance (RecoilDistance)floatFiringRecoil of each shot on units without animations (cm).
Shell Eject (ShellEject)TSoftObjectPtr<UNiagaraSystem>Firing
Shot (Shot)FRSEWeaponShotVisualFiringThe tracer or projectile of each shot.
Shot Interval (ShotInterval)floatFiringSeconds between the shots of a burst.
Shots Per Attack (ShotsPerAttack)int32FiringShots per attack (a rifle burst, a pistol double tap): each fires, flies and lands with a hit reaction.
Default Impact (DefaultImpact)FRSEWeaponImpactImpactsUsed when no entry matches the surface.
Impacts (Impacts)TArray<FRSEWeaponImpact>ImpactsImpacts per surface (Surface.Flesh, Surface.Metal, Surface.Stone...); the first match wins.
Lunge Distance (LungeDistance)floatMeleeSwing length on units without animations (the procedural lunge, cm).
Melee Trail (MeleeTrail)TSoftObjectPtr<UNiagaraSystem>MeleeThe ribbon on the blade during a swing.
Swing Impact Time (SwingImpactTime)floatMeleeSeconds from the swing's start to the hit (units without hit-frame notifies).
Trail Seconds (TrailSeconds)floatMeleeSeconds the trail lasts (the swing).
Muzzle Offset (MuzzleOffset)FVectorSocketsThe muzzle in the weapon mesh's space (cm), when it has no socket (the classifier measures it). Zero = the measured tip.
Muzzle Socket (MuzzleSocket)FNameSocketsSocket of the weapon mesh where shots leave (missing = Muzzle Offset, else the mesh's measured tip).
Shell Eject Offset (ShellEjectOffset)FVectorSockets
Shell Eject Socket (ShellEjectSocket)FNameSocketsSocket where spent shells leave (missing = Shell Eject Offset, else the muzzle).
Trail End Socket (TrailEndSocket)FNameSockets
Trail Start Socket (TrailStartSocket)FNameSocketsMelee trail: the sockets of the blade's base and tip (missing = the measured weapon tip).
Fire Sound (FireSound)TSoftObjectPtr<USoundBase>Sounds--- Sounds ---
Reload Sound (ReloadSound)TSoftObjectPtr<USoundBase>Sounds
Swing Sound (SwingSound)TSoftObjectPtr<USoundBase>Sounds
Grip (Grip)FRSEWeaponGripWeaponD-185: how the weapon is held (hold type, grip and support points).
Stance (Stance)ERSEWeaponStanceWeaponThe stance its attacks use (Auto = from the kind).
Weapon Kind (WeaponKind)ERSEWeaponKindWeapon
Weapon Mesh (WeaponMesh)TSoftObjectPtr<UObject>WeaponThe weapon mesh this presentation is for (a static or skeletal mesh; Dress My Abilities sets it): the Weapon Hold Editor previews it and the validation measures it. Presentations shared by a kind leave it empty.

URSEWeaponPresentationBase

Module RSECore, parent URSEPrimaryDataAsset, abstract, primary asset. Base of weapon presentation assets (D-184; the asset itself, URSEWeaponPresentation, is defined in the RSE module): equipment (URSEEquipmentData::WeaponPresentation) and action weapons (URSEActionWeaponData::WeaponPresentation) reference it softly without RSECore knowing its contents.

URSEWeatherTableData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. The weather of a region (D-101): which weathers happen and how often, by phase of day and season.

PropertyTypeCategoryDescription
Entries (Entries)TArray<FRSEWeatherTableEntry>Weather
Initial Weather (InitialWeather)FGameplayTagWeatherThe weather of a new game (or when this table starts and the current weather is not in it). Empty = a roll.
Repeat Weight (RepeatWeight)floatWeatherWeight multiplier for rolling the weather that is already there (above 1: weather lasts longer; 0: always changes).

URSEWeatherTypeData

Module RSECore, parent URSEPrimaryDataAsset, primary asset. A weather type (D-101): Clear, Cloudy, Rain, Storm, Fog, Snow...

PropertyTypeCategoryDescription
Max Hours (MaxHours)floatDuration
Min Hours (MinHours)floatDurationHow long it lasts once it starts, in game hours (random in the range; a weather table entry can override).
Transition Seconds (TransitionSeconds)floatDurationReal seconds this weather takes to come in (the previous one fades out meanwhile).
Lightning (Lightning)FRSEWeatherLightningLook
Look (Look)FRSEWeatherLookLook
Ambient Loop (AmbientLoop)TSoftObjectPtr<USoundBase>PresentationLooping ambience (rain, wind), faded with the weather (SFX channel of the Audio settings).
Ambient Volume (AmbientVolume)floatPresentation
Particles (Particles)TSoftObjectPtr<UObject>PresentationCamera-attached precipitation (a Niagara system), for High and Epic quality.
Particles Low (ParticlesLow)TSoftObjectPtr<UObject>PresentationCheaper precipitation for Low / Medium effects quality (Steam Deck). Empty = Particles.
Thunder Sounds (ThunderSounds)TArray<TSoftObjectPtr<USoundBase> >PresentationThunder claps (one is picked per strike).
Thunder Volume (ThunderVolume)floatPresentation
Icon (Icon)TSoftObjectPtr<UTexture2D>WeatherHUD / menu icon (optional).
Weather (Weather)FGameplayTagWeatherThe weather's id (Weather.Rain, Weather.Rain.Storm, a project's Weather.Sandstorm...).