Showing posts with label Building Tips. Show all posts
Showing posts with label Building Tips. Show all posts

Thursday, January 21, 2016

Wakey wakey!

I can't believe I've left this alone for so many years.  It's been a struggle being a single Dad, to the point that I've had to have a minor operation.    Having to spend a couple of weeks resting, and now mobile enough to exploit my free time... so I started up the toolset and found myself dabbling again.

As anyone who's played Chapter One will know, I'm a stickler for detail, and atmosphere is one of the most important tools at your disposal for creating it. It's all about immersion. Immerse your player in the story by setting the scene, both visually and auditory. One trick I like to use with sound is I'll note the background noise of an area and place a much quieter version of it near the transition point of an adjoining area.

I also check the description of anything that can be clicked on, including NPCs, tailoring them to observations the player can make.

If you haven't played Chapter One, I urge you to do so, and if you have, I urge you to play again.  Were you aware that the confrontation that occurs in the mines has a game changing consequence if the Half Orc survives?  The consequence being that you encounter him later and he has conveniently made an area combat free. 

There are many things that are easy to miss, ranging in complexity, including but not limited to:
  • Multiple reward possibilities dependant on how you're viewed by Anath.
  • It's possible to get Gailin to like you.  Hard work, but possible.  There are several range bands to how he views you, altering his conversations and reactions to storyline in the process.
  • There's an optional quest in Oasis involving a burnt note.
  • Translating a book can gain another companion.
  • Lore in all books is original and can contain clues.
  • Lore on all armour is original, from dog collars to chainmail.
  • In fact the lore of everything pertains to the setting
So... having rekindled my interest, I'm having another look.  No promises, but knowing someone wanted to play Chapter 2 could make all the difference.  Happy gaming people :)

Tuesday, October 25, 2011

Inspirational Fuel

I believe I've mentioned in the past that I've been labelled a "Regressive Achiever".  We're very rare (so I've been told).  Most people when getting from A to Z conclude that they best go to B first, whereas I'd argue that since Z is where I want to be, I'm going to need to get to Y at some stage so spend my time working out how to get there.  Regressive Achievers tend to tackle things backwards.  As a result they tend to be slow and methodical, perhaps taking longer, but usually achieving a superior result far closer to the desired requirement of their chosen task.  Ever since I was told this, I have to chuckle at the amount of times I subconciously work like this without realising I'm doing it.  It's most obvious in the manner in which I draw.  I have an unusual style that my art teacher used to criticise me for, yet I find it is the only way I can work.  When I work on an animal portrait, I have to see evidence that I am achieving what I want, or I lose interest, so I'll finish part of the portrait (I usually do the eyes first, as that's the most important feature to get right) before moving on to another section.  If you were to photograph progress of one of my drawings, you'd get the impression a jigsaw was being made.

It recently occured to me that even Neverwinter can't escape the way I work. 

Having encountered many a thread in the past requesting building tips and advise, I thought perhaps I should elaborate on my own methods.  True, they may be long winded, but, like my drawings, by finishing the finer details before tackling the bigger picture, I find I am provided with the inspirational fuel required to take the project further.

So, for your own enjoyment, here is the thought process involved in the latest piece of  "The Relbonian Chronicles - Chapter Two" that I've been working on...

For the introductory cutscene, I need a conversation to take place between the player and an NPC who is the leader of the local Thieves' Guild.  I work on the location where the conversation will take place until I'm happy with it in terms of content, lighting, and most importantly, music.  I say music is most important for two reasons.  One, it helps set the mood for what will happen in the scene, and two, it helps put me in the right frame of mind to capture the essence of what I want in the characters that will inhabit the scene.  Having got this far, I'll start working on the NPC, taking care that the location he will inhabit is visible to me during the creation process, and that the music can be heard.


Players of my previous works will know I pay great attention to detail, taking the trouble to have an NPC match their chosen portrait as closely as possible.  With the help of the music and the setting, it occurs to me that the head I've selected, although close to the portrait, doesn't portray the intimidation I want to convey so I return to browsing through the head models until I find something more suitable.



Having found something more suitable, I find a description of the NPC comes more naturally, and am able to move on to the inventory.  By far the most important item is the clothing, as again, I want it to tie in with the chosen portrait of the character.  In this instance I am fortunate that not a great deal of the clothing is visible, so the main things I need concern myself with are the colour scheme and the fact that he shouldn't be showing off his chest.  Rather than spend ages looking for something that fits the bill, I just copy what he's wearing and edit it to my personal taste, eventually culminating in the outfit shown below.  Note that while I work on the outfit, I keep the NPC details visible so that I can still refer to the character portrait as reference.


Now, at this stage it occurs to me that as an actor in a cutscene his equipment isn't that important.  I don't let that stop me however, as there's no reason I can't use it elsewhere (perhaps even a later chapter) for whatever reason, and so I set to work on giving the armour both properties and a description...

"Armour of Wrist Whistling is the apt name given to this armour by the maker, a famed tailor called Vence Volderberg, who is rumoured to have created the original Runner costume favoured by the Druids.  This outfit is for an entirely different type of customer however, with urban camoflage as opposed to rural clearly evident in the expensive dyes used to colour the garment.

Light yet well padded, it has been designed to allow swift movement of the arms (hence the name), allowing the wearer to block potential sword swipes with the bladed forearm attachments.

It is rumoured that some in Relbonian high society oppose the open production of such garments arguing that they are favoured by criminals and that anyone wearing them should be treated as such."
 
Satisfied that the description tallies with the properties I designate to it, I then place it on the NPC to see if the final look fits the bill.
 

Now I'm happy.  He looks the part and suits the music I'm listening too perfectly.  I create a one line conversation file and assign it ready for working on later, and browse through a few voice sets until I find the one I feel best suits him.  With that done, I place him in the scene, look at the clock, and realise I should be getting to bed!

