Jump to content
Sign in to follow this  
Kulyok

Writing dialogue in .d: TIPS

Recommended Posts

Originally written for Pen52; I hope it can help you, as well.

 

And here're a few new coding tips:

 

 

 

1) Suppose you are writing an NPC(romance) mod, and you need an influence variable, or something like "KivanLikes"/"KivanDislikes" variable from Domi's Kivan of Shilmista. Here's how it's done:

 

setting Sarevok's(for example) influence variable is very-very easy. Example:

was:

 ++ ~Torture? And here I thought we were getting along so well. ~ + Sare8knives2 (SareInfluence +1)

is:

 ++ ~Torture? And here I thought we were getting along so well. ~ DO ~IncrementGlobal("SareInfluence","GLOBAL",1)~ + Sare8knives2

 

IncrementGlobal = add something to this variable. IncrementGlobal("SarekInfluence","GLOBAL",1)=SareInfluence+1.

 

Obviously, decreasing it is just as easy:

was:

++ ~Please, don’t hurt me. ~  + Sare8knives4 (SareInfluence -1)

is:

++ ~Please, don’t hurt me. ~ DO ~IncrementGlobal("SareInfluence","GLOBAL",-1)~ + Sare8knives4

 

 

 

2) Comments in your code:

 

Also, if you want to use comments in your code, you can use these symbols: /* note */

This way the compiler will ignore them - and will not tell us that there's a mistake.

Example:

was:

IF ~~ Sare8knives4 (and -1=<SareInfluence<2)

is:

IF ~~ Sare8knives4 /* (and -1=<SareInfluence<2) */

 

You can also use

 

IF ~~ Sare8knives4 // (and -1=<SareInfluence<2)

 

- but be careful: "//" can only work for one line. If you've got long commentary, it will have to go like this:

// make sure
// you use tildas
// and finish each state with an END

 

 

 

3) If we have to choose Sarevok's answer to PC, depending on SareInfluence, here's what we do.

Original code:

++ ~Please, don’t hurt me. ~ DO ~IncrementGlobal("SareInfluence","GLOBAL",-1)~ + Sare8knives4

IF ~~ Sare8knives4 /* (and SareInfluence=>2) */
SAY ~So those knees of yours do know how to bend. ~ 
IF ~~ + Sare8knives1   
END

IF ~~ Sare8knives4 /* (and -1=<SareInfluence<2) */
SAY ~Pleading does not become you.  ~ 
IF ~~ + Sare8knives1   
END

 

How do we actually code it? The answer very simple: we write two replies, one for one condition, one for another.

And we insert our condition in both replies between two "+"'s, in tildas:

 

+ ~GlobalGT("SareInfluence","GLOBAL",1)~ + ~Please, don’t hurt me. ~ DO ~IncrementGlobal("SareInfluence","GLOBAL",-1)~ + Sare8knives4
+ ~GlobalLT("SareInfluence","GLOBAL",2)~ + ~Please, don’t hurt me. ~ DO ~IncrementGlobal("SareInfluence","GLOBAL",-1)~ + Sare8knives4

 

GlobalLT means that variable is less than(SareInfluence<2); GlobalGT means that variable is greater than(SareInfluence>=2, or SareInfluence>1)

 

If you want to add another condition(SareInfluence>=-1, or SareInfluence>-2), you just need to add an extra condition toi the line(no AND's):

 

+ ~GlobalGT("SareInfluence","GLOBAL",1)~ + ~Please, don’t hurt me. ~ DO ~IncrementGlobal("SareInfluence","GLOBAL",-1)~ + Sare8knives4
+ ~GlobalGT("SareInfluence","GLOBAL",-2) GlobalLT("SareInfluence","GLOBAL",2)~ + ~Please, don’t hurt me. ~ DO ~IncrementGlobal("SareInfluence","GLOBAL",-1)~ + Sare8knives4

 

 

 

4) Conditions for PC responses(race, class, etc)

 

Race is simple:

 

+ ~Race(Player1,ELF)~ + ~I am an elf.~ + elf
+ ~!Race(Player1,ELF)~ + ~I am not an elf.~ + notelf /* ! means NOT */
+ ~OR(2) Race(Player1,ELF) Race(Player1,HALF_ELF)~ + ~I am an elf or a half-elf.~ + elfish /* OR(2) and _two_ commands after it means A or B */

 

Also, races can be HUMAN, HALFLING, DWARF, GNOME or HALFORC.

 

Gender:

 

Gender(Player1,FEMALE) - Player1 is a woman

Gender(Player1,MALE) - Player1 is a man

 

Class id but basically the same:

 

+ ~Class(Player1,MAGE_ALL)~ + ~I am a wild mage, a mage, a sorcerer!~ + mage_or_sorcerer_or_wild_mage
+ ~Class(Player1,BARD_ALL)~ + ~I am a bard! A scald! A jester! A blade!~ + bards
+ ~!Class(Player1,MAGE_ALL) !Class(Player1,BARD_ALL)~ + ~I cannot cast mage spells.~ + notmageandnotbard
+ ~Class(Player1,FIGHTER_ALL)~ + ~I am a cool fighter!~ + fighter

 

Others: DRUID_ALL, CLERIC_ALL, PALADIN_ALL, RANGER_ALL, MONK, SORCERER.

 

Stats are a tad more difficult:

 

CheckStatGT and CheckStatLT are two commands you will need. For example: CheckStatGT(Player1,11,INT) means that Player1's Intelligence > 11 (12 or higher).

 

+ ~CheckStatGT(Player1,12,CHR)~ + ~I am pretty!~ + cha_13_or_higher
+ ~CheckStatLT(Player1,10,STR)~ + ~I am weak.~ + str_9_or_lower

 

All stats are: STR, DEX, CON, INT, WIS, CHR(not CHA!!).

 

Just in case - here is a full list of various commands(it looks complicated, though):

http://iesdp.gibberlings3.net/scripting/tr...bg2triggers.htm

 

 

 

5) Setting and checking variables:

 

Now, there are two commands. Setting a variable is simple, just like with CLUAConsole: SetGlobal("variablename","GLOBAL",2)

And checking if our variable is 2 or not 2 is even simpler: Global("variablename","GLOBAL",2) checks if your variable=2 or not.

 

Clean code follows:

 

If you want to set SarevokPCLie=1(if PC lies), it's usually best to do it this way:

 

++ ~I love you, Sarevok! (truth)~ + sarevok_replies_truth /* we do nothing */
++ ~I love you, Sarevok! (lie)~ DO ~SetGlobal("SarevokPCLie","GLOBAL",1)~ + sarevok_replies_lie /* we set a variable*/

 

Now, if you want to check a variable, then you can do it this way:

 

+ ~Global("RE_SarevokPCLie","GLOBAL",0)~ + ~I never lied to you before, Sarevok!~ + this_is_true_sarevok_replies
+ ~Global("RE_SarevokPCLie","GLOBAL",1)~ + ~I never lied to you before, Sarevok!~ + this_is_NOT_true_sarevok_replies

Share this post


Link to post
Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...