Research:Dialogue and Messages: Difference between revisions
(→Voice: Idle - further research.) |
(Added research navbox.) |
||
(One intermediate revision by one other user not shown) | |||
Line 1: | Line 1: | ||
{{Template:Research Navbox}} | |||
==Voice== | ==Voice== | ||
Line 7: | Line 10: | ||
|Every frame, for each NPC, but not creatures | |Every frame, for each NPC, but not creatures | ||
|Idle voiceover trigger | |Idle voiceover trigger | ||
| | |{{StatusCol|green|Implemented, design problem fixed}} | ||
|{{StatusCol|orange|Under research, has design problems.}}}} | |{{StatusCol|orange|Under research, has design problems.}}}} | ||
<syntaxhighlight lang="python"> | <syntaxhighlight lang="python"> | ||
Line 145: | Line 148: | ||
Variables ''CrimeGoldDiscount, CrimeGoldTurnIn, PCHasCrimeGold, PCHasGoldDiscount, PCHasTurnIn'': see [[Research:Security and Crime#Thieves Guild reductions]] | Variables ''CrimeGoldDiscount, CrimeGoldTurnIn, PCHasCrimeGold, PCHasGoldDiscount, PCHasTurnIn'': see [[Research:Security and Crime#Thieves Guild reductions]] | ||
{{Template:Research Navbox}} |
Latest revision as of 19:02, 19 November 2015
Voice
Voiceovers are special case dialogue entries with fixed topic names that trigger on specific events. Each active voiceover will prevent further triggers on the same topic (and associated result scripts) until the sound file has stopped playing.
Idle
Actions affected | Every frame, for each NPC, but not creatures |
Description | Idle voiceover trigger |
Implementation status | Implemented, design problem fixed |
Analysis status | Under research, has design problems. |
if npc.hello > 0 and npc is not underwater and distance(player, npc) < 3000 and npc.AIpackage is not {Follow, Escort, Combat}:
x = fVoiceIdleOdds * frameTime
roll 10000, if roll < x trigger Idle voiceover
Comments
There is a problem with the design of the probability roll. The fVoiceIdleOdds default (10), together with an FPS of 60 will give x = 0.166... but the roll itself is an integer. The only possible trigger is when roll == 0, and this is still true for all values of fVoiceIdleOdds less than the current FPS. This makes idles effectively dependent on frame rate, and changing the GMST a small amount actually produces no change in behaviour.
Instead it should be done in a framerate independent manner, with an adjusted floating point roll calibrated on the quantized behaviour of vanilla at a standard fps (60 fps).
Text defines
Text defines in Morrowind are special strings within dialogue and message boxes, that are replaced at run time.
For dialogue, they begin with %, and for message boxes, they start with ^.
Any character can follow a sequence, so if "%pcrace" is "Redguard", "%pcraces" is "Redguards".
% (or ^ in messageboxes) followed by any global variable will be replaced with the value of that variable.
All sequences are case insensitive.
Built in defines are evaluated before global variables, so if there is a global variable pcnamea = 50, "^pcnamea" will be the name of the character followed by a, not 50.
Global variables with a % or ^ in them do not behave sensibly (as might be expected).
Global variables with names that are partially contained in other global names (eg. testglobal and testglobala) work correctly (i.e "^testglobala" does not give the value of testglobal followed by a).
List of defines
actionactivate | Button for activate |
actionback | Button for Back |
actionforward | Button for Forwards |
actionjournal | Button for open journal |
actionreadyitem | Button for draw weapon |
actionreadymagic | Button for ready Magic |
actionrestmenu | Button for rest |
actionslideleft | Button for left strafe |
actionslideright | button for right strafe |
actionmenumode | Button to open inventory |
actionuse | Button to use current (magic / weapon) |
actioncrouch | Button for crouch / sneak |
actionrun | button to run |
actiontogglerun | button to toggle running |
actionjump | button to jump |
actionnextweapon | button for next weapon |
actionprevweapon | button for previous weapon |
actionnextspell | button for next spell |
actionprevspell | button for previous spell |
class | speakers class (players in messagebox) |
crimegoldturnin | amount of gold needed to pay a guard when catched |
name | speakers name (players in messagebox) |
pcclass | players class |
pccrimelevel | players current bounty |
pcname | players name |
pcrace | players race (this one is strange, as there is a global (short) variable of the same name, but it gives a string when used) |
race | speakers race (players in messagebox) |
cell | The cell the player is currently in |
The following only work in dialogue (empty in messageboxes):
faction | speakers faction |
nextpcrank | players next rank in the speakers faction |
pcnextrank | probably the same as above |
pcrank | players rank in current faction |
rank | speakers rank in their faction |
Dialogue global variables
Crime-related global script variables are set every time the player enters dialogue with an NPC:
Variables CrimeGoldDiscount, CrimeGoldTurnIn, PCHasCrimeGold, PCHasGoldDiscount, PCHasTurnIn: see Research:Security and Crime#Thieves Guild reductions