Rest assured that work continues, but the perfectionist in me can be a little demanding of my time.  Hopefully that's already clearly evident to those of you who played Chapter One.

Bedtime again... lol... night all. :)

Friday, May 20, 2011

The Art of Conversation

I think I'm nearly there. I've been working on the last conversation file, although have to confess it did start to get complicated as I had to open my henchman convo too and make adjustments to take into account the player might ask the henchman for assistance before talking to the NPC, which required additional coding (*Sigh* - things always end up more complicated!) for things such as making sure the player can't ask the NPC to assist in a conversation that's either already taken place or is too far away to warrant asking. It's funny what you end up thinking about as you go... building the line where the player asks their henchman to assist in talking to a guy down the local tavern, and then thinking "Hang on a minute... I don't want that line being an option if they're walking through the crypts!".

I quite enjoy writing conversation files, but they are probably the most time consuming element of my building. The main reason being I don't want them to appear too linear. Notice I said "appear". You want to give the illusion of choice while ultimately steering to the same outcome. True, there are real choices to be made that can have different consequence, such as accepting or declining a mission, but for the player to have fun they need to feel they arrived at their destination through personal choice and not through what they perceive as limited options. For this reason many of my player responses might have more than 2 options, but you have to keep a grip on the situation in order to avoid your conversation branches resembling an upside down tree, which is both impractical and very difficult to keep track of.

Let's start with a basic example:

NPC: "Say, you look like you can handle yourself. I have a job if you're interested?"


  • PLAYER OPTION 1 - "Sorry, I have enough on my plate at the moment."


  • PLAYER OPTION 2 - "That depends. What does it entail?"


  • PLAYER OPTION 3 - "Of course I'm interested!"

Simply put, this could be described as a Yes/No/Maybe option. The response to the "Maybe" would involve the NPC describing what he wants done, but we could also connect the same response to the "Yes", since the player will still need to know what's required from them. Now you might think "What's the point of two options that lead to the same outcome?". It's all about immersion, allowing the player to play their character in the style they imagine themselves. You can enhance the immersion further down the line by acknowledging how they responded by setting a variable on the "Yes" option, for example... imagine the NPC has now described the job...


NPC OPTION 1: (Variable check - Player said "Yes") "So that's it. Shouldn't be too difficult for a man of your enthusiasm."



  • PLAYER OPTION 1 - "Consider it done!"


  • PLAYER OPTION 2 - "Hmmm... on second thoughts, I'm not so sure I want to do it."

NPC OPTION 2: (Don't need to check variable, since convo will jump to this line if the player didn't say "Yes") "So that's all there is to it. Are you interested?"


Notice how we can still link from NPC option 2 to the player responses of NPC option 1? Actually that's not strictly true. I'd certainly paste as link the "Consider it done!" option, but would create a seperate "No" option that didn't include the phrase "on second thoughts" since the player has not previously said "Yes", but you get the idea.


ADVANCED TECHNIQUES


There are a number of ways you can make a conversation have more depth, and I'll cover some of them here.


Skill checks are a great way of altering the flow of a conversation, but did you know you can incorparate more than the two simple Success/failure responses? Here's an example of what I mean:


PLAYER: - *PERSUADE* "You sure I can't tempt you? I could throw in 100 gold to make it worth your while?"



  • NPC PERSUADE SUCCESS: - "Oh all right then, you twisted my arm."


  • NPC PERSUADE FAIL (If success doesn't fire convo jumps to this line, so we could place a text appears when script here to check if player has more than 700 gold) - "Are you kidding me?! By the looks of how your purse is bulging you could make a far more tempting offer!"


  • NPC PERSUADE FAIL WHILE PC CASH <700 (No need to check since convo will jump here if above 2 checks fail): - "Thanks for the offer, but I'll have to decline, sorry."

Another interesting option is henchman interaction. If you place a line of convo that belongs to your henchman and the henchman isn't present, the convo will simply move to the next available option, so your convo branching could look something like this:


PLAYER OPTION: - "Okay okay... how about 200 then?"



  • NPC (Henchman): - "Hey! Some of that money is meant for me!"

  • NPC (Owner (Will automatically fire if above line owner not present): - "Okay, it's a deal."


Journal entries can also provide interesting conditions for convo lines to fire, but things can get a little tricky if you want your journal to reflect convo choices. What might at first strike you as a simple accept/success/completion journal set can quickly multiply with different variations, and that it turn can complicate conditional scripts, which leads me nicely to my next point...


When pasting links from elesewhere in a conversation, make sure the branch you are pasting from doesn't contradict where you are pasting too, or you could find conversations abrubtly ending when you least expect it, or suddenly saying something that doesn't make sense.


Another concept you can use is to have scripts check for items that the player is wearing and alter conversations accordingly. For example, the wearing of a holy symbol might influence an NPC, or even the lack of one should the player be talking to a priest.


All of the above techniques exist in one form or another in "The Relbonian Chronicles", leading to what I hope many will find a rich role play experience.


That's all for now. I'm hoping to post some screen caps next time round. I the meantime, happy gaming all. :)

Saturday, May 02, 2009

A Deadly Bug

Some time ago... possibly last year, I explained the death system I wanted in chapter 1 to Lance Botelle, and he was kind enough to supply me with some scripts that would hopefully have it working. Technically, he did have it working, but... allow me to explain...

What this first module required was as follows:

  1. Up to a certain point (visiting a lighthouse), death would mean game over, with no respawn option. I felt that I could tie in some of the developing story into the respawn system to help make the story more immersive and death feel more real early on in the game.

  2. Once the lighthouse is reached, it becomes apparent that it's possible to return from death there for a limited amount of time owing to the lighthouse co-existing in Limbo (the plane that the dead travel upon - see accompanying pic). It does mean however that the player has to retrace his steps to where he died, but at least it's less frustrating than not being able to come back at all. So, after the lighthouse has been discovered, death should result in the player teleporting to Limbo, but able to return to the land of the living via the lighthouse.

  3. Later in the module, it becomes apparent that the lighthouse method can no longer be used because of how the story has developed, but another method becomes available in the form of soul crystals. As long as a player has some, he should be able to respawn on the spot.
Early testing of the system Lance had scripted for me looked positive. In case 1, the GUI panel appeared with no respawn option - great! In case 2, the player went to Limbo - woohoo!

Unfortunately I hadn't got around to testing case 3 until a couple of nights ago. While technically it did what I had asked for, respawned the player and removed a soul crystal, it did it in the same manner as case 2, in that no GUI panel came up. It just happened automatically. Now in case 2 I liked the fact that it did it like that. The first thing a player experiences when venturing to Limbo is disorientation. He asks where he is and has to be told he is dead. The fact that no GUI panel appears with the respawn option helps add to the feeling of "what just happened" when arriving in Limbo - perfect.

In contrast, case 3 didn't feel right at all. I wanted to have the GUI panel appear to give a sense of having died as opposed to looking like you'd just got up again after falling over, so I did a terrible thing... I got brave and started to tinker with it myself.

I discovered that the routine Lance had made rested exclusively within the "ondeath" script, so logically concluded I needed to transfer case 3 to the "onrespawn" script. That's when it all started to go horribly wrong. At first it wouldn't work at all, so I started tampering with it some more, and along the way all the logic got screwed up. Eventually I figured out that because I'd changed the script where the routine rested, my variable names were doomed from the start. Calling a target referred to as "odead" in a respawn script should have gave the game away early on really - doh!


So, I'd wasted a whole night screwing it all up, but the good news is that I managed to fix it after a couple of laborious hours tonight consulting the Lexicon. I'm glad I did though, because I discovered how to place text in the GUI panel (This is the article that helped me.). This has meant I've been able to improve on the immersion even more by using text relevant to the story instead of the standard random game hints that can appear. What this means is that by further editing of the "ondeath" script I now have messages appear in the GUI panel such as "You are currently unable to return to the land of the living." for case 1, and for case 3, either a message explaining that a Soul Crystal will be used for respawning, or that the player has no soul crystals remaining (with the respawn button vacant).

Please excuse me while I let out a small scream of elation ;)

