Dialog specs

= Dialog/NPC Interaction System Specs = This is a set of specifications for dialog options to be added to the FIFE engine.

Minimum feature set
This is a list of features that represent the minimal requirements for some kind of RPG game. It is roughly based on fallout1/2. Someone with more experience with Arcanum or another cRPG might want to add / subtract ideas. Not all of these must be implemented for demo version, but all should be considered in software design phase.
 * Player should be able to click on an NPC to initiate dialog with any "person" (and possibly other things).
 * All NPCs should have at least a response to this dialog initiation - even it it's "please don't bother me".
 * Some NPCs will have more detailed "dialog" interface enabled. These are cases where the player could conceivably "get something" out of the interaction.  "Something" here could be simply information, but also "quests" (including jobs), and items/money.  A series of player dialog options interleaved with NPC responses from beginning ("talk initiated")  to "end" (a traversal of the dialog tree for that NPC/game state) is called a "conversation".
 * "Bartering" is a sub type of dialog that can be initiated with a wide range of NPCs - it should open a (distinct) interface whereby the player can offer trades of goods for other goods. An example gui of this would be where player drags items from his inventory to an "offer board" and also drags items from the NPCs inventory to the "offer board" and takes a "attempt trade" action (probably a button click).  The NPC evaluates the trade, and gives a yes or no answer.  Player can then modify the deal, and try again.  Bartering is not the only way to transfer items between characters.  More complicated models are possible (see below).
 * Dialog options available to both the PC and NPC are dependent on _current_ game state (you can't ask about X if you you don't already know about X). The "conversation" itself may modify this game state - such that certain dialog options made by the player can change future responses of the current NPC (as well as others).
 * Dialog can (in some circumstances) "end" in activating turn-based combat (including surprise attacks)
 * Dialog can loop back to previous states within the same conversations and in repeated dialog initiations.
 * Dialog may in some circumstances, activate "journal" entries - that is to say, make a note for the player to keep track of a "quest"
 * Dialog may in some circumstances write to the character (PC) state, or even NPC states (for example, healing, transfer of carried items). This can include PC "knowledge" of new locations "Can you mark the site of the weapon cache on my map?"
 * Dialog options may be attached to (instantaneous - in player time) "tasks" which will influence further dialog.  These tasks need not read/write from the game state (but will at least "read" from the character(s) state).  Example:  A dialog option might be associated with an "intimidation" task based on various PC and NPC statistics and skills and possibly coupled with a randomly generated result (see Zenbitz:Thoughts on task resolution as well as Proposals:Mechanics ).  These tasks may take a finite amount of "game time" (fade out?)

"Nice to haves"
These are additional features that could be very useful, but at the moment are not required. As time progresses, these items may move "up" to Minimal requirements, or "down" to "Pie-in-the-sky"
 * Ability for game engine to initiate dialog with the player (via NPC or other event)
 * "Shotcuts" via floating text (no Player dialog choices) to indicate to player that there is nothing he can influence (at this time...)
 * Random chit-chat via floating text
 * Gossiping system where by news spreads from place to place and NPC to NPC.

"Pie-in-the-Sky" features
This is low priority stuff that someone, somewhere thinks might be cool. I would not implement anything past "hooks" for anything here.
 * "Conference calls" - where PC converses with multiple NPCs.  I have no "use case" for this, but it would be cool
 * Dynamic conversation AI - NPCs (in addition to hard coded dialogs) have needs, wants, goals, friends, enemies - these can be cranked upon to generate some "generic" dialog "plots".
 * See also: Zenbitz:Really_deep_thoughts_about_NPCs_and_their_disturbing_personalities