Dialogue Parameters Reference
Every script handler in Golarion Chronicles reads its configuration from callInfo.ScriptParams, a dictionary of key-value pairs supplied by the dialogue toolset. This document catalogues every parameter name, which handler consumes it, and what it does.
Parameters are case-sensitive. Missing parameters resolve to an empty string (""), so handlers that expect a value will silently no-op if the key is absent.
Quest Handlers
All three quest handlers live in src/Quests/QuestFunctions.cs.
q_startquestat (Action)
Starts a quest for the player when a reply is selected.
| Parameter | Type | Description |
|---|---|---|
STARTQUEST |
resref | The quest resref to start. Required. |
GIVEITEM1 |
item resref | Optional. Creates this item in the player's inventory when the quest starts. |
GIVEITEM2 |
item resref | Optional. Second bonus item. |
Example:
Script: q_startquestat
STARTQUEST: q_foreignquarter
GIVEITEM1: wand_acidsplash
q_finishquestat (Action)
Completes a quest, awards rewards, and updates parent progress.
| Parameter | Type | Description |
|---|---|---|
QUESTRESREF |
resref | The quest resref to finish. Required. |
NOREWARD |
flag | If present (any non-empty value), suppresses XP/gold/item rewards. Use for organizational parents whose children already reward the player. |
REMOVE |
item tag/resref | Destroys all items matching this tag from the player's inventory after turn-in. Useful for consumable quest items. |
Example:
Script: q_finishquestat
QUESTRESREF: q_sewerscout
q_queststatusaw (Condition)
Returns true/false to show or hide a dialogue option. This is the primary gating script for all quest-related dialogue. Parameters are evaluated in a fixed priority order; the first applicable check wins.
Modern contract (preferred)
| Parameter | Type | Description |
|---|---|---|
QUESTRESREF |
resref | The quest to evaluate. Required for modern usage. |
QUESTSTATE |
enum | Desired state. One of: ABSENT, READY, FINISHED, INPROGRESS. |
State meanings:
- ABSENT — the player has never started this quest. Option shows only before acceptance.
- READY — the quest is at 100% progress but not yet turned in. Option shows for turn-in.
- FINISHED — the quest has been completed and rewarded. Option shows post-completion.
- INPROGRESS — the quest has been started but is below 100%. Option shows while active.
Legacy parameters (still functional, superseded by QUESTSTATE)
These are checked in order after the modern contract. If any legacy parameter is present, it takes precedence over QUESTSTATE:
| Parameter | Type | Description |
|---|---|---|
QUESTCOMPLETE |
resref | Override the database requiredquest prerequisite. Shows the option only if this quest is finished. |
NOTCOMPLETE |
resref | Hides the option if this quest is NOT finished. Used to gate on a prerequisite. |
HIDEINPROGRESS |
resref | Hides the option while this quest is in progress (started but incomplete). |
QUESTINPROGRESS |
resref | Shows the option only while this quest is in progress. |
COMPLETEPROGRESS |
resref | Shows the option only if this quest has reached 100% progress (equivalent to READY). |
Modifier parameters
These can be combined with any of the above:
| Parameter | Type | Description |
|---|---|---|
LEVEL |
int | Overrides the level check. Normally the evaluator uses the quest's level column from the database (±2 range). Setting this forces a specific threshold. |
SPEAKERTAG |
tag | Restricts the option to a specific speaker object tag. If the current speaker's tag doesn't match, the option is hidden. |
FALLBACK |
flag | If present, allows district fallback logic to substitute a compatible quest when the primary is unavailable. |
Example (modern):
Script: q_queststatusaw
QUESTRESREF: q_sewerscout
QUESTSTATE: ABSENT
Example (with parent gate):
Script: q_queststatusaw
QUESTRESREF: q_sewerscout
QUESTSTATE: ABSENT
QUESTINPROGRESS: q_foreignquarter
Venture Captain Handlers
Live in src/Quests/cv_venturecapsc.cs.
cv_venturecapsc (Condition)
Dynamic paginated quest list builder for Venture Captain NPCs. Replaces static dialogue nodes with a database-driven list.
| Parameter | Type | Description |
|---|---|---|
NODE_ID |
int | The node index in the template conversation. Nodes 1..pageSize-2 are quest slots; pageSize-1 is Previous Page; pageSize is Next Page. |
The handler reads the speaker's CONVERSATION local variable to identify which quest pool to query, then filters by:
- Speaker tag matching one of the faction columns (
sovereigncourt,libertysedge,theexchange) ingc_quests.quests. - Player level ±2 (with a special exception: level-12 writs show for level-10 players).
- Excludes quests already marked FINISHED in the player's
queststatusJSON.
cv_venturecat (Action)
Handles pagination and quest selection from the dynamic list.
| Parameter | None | Reads the current node text to determine action: [Next Page], [Previous Page], "Thank you for checking.", or a quest display name (starts the quest dialogue). |
cv_setfaction (Action)
Assigns a faction to the player.
| Parameter | Type | Description |
|---|---|---|
FACTION |
string | The faction identifier to assign (e.g. sovereigncourt, libertysedge, theexchange). No-op if the player already has a faction. |
cv_gethasfaction (Condition)
Checks whether the player's faction matches the parameter.
| Parameter | Type | Description |
|---|---|---|
FACTION |
string | Special values: ANY (player has any faction), PICKFACTION (player has no faction), SPEAKERFACTION (player faction matches speaker's faction), NOTSPEAKERFACTION (player faction differs from speaker's). Otherwise compared literally against the stored faction. |
Speaker-to-faction mapping:
GlorianaMorilla→sovereigncourtAaqiralHakam→theexchangeColsonMaldris→libertysedge
Generic Dialogue Helpers
cv_nwnxdialog (Condition)
Generic paginated list dialog. Same pattern as cv_venturecapsc but without quest-specific filtering.
| Parameter | Type | Description |
|---|---|---|
NODE_ID |
int | Node index within the template conversation. |
Reads the speaker's CONVERSATION local variable to select the list source. Currently stubbed (returns null list).
cv_nwnxaction (Action)
Pagination handler for cv_nwnxdialog. No parameters.
cv_startdlg (Action)
Chains into another dialogue file from the current conversation.
| Parameter | Type | Description |
|---|---|---|
RESREF |
dlg resref | The .dlg resource to open next. Starts the conversation with entry level 0 (fresh start). |
cv_openstore (Action)
Opens the merchant window associated with the NPC.
| Parameter | Type | Description |
|---|---|---|
MARKUP |
int | Percentage markup applied to store prices (0 = none). |
MARKDOWN |
int | Percentage markdown applied to sell prices (0 = none). |
The actual store is resolved from the NPC's MERCHANT_RESREF local variable.
cv_openinventory (Action)
Force-opens a specific inventory container by tag.
| Parameter | Type | Description |
|---|---|---|
RESREF |
tag | Tag of the placeable/container to open. Ends the conversation after opening. |
Character Setup
cv_charsetup (Condition)
Paginated character setup menu shown at level 5.
| Parameter | Type | Description |
|---|---|---|
NODE_ID |
int | Node index. Maps to entries in the home list (Deity Chooser, Domain Chooser, Wizard Opposed Schools, etc.). |
cv_csetupat (Action)
Handles selections from the character setup menu. Opens NUI windows based on the selected action text. No parameters beyond NODE_ID (inherited from the condition).
cv_setschool (Action)
Sets a wizard's opposed school.
| Parameter | Type | Description |
|---|---|---|
SCHOOL |
string | Spell school name (e.g. Abjuration, Conjuration, …) or reset to clear opposed schools. Must differ from the wizard's specialization. |
cv_setdomain (Action)
Replaces a cleric's second domain.
| Parameter | Type | Description |
|---|---|---|
DOMAIN |
string | Domain name from the domains 2DA (e.g. Life, Knowledge, Tempest). Cannot duplicate an existing domain. |
Aeon Stone / Influence Shop
cv_aeonstart (Condition)
Paginated aeon stone purchase/influence shop menu.
| Parameter | Type | Description |
|---|---|---|
NODE_ID |
int | Node index within the template. |
Reads the speaker's CONVERSATION local variable or creature's DialogResRef to determine the shop type.
cv_aeonaction (Action)
Handles aeon stone purchases and influence shop navigation. No explicit parameters; dispatches on the current node text.
cv_scrollmaker (Action)
Opens the influence scroll crafting NUI window. No parameters. Uses callInfo.ObjectSelf as the shopkeeper reference.
cv_potionmaker (Action)
Opens the influence potion crafting NUI window. No parameters. Uses callInfo.ObjectSelf as the shopkeeper reference.
Rumors
cv_pickrumor (Condition)
Injects a random rumor into the dialogue node text.
| Parameter | None | Reads the speaker's RUMOR_TYPE local variable (default "low"). Queries gc_rumors.rumors table for a random entry of that type and replaces the placeholder text "rumortext" with the result. |
Transportation
cv_ferryman (Action)
Teleports the party to a waypoint for a gold fee.
| Parameter | Type | Description |
|---|---|---|
DESTINATION |
waypoint tag | Tag of the target waypoint in the current area. Costs 5 gp. |
cv_fishingrod (Action)
Creates a fishing rod in the player's inventory. No parameters.
Out-of-Character / Utility
ooc_teleport (Trigger)
Handles the OOC door trigger. Redirects characters with incomplete setup to the IC portal. No parameters.
enforcelegalchar (ELC Callback)
Validates character legality on save/load. No dialogue parameters; reads engine validation failure data directly.
cv_djinnattacked (Event)
Called when a djinn merchant is damaged. Spawns a respawn timer. No parameters.
Map / World Transition
worldtransition (Trigger)
Handles world map transitions. No dialogue parameters.
mapabsalom (Trigger)
Specific Absalom map transition handler. No dialogue parameters.
destroymodulate (Trigger)
Destroys modulated objects on transition. No dialogue parameters.
mapclick (Trigger)
World map click handler. No dialogue parameters.
cv_worldmapparty (Action)
Party management from the world map. No parameters.
onentermap / onexitmap (Triggers)
Map enter/exit event hooks. No dialogue parameters.
Quick-Reference: Which Handler Goes Where
| Dialogue slot | Script name | Purpose |
|---|---|---|
| Reply Active (condition) | q_queststatusaw |
Show/hide quest options |
| Reply Active (condition) | cv_gethasfaction |
Gate on faction membership |
| Reply Active (condition) | cv_venturecapsc |
Dynamic quest list page |
| Reply Active (condition) | cv_nwnxdialog |
Generic paginated list |
| Reply Active (condition) | cv_charsetup |
Character setup menu |
| Reply Active (condition) | cv_aeonstart |
Aeon stone / influence shop |
| Reply Active (condition) | cv_pickrumor |
Random rumor injection |
| Reply Script (action) | q_startquestat |
Accept a quest |
| Reply Script (action) | q_finishquestat |
Turn in a quest |
| Reply Script (action) | cv_venturecat |
Paginate/select from VC list |
| Reply Script (action) | cv_setfaction |
Join a faction |
| Reply Script (action) | cv_startdlg |
Chain to another .dlg |
| Reply Script (action) | cv_openstore |
Open merchant window |
| Reply Script (action) | cv_openinventory |
Open a container |
| Reply Script (action) | cv_csetupat |
Character setup selection |
| Reply Script (action) | cv_setschool |
Set opposed school |
| Reply Script (action) | cv_setdomain |
Replace cleric domain |
| Reply Script (action) | cv_aeonaction |
Aeon stone purchase |
| Reply Script (action) | cv_scrollmaker |
Open scroll craft NUI |
| Reply Script (action) | cv_potionmaker |
Open potion craft NUI |
| Reply Script (action) | cv_ferryman |
Teleport via ferry |
| Reply Script (action) | cv_fishingrod |
Grant fishing rod |
| Reply Script (action) | cv_nwnxaction |
Paginate generic list |
JSON Structure Reminder
In .dlg.json files, parameters appear as key-value pairs inside:
ConditionParamson reply references (for Active/condition scripts)ActionParamson replies (for action scripts)
Both use the same flat dictionary format:
{
"type": "dictionary",
"value": {
"QUESTRESREF": { "type": "string", "value": "q_sewerscout" },
"QUESTSTATE": { "type": "string", "value": "ABSENT" }
}
}
Integer parameters (like NODE_ID, LEVEL, MARKUP, MARKDOWN) use the same structure with a numeric string value.