WOOHOOO!


It's always great if you can solve something yourself :)

Monday, February 23, 2009

It's the little things that count

I've had quite a productive weekend, going in and polishing existing conversations. What's funny though is how much extra work one can make in the process. What was supposed to be a simple quest became much more complicated, with multiple tests slowly uncovering various bugs that required sorting. The good news is that I think I've ironed out all such problems which is always satisfying.

In the process of fine tuning I've enjoyed polishing the existing content with little touches which may well be missed in the finished product, but I believe such touches are worth applying simply because when they're not missed, they do so much more to enhance player immersion within the story.

The quest that I've finished isn't integral to the story, but it does add to the feeling of the town in which it takes place having events of its own, no matter how trivual. In this particular case it simply involves re-uniting a girl with her dolly. As such it has a relatively small xp reward on completion, but what's nice about it is that there are two possible "successful" outcomes, only one of which involves an item being given to the player as a reward. I love creating items, and am a firm believer that everything within the world having a plausible reason for existing, no matter what powers they may bestow upon the user of such items. Fortunately for me the "Relbonian Chronicles" have a rich mythology for me to draw from, but I like to give the same level of detail to all my items, no matter how mundane they appear to be. In the case of the dolly quest, I needed to create the dolly and a reward from the girl. Although I'm not going to reveal here how the reward is required, I will show the item details to give you an idea of the attention I'm giving to the module:

Dolly
A crude dolly made from sewn linen stuffed with sand. Popular among Relbonian girls. This one is oviously much loved, made evident from the sand seeping from the seams.

Bangles
Although nothing more than cheap jewellry for a child, these bangles are far more significant to you, being a gift from the charming girl Milly from the town of Oasis. Simply looking at them fills you with a sense of pride for making the young girl happy, and does wonders for helping your mind stay focused.

They are of great sentimental value and can never be parted with.

Saving Throw Bonus: Mind Affecting +3
Use Limitation: Alignment Group: Good

In the case of the bangles above, I've made them undroppable to tie in with the description. Not only that, but it also prevents the player from selling them which would make them far too valuable for a gift from a girl. I like the fact that the description implies they are non magical, yet also gives a reason for the benefit of wearing them.

As well as paying attention to items, I also like to pay attention to the environment. As an example, there's a tower in Oasis that has two floors. The tileset used has a doorway in the circular room as well as the stairs, so for the upper floor I needed to disguise the door somehow, as there was no reason for it to exist. Thanks to the latest content from the 1.69 update, I used the canvas door which doubles as excellent curtains that can be opened and closed with accompanying sound effects. Just behind them I've placed a large window. While the solution looked nice, I felt it deserved more, so attached a script on their "OnOpen" that has a nearby NPC comment on the excellent view.

That's all the news for now. Happy buiding all! :)

Friday, February 06, 2009

Quillfumbler

First off, as some of you may know, I've been restricted to using my laptop of late, one of the disadvantages of which is that I have to remember to press quite firmly on the "B" key, otherwise the headline of this article would have been "Quillfumler". As a result, I must apologise for any errors in my typing. All the more reason I think I should release a beta for any wannabe spell checkers ;)

There are times where I've regretted choosing the handle "Quillmaster" for precisely the above reason. People have high expectations from a "Quillmaster", and having articles with spelling mistakes doesn't really paint a good picture of what to expect. It's not just spelling mistakes. My earliest module was hardly a masterpiece by any stretch of the imagination.

