Questlight Studio
Docs / Exploration

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:

  • Skills. Perception, Disarm, Lockpick and Pickpocket come from stats, level and class or trait bonuses (Project Settings → Exploration RPG → Skills). Attempts share one chance formula with a minimum and maximum.
  • Traps. Spotting is passive (the party compares Perception with the trap's Detect Difficulty within a radius). Disarm with Interact, or send a follower with the Open / unlock party command. Stepping on a trap sets it off, found or not.
  • Locks. A key opens at once. Otherwise the best member picks it: the lockpick minigame (a marker sweeps a bar; press Confirm inside the green spot to set pins) or auto resolve.
  • Stealing. Sneak behind an NPC with a Pickpocket asset: the prompt becomes "Steal". Failure may be noticed and runs the purse's Caught Effects (the NPC fights, guards come, prices rise).
  • Distractions. Hold the Distract input to throw a stone; visible enemies walk over to look.
  • Fallen members. After a battle they get up, or stay down with a "Revive" prompt, depending on Fallen Members → After Battle.

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

  • Layers. Generate Map sorts meshes into ground, roads, water, forests, buildings and rocks by actor or component tags (MapBuilding, MapWater, MapForest, MapRock, MapGround, MapHide, MapCanopy), then by name words, then by size.
  • Bounds and regions. An RSE Map Bounds Volume sets what the map covers (its arrow points up). RSE Map Region Volume writes region names with an importance (Major, Normal, Minor).
  • Styles. Clean, Painted, Parchment and Blueprint ship; duplicate a Map Style asset for your own.
  • Markers and objectives. Add the RSE Map Marker component to any actor. Give a quest objective a Map Target and the marker the same Target Id to show it on the area map, minimap and compass.
  • Batch. RSE.Map.Generate, RSE.Map.Generate All, or the RSEMapGenerate commandlet with -AllowCommandletRendering.
  • Performance. Maps are static pictures. The minimap and compass update on a light timer. The fog is a small texture updated only when something new is explored.

16.7.6 Time and weather in depth

  • Rules in Time & Weather Rules (also a rules-profile section): roaming enemies by phase and weather (sight, hearing, reaction, chase speed, aggression, density), other encounter pools at night, and battle modifiers by weather or phase.
  • Conditions and effects for stories: Time Of Day Is Between, Phase Of Day Is, Weather Is, Day Number, Season Is; Set Time, Advance Time, Set Weather, Lock Weather, Set Clock.
  • Materials. The weather writes wetness, puddles, snow cover, wind and more into the material parameter collection MPC_RSEWeather; any material can read it. M_RSE_WeatherGround is a ready example.
  • Indoors. Place a Weather Volume with Blocks Precipitation, or set Weather Mode to None and Time Mode to Fixed Hour on the actor for a dungeon.
  • Steam Deck and low settings. The sky updates less often, clouds are a painted layer and precipitation uses about a third of the particles. Only the lamps nearest the camera stay real lights.

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