Modding:Conversations: Difference between revisions

7,445 bytes added ,  02:13, 19 February 2022
Add most generic parts, more of these than I thought
(Add note about namespaces)
(Add most generic parts, more of these than I thought)
Line 225: Line 225:
==Tables==
==Tables==
Below are non-exhaustive tables of existing parts, events and delegates.
Below are non-exhaustive tables of existing parts, events and delegates.
===Parts===
Source notes the deepest element that you can expect the event to propagate from. In order, the values are Conversation -> Node -> Choice -> Text.<br/>
Order notation is very approximate, as the same event will be fired multiple times on different elements during a navigation.
{| class="wikitable"
|-
! Name
! Description
|-
| AddSlynthCandidate
| Adds the current location as a possible sanctuary for the slynth during the quest [[Landing Pads]].
----
'''Sanctuary''': Optional explicit sanctuary name to use instead of zone name.<br/>
'''Plural''': Whether the explicit sanctuary name is plural.
----
<code><nowiki><part Name="AddSlynthCandidate" Location="pariah caravans" Plural="true" /></nowiki></code>
|-
| ChangeTarget
| Takes any number of predicates as parameters and changes the navigation target (GetTargetElementEvent) if all predicates match.
----
'''Target''': The alternate navigation target if predicates match.<br/>
'''Any''': Require one predicate to match rather than all.
----
<code><nowiki><part Name="ChangeTarget" Target="ShowSonnet" IfHaveBlueprint="Sonnet" /></nowiki></code>
|-
| GiveArtifact
| Make the player give an artifact from their inventory to continue navigation.
|-
| GiveReshephSecret
| Share a secret from Resheph's life to gain some XP.
|-
| IPredicatePart
| An extensible abstract part that takes predicates as parameters and can check all or any for a match. ChangeTarget derives from this, for example.
|-
| LibrarianGiveBook
| Donate a book to the librarian to gain some XP.
|-
| PaxInfectLimb
| Choose a limb to infect with Klanq.
----
'''IfQuestActive''': Only display this element if the quest is active and the player has no infected limb.
----
<code><nowiki><part Name="PaxInfectLimb" IfQuestActive="true" /></nowiki></code>
|-
| QuestHandler
| Manipulates quest and step state. If a child text is provided it will replace the normal ending tag for that action, e.g. <code>[Accept Quest]</code>.
----
'''QuestID''': The quest's ID, usually the same as its display name.<br/>
'''StepID''': The ID of a step within the quest, if applicable.<br/>
'''XP''': The XP awarded for completing the step, if applicable. This will override the value in Quests.xml if provided.<br/>
'''Action''': Takes a string value of an action to perform on the quest and/or step;
: '''Start''': Find an unstarted quest with QuestID and start it.
: '''Step''': Complete a step within the quest, finishes the parent quest if all steps are completed.
: '''Finish''': Finish a started quest, regardless of what steps are currently completed.
: '''Complete''': Finish a started quest and mark all steps as complete if they weren't already.
----
<code><nowiki><part Name="QuestHandler" Action="Step" QuestID="Fetch Argyve a Knickknack" StepID="Return to Argyve" XP="75" /></nowiki></code>
|-
| ReceiveItem
| The player receives one or several potentially identified items.
----
'''Blueprints''': A comma separated list of blueprints for the player to receive.<br/>
'''Identify''': A comma separated list of blueprints to identify, of those given. "*" or "All" can be specified to identify all of them.<br/>
'''Mods''': A dice roll of how many mods to apply to the received items.<br/>
'''Pick''': Makes the player choose one item of those allotted, instead of receiving all of them.<br/>
'''FromSpeaker''': Takes an existing item of the same blueprint from the speaker if available, instead of creating new ones.
----
<code><nowiki><part Name="ReceiveItem" Pick="true" Mods="1" Blueprints="Long Sword4,Cudgel4,Dagger4,Battle Axe4" Identify="All" /></nowiki></code>
|-
| RequireReputation
| Require the player's reputation with a specific faction to be at or above a certain level to continue. If the parent element is a choice, its text will be greyed out.
----
'''Faction''': The ID of a faction within the current game.<br/>
'''Level''': The name of a reputation level, valid values are: Loved, Liked, Indifferent, Disliked, and Hated.
----
<code><nowiki><part Name="RequireReputation" Faction="Snapjaws" Level="Loved" /></nowiki></code>
|-
| SpiceContext
| Replaces template variables in the spoken text with excerpts from history spice, e.g. replacing <code>=spice.commonPhrases.sacred.!random=</code> with <code>sanctified</code>.
|-
| Tag
| Adds an ending tag to the parent element's text. Most parts with functionality will handle their own tags via <code>GetChoiceTagEvent</code>, this is mostly for informational purposes.<br/>
The game makes a distinction between spoken and unspoken text for the purposes of filtering (e.g. the cawing of corvids), hence why unspoken tags should not be written together with the spoken text.
----
<code><nowiki><part Name="Tag">{{g|[begin trade]}}</part></nowiki></code>
|-
| TakeItem
| Items are taken from the player's inventory or body.
----
'''Blueprints''': A comma separated list of blueprints to take.<br/>
'''IDs''': A comma separated list of game object IDs to take.<br/>
'''Amount''': A dice roll of how many items to take. "*" or "All" can be specified to take all of them.<br/>
'''Unsellable''': Mark the taken items as unsellable.<br/>
'''ClearQuest''': Clear quest properties from the taken items.<br/>
'''Destroy''': Destroy the items instead of placing them inside the speakers inventory.
----
<code><nowiki><part Name="TakeItem" Blueprints="Wire Strand" Amount="200" Destroy="true" /></nowiki></code>
|-
| TextFilter
| Mutates the spoken text with a filter, e.g. the cawing of corvids or croaking of frogs.
----
'''FilterID''': The ID of a filter, valid values are: Angry, Corvid, WaterBird, Fish, Frog, Leet, Lallated, Weird, and Cryptic Machine.<br/>
'''Extras''': A comma separated list of additional noises to include in the filter, used in the Lallated and Weird filters currently.<br/>
'''ProtectFormatting''': Outputs color protected text, currently used for Leet ampersands which are doubled to preserve them.
----
<code><nowiki><part Name="TextFilter" FilterID="Lallated" Extras="*growl*,*whine*" /></nowiki></code>
|-
| TextInsert
| Appends or prepends a text that can be either spoken or unspoken to the element.
----
'''Prepend''': Add the text to the beginning instead of the end.<br/>
'''Spoken''': Whether the inserted text is treated as spoken or unspoken for the purposes of filtering.<br/>
'''NewLines''': A number of new lines to add as padding between the inserted text and the existing text.
----
<code><nowiki><part Name="TextInsert" Spoken="false" NewLines="2">[Press Tab or T to open trade]</part></nowiki></code>
|-
| Trade
| Opens the trade screen when navigating to the parent element.
|-
| VillageContext
| Replaces template variables in the spoken text with excerpts from the village's history, e.g. replacing <code>=village.sacred=</code> with <code>the act of procreation</code>.<br/>
Uses the faction of the speaker to find the village's historical context.
----
'''GameState''': Try to get the village's historical context from the faction provided in specified game state.
----
<code><nowiki><part Name="VillageContext" GameState="SlynthSettlementFaction" /></nowiki></code>
|-
| WaterRitualRandomMutation
| Purchase a random mutation of specified category for reputation in the water ritual.
----
'''Category''': A mutation category, valid values for the base game are: Physical, Mental.
----
<code><nowiki><part Name="WaterRitualRandomMutation" Category="Physical">You gain =mutation.name=.</part></nowiki></code>
|}
===Events===
===Events===
Source notes the deepest element that you can expect the event to propagate from. In order, the values are Conversation -> Node -> Choice -> Text.<br/>
Source notes the deepest element that you can expect the event to propagate from. In order, the values are Conversation -> Node -> Choice -> Text.<br/>