So why did I choose "Quillmaster"? Simply because I thought it eluded to my "Dungeon Master" background, and of course it was the name of my play by mail game on which "The Relbonian Chronicles" has been based upon.

Even until recently, my early Neverwinter creations have relied heavily on Lilac Souls Script Generator, as I had no scripting knowledge whatsoever. It's been a real blessing to me, as over the years I've began to recognise how parts of the scripts work, to the point where I occasionally got brave and further tinkered with them. With "The Relbonian Chronicles" I've managed to take things a step further still, by taking the time to visit the Lexicon in my quest to achieve something that the script generator can't create. So, if any of you have sampled a past creation of mine, rest assured that (apologies for blowing own trumpet) this one is soooooo much better!

On the subject of scripts, I had a" Eureka" moment earlier (they can be sooooo satisfying - lol). One of my pet hates in a module is... tell you what... I'll quote the line I saw on the very Lexicon page I found my solution:

"A VERY useful function if you want to add some realism to your modules. Personally, I dislike knowing that "oh, so that's where the bad guy is because that's where the map pin is", even if I don't look at the map pin's caption."

The subject is of course "Map Pins". I like a map to denote points of interest to help you find your way around, but I don't like to see things I shouldn't know about. The command "SetMapPinEnabled" is a useful way of preventing such a situation occuring. Simply place your map note waypoint, right click on it, and under the advanced tab un-check the "Map Note Enabled" box. If you test the module you'll notice the map pin doesn't display on the players map. Back in the toolkit, you can place the below script in a conversation node under "actions taken" to enable the map pin.


So how might you use the above code? In the instance listed above it's simply used when an NPC mentions a location and points out where it is. When the player enters the relevant area (it needn't be the same as where the conversation occured), they find that the map pin is now visible. Cool eh?

I'd like to say to any novice scripters out there don't give up. Let each victory no matter how small inspire you to step that little bit further :) Even if you think you can't script, check out the script generator and get into the habit of searching the Lexicon.

Now you'll have to excuse me, I have some map pins to disable ;)

Monday, August 25, 2008

The Evolution of an Idea

Things are going well. In fact I'm pleased to say that a combat section of the module actually has tactics involved that will make the players life easier if they take advantage of a situation.

Although I had the basic concept, story and layout pretty much pre-planned, I like to ad-lib on occasion as I can sometimes find inspiration that way. The combat area I have almost completed evolved that way, so I thought I'd provide the thought process here in case it inspires others.

An important thing to keep in mind when building is that everything should either have a purpose or reason for being present, or sometimes both. Such attention to detail can add to the immersiveness of a module and helps to enrich the story you are trying to tell. "The Relbonian Chronicles - Chapter One" had got to a stage where I needed to populate an area with combatants. The going was at first slow, as I found myself uninspired by the population process. For a module that (in my humble opinion) has a rich story, I couldn't help feel that the area I was working on felt a little dull in comparison to what had preceeded it. Desperate to try an add some "soul" to the area, I find myself turning to seeing what I could decorate the area with, and found something that fit very well aesthetically but needed an explanation for being present in order not to feel out of place (Apologies for not being very specific but I don't want to make too much of a spoiler for this). Remembering a previous "journal" the player would more than likely find, I concocted such an explanation, and in doing so, thought to myself "Hang on a minute, I could have this work in the players favour."

One script later, I discovered my plan was a feasable one, although I did require help from community member Axe Murderer so I could polish the script in order that it functioned as intended (Thanks Axe!). Suddenly my area was much more interesting, and to make it even better, I could introduce another creature to the area that -

1/ Was immune to the tactical advantage available to the player against the other foes present, and...

2/ Could slow down the player being able to use the advantage against the other foes present.

It's funny, but having got to that stage, working on the area has increased in speed, no doubt as a direct result of feeling more inspired. An initial test left me thinking it would be VERY difficult to complete without taking advantage of the tactic available. Using the tactic isn't exactly easy due to the immune foes, but it does make it a lot easier than not using it at all.

That's all for now. I might be taking a break from building soon as the father-in-law is unwell.

Sunday, June 01, 2008

Conversations

Yes, I'm still here! Things have slowed a little now I've been concentrating on a conversation file, so I thought that would be as good a subject as any to post some tips here and convince you all that work was still taking place.
A thing I see often asked is how to make an NPC know if they've been spoken to before. While it's a fairly simple process to just set a variable and check for it, if you apply this to every conversation you have you'll soon be drowning in scripts and variables. Fortunately there is a way round this that can have the same scripts work for any conversation. It's a very useful method but for the life of me I can't remember where I saw it originally applied, so if these scripts were your invention, drop me a line and I'll give you full credit for them.
Basically there are 2 scripts that both need to be attached to the very first line of conversation possible with any given NPC, so for example, the first time a player converses with a shop keeper, the opening line might be "Can I help you?", whereas a second visit might earn the response "Oh hello again sir/madam. Couldn't keep you away eh?". To achieve this, the following script needs to be attached to the "Text Appears When" event:

//SCRIPT TO PUT ON TEXT APPEARS WHEN OF
//THE FIRST LINE
//- THE ONE THAT SHOULD ONLY BE SPOKEN
//ONCE
//NOTE, THAT LINE MUST HAVE A REPLY, IF ONLY
//AN END DIALOG!
int StartingConditional()
{
object oPC=GetPCSpeaker();
string sTag=GetTag(OBJECT_SELF);
return (GetLocalInt(oPC, sTag)==0);
//only returns true when variable is 0
}

Using the same line of conversation, the following script is attached to the "Actions Taken" event:

//PUT THIS ON ACTION TAKEN OF THE SAME LINE
void main()
{
object oPC=GetPCSpeaker();
string sTag=GetTag(OBJECT_SELF);
SetLocalInt(oPC, sTag, 1);
}


That's it! The same two scripts can be used for all your conversations with no need to create new ones for every NPC.
It's worth noting that there are other methods of controlling what lines of conversation get displayed when activated. The "Text Appears When" tab can be used for pretty much any conditional you care to think of. If for example you want an opening line that says "I'm sorry, you'll have to put your weapon away if you expect me to talk to you", then all you need is a script that checks to see if the speaker is armed. The following script does exactly that:

#include "x2_inc_itemprop"
int StartingConditional()
{
object oPlayer = GetPCSpeaker();
object WeaponRH = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPlayer);
object WeaponLH = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPlayer);
if(IPGetIsMeleeWeapon(WeaponRH) == TRUE GetWeaponRanged(WeaponRH) == TRUE IPGetIsMeleeWeapon(WeaponLH) == TRUE GetWeaponRanged(WeaponLH) == TRUE){return TRUE;
}
return FALSE;
}

Journal entries can also be used as conditionals. The following script checks to see if the journal entry has been started (ie-is set to 1 or greater). If it has, then the line of conversation is ignored, if not, then it is used:

int StartingConditional()
{
object oPC = GetPCSpeaker();
int nInt;
nInt=GetLocalInt(oPC, "NW_JOURNAL_ENTRYyour_journal_name_here");
if (nInt >= 1) return FALSE;
return TRUE;
}


For a conversation to come across as more polished, there are a couple of other tricks you can use which don't even rely on scripts. The first method is to study the lines you've used and consider if an animation would help portray what is being said. If you look under the "Other Actions" tab you'll see a pull down menu with various animation options.
The other method involves a lot more work but can be very satisfying when used well, and that's using the addition of sound. You'll find the sound options under the same tab as the animation options. It does require a little work on your behalf however as you'll need to figure out what the various sound files for the voiceset of your NPC are called. Fortunately life is made a little easier in this respect thanks to some community work over on Neverwinter Vault, where you can find a descriptive list of the various voice sets available. You can use this list to find the file names of the voicesets you have assigned to your NPC, and once you know the filename you should be able to find different responses you can use in the required voice, such as laughter or a simple "Yes". Sometimes, if you're really lucky, you might even find a line of speech from the official campaigns that suits your needs, or even inspires you to take a plot in a new direction.

That's all I'm going to cover for now. Before I go however I'm pleased to announce that I have acquired some webspace, so hope to have my old roleplay related site back online soon. I'm currently contemplating how to lay it out, as some of the old content will be made redundant by what this blog covers.

Bye for now and happy building! :)

Monday, April 14, 2008

Immersing the Player

The Relbonian Chronicles is a story, and as a story it's important to immerse the player within it if they are to truly enjoy the experience. One of the methods I'm employing to achieve this is to have the character interact with their environment. It's a fairly easy method to employ, involving little more than triggers in the areas where you want a character to make a comment. Such comments can be scripted so that they only occur once.

For those of you wondering how to do it, here's a simple script that will have the player character say something when they enter the trigger area for the first time by placing the script in the "on enter" area of the trigger. Alternatively, instead of using a trigger, you can also place the script in the "on enter" of an area, although I'd advise you build in a delay so that the comment gets noticed.

//Put this script OnEnter
void main()
{
object oPC = GetEnteringObject();
if (!GetIsPC(oPC)) return;
int DoOnce = GetLocalInt(OBJECT_SELF, GetTag(OBJECT_SELF));
if (DoOnce==TRUE) return;
SetLocalInt(OBJECT_SELF, GetTag(OBJECT_SELF), TRUE);
AssignCommand(oPC, ActionSpeakString("Line spoken here."));
}

Pretty simple, and easily effective depending on how you use it. Here's some example statements that could be used to give you some ideas:

On getting close to a corpse that's hidden from view - "What's that awful smell?!"
On approaching a statue - "That's beautiful!"
A Dwarf moving through a cave - "Hmmm...feels to me like there's a slight incline here."
Walking on a beach - "Ah...there's nothing I like more than feeling the sea breeze against my face."
On hearing a noise (which could be played via the same "on enter" script with a delay before the comment) - "What was that?"

These are only examples, but should enable you to see how you can take that extra step in making your module more immersive.

Stay tuned for an update on Chronicle progress soon. :)

Saturday, March 15, 2008

The Art of Storytelling

Telling a good story in Neverwinter Nights can sometimes be overtaken by the requirement to include quests, otherwise, how is the player to progress? If care isn't taken. quests can suffer from feeling out of place with the story, something that can happen for a number of reasons. Take a non-linear adventure for example. In order to make the module feel free and unrestricted, a quest creator can suddenly find himself making quests that have nothing to do with the main story, and this can have a detrimental effect on immersing the player into the story.

While the "Relbonian Chronicles" will ultimately be linear, the nature of the unfolding story is such that quests are required between accepting and completing the main quest to give the player minor goals before his ultimate goal. The very nature of the main goal means that the minor quests would appear to have nothing to do with the main, so how do we keep the player immersed in the story? This isn't as difficult as one would first imagine. Allow me to explain.

Behind every module should be a main plot, the completion of which will end the adventure. While anything done on route might not be connected or even nescesary, we can tie them together in other ways so that the player is further immersed in their story. Let's take a very basic idea as an example. The player is hired to slay a Dragon that lives in a cave somewhere in the mountains. An obvious side quest might include stumbling across a burning village shortly after the Dragon has attacked it and helping to put out the fires, but what I'm trying to do is include more subtle links, making the player aware that they are part of something bigger without thrusting such obvious quests in their faces. Better to have them stumble across something which on first glance seems to be unconnected. So, in the above Dragon scenario, perhaps they find a farmer who asks for help thatching the roof of his cottage. Simple enough, just collect some materials for him, but if pressed on how the roof became damaged, the farmer blushes and seems reluctant to explain. On further pressing, he'd eventually reveal a cow fell through from the sky in the middle of the night (having been dropped by the Dragon in flight). Better still, he blames some old crone who lives on the next farm, believing she is guilty of witchcraft. Think of the consequences of what's going on in the gameworld and how you can tie quests into it. Perhaps the player encounters a caravan of evacuees fleeing their village through fear of a Dragon attack. The wagon has broken down and the villagers need help fixing it. How about why the Dragon has become enraged in the first place? Has someone in the village suddenly become wealthy through raiding the Dragon lair? Is there a new merchant in town selling suspiciously large eggs?

Okay, so this is a bit basic, but you can see what I'm driving at. If you've frequented these pages before, you probably already know that the main quest in part one of the "Chronicles" involves the God of Death sending the player to a certain location. The main difficulty I faced here was creating things to do on the journey. Initially they should appear to have nothing to do with why the God of Death has sent the player on a mission, which brings a new problem...would the player want to do some irrelevant task while on a mission set by a God? Rather than shy away from the problem, one should think about how acceptance/refusal to do a quest might influence the story, thus further enhancing the feeling of being involved in a bigger picture.

While "The Relbonian Chronicles" are ultimately linear, there are still options to take which can influence what happens around the player. One such example is a reward from the God of Death can differ depending on how the God views the player character, and this can be influenced by both conversation choices and quests undertaken. It's not yet fully implemented, but I mention it here as an example of further enhancing a storyline. I'd love to go into more detail, but don't want too many spoilers on this page, so you'll just have to play it when complete ;) Unfortunately progress is still slow owing to some bad news within the family, but rest assured it is something I intend to complete.

That's all for now. Stay tuned ;)

Tuesday, October 16, 2007

Books

Before I commence with the topic of this post, I should point out that the script shown in my last post entitled "Busy busy busy!" isn't shown as intended. There appears to be an error in the blog publishing software that removes certain characters. To view the script as intended, please refer to the comments left after the article, where Lance Botelle has been kind enough to show the script in its entirety.

Now, where was I? Ah yes, books. Books can add much to the atmosphere of a module and are often overlooked by builders. As Relbonia has a unique background and mythology, the importance of books is even higher than normal, requiring me to remove any reference to the default books and replace them with tomes of my own creation.

Books can fall into a variety of categories, sometimes requiring a different style in how they are written. For example, a book that simply covers a subject would just contain the actual content, possibly with a by line containing the name of the author to help add flavour, while a book significant to the plot might have a paragraph prior to actual content describing something else of importance.

The problem with books that just give a little background on your setting is that they can quickly become boring to the player, who may eventually decide that they simply aren't worth reading (a crime I myself committed in the original game), but how can one go about sprucing them up a little? A technique I try to employ is to give them something that not only adds flavour to your setting, but is also interesting to read, with the inclusion of information that may prove useful to the player elsewhere in your game.

As well as placing books within my module that discuss the mythology of Relbonia (which can also be read in this very blog), I shall also be including tomes that throw further light on the mythology in an indirect fashion. I've decided to post a few examples here to illustrate my ideas, and give you all a further taste of the world in which "The Relbonian Chronicles" are set:


THE FAVOURED OF MOYBALLACK

Other than the Ancients themselves, the Lith are regarded as the oldest race in all Relbonia. Indeed, some scholars openly debate that they are the race from which all other races derived, hence they are sometimes referred to as "The Old Ones".
Thought to have been created by Moyballack, it should come as no surprise that they originated from the sea and only later moved to the swamplands that they now favour.

They tend to keep to themselves, particularly as most other races regard them with low esteem due to their smell and repugnant nature. Over the years they have had a particularly hard time, gradually being shunned by those who fear them in their ignorance. While it is true to say that their slimy scaled skin and large soulless eyes give them a rather hostile appearance, most Lith are in fact reclusive in nature and quite prepared to leave the world to its' own devices. The only exceptions to this are usually the result of those who have been set upon, as they are very proud of the fact that they can be considered as original stock, and can be easily riled by what in their eyes are little more than egotistical inferior races.

Many Lith are known to follow the path of Mouys.


THE RELBONIAN CHRONICLES

The Relbonian Chronicles have been an important part of Relbonian society for many years, keeping citizens informed of news and events throughout the land, while helping to spread both faith and education to the far corners of the continent. Indeed, were it not for the Chronicle, many Relbonians would probably still lack the ability to read.

Laboriously penned by Druids in their great halls, they are sold as a means of funding for the Druid Temples.

News is spread via a network of both writers and runners, or in some cases even carrier pidgeons, although runners are considered more reliable, particularly as they tend to consist of apprentice Druids eager to impress their masters. When a runner reaches their destination, news is quickly copied so that the scribes there have a master to work from, then a fresh runner proceeds to the next destination. In favourable conditions, news has been known to span the continent in under a week.

It is now seen as a valuable commodity to the realm, allowing businesses to thrive by advertising their services in their own regional versions of the Chronicle. It is also highly favoured by the Faith Council which see it as a useful tool to maintain law and order throughout the realm.


THE EYES OF DARROK

"The Eyes of Darrok" are crystalised earth, thought to have been formed in the hands of Darrok himself.

The God of Rathna is said to have once materialised at Mad Mount to reward a Dwarf by the name of Tabanash Koovarn. As a show of gratitude for the kindness Tabanash had shown the earth, Darrok scooped some soil into his rock like hands and lifted it to his face, cupping his hands in the process. As he blew into the soil, he crushed it within his grasp, capturing the magical essence of his breath. When he unclasped his hands, a glowing gem was revealed which he then gave to Tabanash.

It should be said that while the story sounds authentic, Tabanash is generally regarded as quite mad, claiming himself to be a mighty Sorceror. Having said that, it may of course be the gem itself that grants him the power to make this claim.

There are many varieties of these gems that vary in size and function. Their most common form provides light, with the largest often used by lighthouses along the more treacherous coastlines of Relbonia. It is said that a stone such as this was broken into the smaller stones sometimes found in jewelry.


That's it for now. Watch this space for the next update installment, where I hope to go into more detail for the intended player characters.

Thursday, October 11, 2007

Busy busy busy!

Well... I've been away for a while, Cornwall to be precise, land of legends... oh... and of course clotted cream and pasties... mmmmm.

While I've been gone, two playtesters have got back to me with some very encouraging feedback. I know that sounds a bit like I'm blowing my own trumpet, but I should point out that one of them did some extensive testing (setting out to break it in fact), and discovered a few problems that needed ironing out. I'd like to take this opportunity to offer my good friend PixelKnight my sincerest gratitude for finding time in his busy schedule to provide such valuable feedback to me, without which, an opportunity to further improve the work done so far would have been missed. Thanks PixelKnight! I should also of course thank my other tester, Nulthra Bloodeye, who provided further encouragement in his feedback.

Most of the flaws have been minor issues very easily corrected, but easily missed too, otherwise I would have spotted them myself much earlier. A fresh pair of eyes going over your work is a valuable asset not to be under rated.

One of the issues raised by PixelKnight was that for a story driven module, he was surprised that there was no reaction to his carrying of a weapon in the introductory area of the city of Kerral, particularly near the docks where the local militia have set up a blockade. It is something I did dwell over, but I was concerned in bogging myself down in too much detail, especially when aiming the module at an audience that didn't like to just run around and hit things. He does however have a valid point, so I've decided to compromise. Rather than have guards run up to you whenever you draw a weapon, I've placed a script on opening lines of conversation under the "Text Appears When" tab, so that people refuse to speak to you (or at the very least react differently) if you have a weapon equipped. I had a bit of a problem setting this up initially, as Lilac Souls Script Generator (which I rely on quite heavily at times) would only generate a script that catered to a specific weapon being equipped, and I had trouble finding the relevant code needed from the Lexicon site. Fortunately for me, I was able to call on the services of Lance Botelle, another Neverwinter Nights fan who I recently discovered lives only a twenty minute drive away from me! He was kind enough to provide the following solution:

#include "x2_inc_itemprop"

int StartingConditional()
{object oPlayer = GetPCSpeaker();
object WeaponRH = GetItemInSlot
(INVENTORY_SLOT_RIGHTHAND, oPlayer);
object WeaponLH = GetItemInSlot
(INVENTORY_SLOT_LEFTHAND, oPlayer);

if(IPGetIsMeleeWeapon(WeaponRH) == TRUE
GetWeaponRanged(WeaponRH) == TRUE
IPGetIsMeleeWeapon(WeaponLH) == TRUE
GetWeaponRanged(WeaponLH) == TRUE){return TRUE;}
return FALSE;
}

Basically, by placing the above script in the "Text Appears When" section of the first line of a conversation, you'll make the attached line of conversation only be spoken if a weapon is equipped, so it's perfect for a line such as "If you think I'm gonna talk to you while you've a weapon drawn, think again!"

Apart from ironing out the creases spotted by my testers, I've not done much else to the mod at the moment, partly because I wanted to perfect what had been done to date, and partly because of some artwork I've been working on. I've recently finished a horse portrait which I hope to host over at my DeviantArt page within the next day or two, and am about two thirds of the way through an ink drawing that I promised to Nereng (Hang on in there Nereng! It's coming, I promise!). Maybe I'll host that one here once it's done if Nereng has no objections.

That's it for the time being. I hope to have finished the ironing phase within the next week or two, then I can push on with getting past the main intro into the heart of the module, although I might have to consider finishing the haks first so that the magic changes are in place, but more about that later ;)

Bye all, and thanks for watching. :)

Thursday, September 13, 2007

Oh no! I've gaught a gold!

The headline to this article is in fact telling you I've caught a cold. My nose is blocked as I type this sucking on one of those disgusting menthol sweets that sucks the life out of you. I figured it was about time I posted an updqate, and funnily enough, my jokey title links to one of the things I'm doing in my module.

Conversations are an often overlooked opportunity in NWN to further enhance the feeling of playing in another world. I've a fair few conversations finished at the moment, and many of them differ in their style of writing. It's important to do this in order to have NPCs feel like individual characters, as opposed to something plucked from a template.

That's all well and good, but how do you make conversations feel different? Some of you may be familiar with having alternate conversation branches dependent on the intelligence of the PC. What's to stop you switching things round? What I mean is, why have all your NPCs of equal intelligence? Throw in a dumb one, and instantly you have someone with a more unique style of speech...

NPC: 'eh?
PC: Do you know where I can get advice on conversation styles?
NPC: 'eh?
PC: Conversation styles... you know... like what that Quillmaster fellow was talking about on his blog.
NPC: Blog? I'm afraid I ain't got a clue what you're talkin' about man/woman.

"Shortenin' words is a good way o' portrayin' someone 'oo ain't 'ad the benefit of an education. You gotta be careful that the words you use aren't too big an' clever for the person usin' 'em."

So, we can see that the manner in which we write can help, but what other methods can we use? Maybe a speech empidement, such as a lisp...

NPC: Can I help you thir/madam?
PC: Er... yes please. I'd like to buy a shield
NPC: A thield?
PC: Er... no, a shield.
NPC: Thatth what I thaid ithn't it?

Think of the characters you are typing for. A Bard would be flowery, especially toward the opposite sex. A Paladin precise with few wasted words. A Sorceror might babble occasionally. It's not just characters, but monsters too. Ever considered how a Goblin might talk?...

NPC: What pigman wont?
PC: Stand asside! I'm trying to finish reading this article!
NPC: Me say tuff, me here first, me wont wead it first!
PC: Then you leave me no choice!
NPC: Bah! You pigmen all same!

Careful selection of the voiceset used can also further enhance how memorable a conversation will be. Neverwinter Vault holds a document that lists the soundset filenames with a brief description of each set. Once you've identified the filename, you can use other sounds from the set by playing them at the relevant conversation nodes. Simply select the "Other Actions" tab at the bottom right of the conversation editor, where you'll find a pulldown menu to select the sounds to play.

Well, that's it for today. I have been trying to movie capture my first cutscene, but haven't had any luck with the software I'm using, so my hopes of using YouTube are fading fast. The good news however is that I've completed work on the second cutscene which is quite complex. I'm pleased with the overall effect of the pitching camera during the scene, which adds much to the effect of feeling like you're at sea on board a ship.

Right, I'm off for a Lemsip now. I might put up some in-game screen caps soon.
Cheerio and happy gaming. :)

Sunday, August 19, 2007

The Art of Placement

You'll be surprised at what you can build in NWN1, particularly with imaginative use of how you place objects. Such things should be given careful consideration if your module is to look fresh to those that play.

Fortunately there is a much under used tool available that's been a real boon to me since I discovered it. Truth be told, I knew it was possible for a while, just didn't know how simple it was to call it up.

For those of you wondering what tool I'm talking about, have you ever placed an object on a table, then gone back to it later on, left clicked to select it, then discover it's fallen through to the floor? Perhaps, like me, you just destroyed the object and placed a new one on the table? Well, that can get a bit tiresome at times, but what's especially nice about this tool is it can be used to help you place anything, so, if for example you've grown tired of paintings always being a default height on the wall, you can use it to adjust the height.

I am of course talking about the "Adjust Location" tool, accessable by right clicking on any placeable then selecting "Adjust Location". There... that wasn't too difficult now was it? ;) Use this tool to bring up the details of an objects location, and alter the numbers to adjust it accordingly. Ever placed a papersheet on a rug, then become frustrated because the rug blocks out the papersheet? Simply adjust the height of the papersheet so it's .01 higher than the rug then presto! All is revealed! The same technique can be used on adjoining objects to stop that flickering you sometimes get in game.

I might post some example screen caps of the type of thing I mean when I give my next update on how Chapter 1 is coming along, so watch this space. :)

Friday, August 10, 2007

Effective Use of Sound Effects

If there's one thing that bugs me, it's a module let down by poor use of sound effects. I think sound placement is a major factor in helping immerse the player into the world you're trying to build for them, and I'm not just talking about the ambient sounds you select under area properties.

Placed sound effects can make a huge difference in making your module feel alive, but they can be far more powerful than simply placing them where you think sound should be present. Okay, I admit that for a majority of sounds that's all that's required, after all, a waterfall for example is pretty much going to be constant and not likely to change position.

It seems that some people miss the opportunity to customise their sounds. If you go to sound properties and click on the advanced tab, you'll see a number of options that determine when the sound is played, such as play all the time/day only/night only/specific hours. It's a good idea to make copies of the master sounds if you're going to tinker with them, particularly as it enables you to select them from the custom sound menu for later use. So how can we make use of the above options? That all depends on the type of sound you're placing, so here are a few examples that I've dealt with in the past:

Day Only
  • Seagulls - They rarely cry out at night. Making them day only makes ports feel more alive during the day.
  • Crowd Noises - Even if you want them all the time, make two versions, with the daytime one being louder than the nightime one.

Night Only

  • Frogs - Place near a pond. They're much louder at night.
  • Owls - A little obvious perhaps.

Specific Hours

  • Bells - If placed by something that resembles a bell tower, have them play at 9am, 12am, 3pm, 6pm, and 9pm. They help inform the community of the time, and players will soon realise they don't play all of the time.
  • Cockeral - Have this one play the same hour that your module has designated as morning.

The above are perhaps a little obvious, but you'll be surprised at how much more alive your module will feel.

Another trick is in the placement of them. If you have a city dock where seagull can be heard, make a copy a little less loud, and place it beside doors or windows in interior areas accessed via the dock area. It really helps create the illusion that the worls is still going on outside.

If you want to go a little more advanced, there's always the option of having sounds fired by script. If scripting scares you, fear not, for it doesn't get much easier than this. Let's say for example that on boarding a ship and talking to the captain, the captain says something along the lines of "We're departing now, raise the anchor." It would be pretty neat to have something that sounded like the anchor being raised at that point. First, we have to find a sound that suits the purpose. If you look under the civilisation category in your sound list, you'll find "Crank Creaks Large" which pretty much fits the bill. Make a copy of it, and change the tag name to "raise_anchor". Now, place the sound where you want it to be played, then right click on it and select "properties". Under the "Advanced" tab we need to change the play style to "Once only", otherwise it'll sound like they're forever raising the anchor, and we also need to make the sound inactive so that it will only play when we activate it via script. Got that? Good. Calling it from script is pretty easy. If we go back to our conversation where we want to activate it from, we can click on the "Actions Taken" tab of a conversation mode and build the following script:

void main()
{
object oPC = GetPCSpeaker();
object oTarget;
oTarget = GetObjectByTag("raise_anchor");
DelayCommand(5.0, SoundObjectPlay(oTarget));
}

The delay command gives a five second delay before the sound is actually played.

Of course, there is an even simpler way, and that's to click on the "Other Actions" tab of a conversation node, and select the sound you want played under "Play Sound". The advantage of this method is that you don't have to physically place the inactive sound in your area, while the dowside is you have to know what your sound file is called (although you can get round that by looking it up in the properties of a placed sound). To be honest, for something this simple I'd probably opt for the latter, but the above code can be a handy thing to know if you're starting to dabble with scripting.

That's it for now. Hope this article has been of use to someone :)