Monday, August 11, 2008

Toolset Tidbit: Quality Assurance

I've been taking a little time out recently to do a little bit of QA testing and general tweaking of various issues. When I first started Fate of a City, my development was very much "test-as-you-go", in that I'd make changes, go in game, test them out, and then correct as necessary. Now, I've switched to a fairly solid workflow of writing out a quest or a sequence in its entirety before running a playtest, during which time I review the dialogs and scripts, then playtest numerous times trying different options and following different choices (of action and dialog). While I'm finding the latter more efficient at the current time, the former does have its uses depending on circumstances.

Testing-you-go is useful at a few times. For one, if you're doing a complicated script sequence, then it potentially can be better to break up your testing into parts and test each one individually. This is particularly good for multi-part scripts - as you can divide the script up for testing purposes, test each separate part for any bugs, and then once each component works correctly, combine the scripts together for a final test. Make sure you do that final test, as without that, you've got no guarantee you haven't got some weird dependency that can cause strange script behaviour. If you're a beginner scripter, I strongly recommend trying things repeatedly, as if you try and script everything at once and then go in for a final test, you can end up with some really strange behaviour that can be impossible to debug. I must admit, I was guilty over doing too much without scripting before testing when I first started, as coming from a programming background, I was comfortable with my logic - but that doesn't necessarily translate to the nuances of NWN scripting.

Once you're more comfortable with the toolset and scripting and you've got a comfortable workflow, you'll find that you can create rather complex sequences without getting in there and testing first, which can potentially can save you time. But again, if you're finding that something doesn't work, don't be afraid to break it down into something more simple to debug it - or alternatively ask one of the helpful people on the forums or #nwn2-cr for advice on how to fix the problem!

I will share one useful tidbit I've got into the habit of doing for making sure that conversations work properly. Firstly, in most conversations, make sure you have a specific blue node (ie PC line) with the line [End Dialog] to end conversations. The first benefit to this is that it avoids the "[Continue]" text in dialogs that will actually result in the conversation stopping. Small details like this bug me as a player, and while you might call me pedantic, there is a very good reason as a builder that I like doing this, if you'll bear with me. Most "[End Dialog]" nodes will not contain any scripted actions, and indeed I try and avoid them wherever possible - sticking actions on the previous speaker node if I can. In addition, whenever I have a node that ends the conversation, I try and link to a single "[End Dialog]" node within the conversation. All this applies to NWN1 style conversations - for NWN2 style cutscene dialogs simply have two empty nodes to mark the end of a conversation - one blue and one red. A thought I've just had now is that if you really want, you could put "{End Dialog}" as the text of the red node to indicate to you the purpose without displaying anything to the player.

Now I understand you might be asking "Why?". The answer is simple. When you've finished writing your conversation, widen your dialog window so that the "Text" column of the dialog window ends the screen. Now, if everything isn't already expanded, then hit "Expand all" button. At this point, scroll down through your dialog and look for any node that doesn't have a grey line underneath it. Any such line is a potential problem - as it indicates a conversation end. Virtually every line should have a grey line underneath it, either linking to another conversation node, or the "[End Dialog]" node that you created earlier. Obviously there will be some exceptions, for example, if the player ends the dialog e.g. a blue node labelled "Goodbye.", or perhaps a dialog node that results in some other unusual action occuring - e.g. an area transition, the NPC attacking, some type of scripting sequence, etc, etc.

This technique makes debugging conversations far quicker at a cursory level, and avoids any missing links in complex, branching conversations that can easily get out of hand for builders. While it won't solve all your problems, it's definitely something I've found useful.

That aside, I've been working on quality assurance in the graphical/aesthetic department as well, tweaking lighting, texturing, sounds and general decor just to make sure that the atmosphere and visual appearance is achieving the effects that I was originally trying for i.e. - what I have written down in my design document! To that end, I've created another swag of screenshots for people's perusal just to give a big more of an indication of the minor tweaks that I've been working on.


Some of the differences might be minor, and of course, the sound modifications can't be conveyed via screenshots, but rest assured that the variable rain is accompanied by appropriate sounds. Now, if only there was some way to modify exterior lighting via scripting...


Of course, no testing is without annoyances... One such annoyance is using the MotB rest system - in that I've copied the scripts over from MotB for the major module events, yet when I rest in my module, I still get two messages sent to the player indicating the rest has been started and canceled when the rest window pops up. If anyone has experienced the same behaviour (or even if they haven't!), then I'd love to hear from you. I really would, and doubly so if you have an idea of what's going on! :-)

4 comments:

Wyrin said...

interesting post

there is a flag in the campaign editor which you can check to supress rest messages - I haven't played with it tho, so I can;t attest as to what it does....

Lance Botelle (Bard of Althéa) said...

Hi AmstradHero,

I have been lookng over a few bloggers of late and was pleased to be able you to my own list of fellow bloggers. :)

I go with the "do a little, then test" mostly, as I am finding NWN2 does things a little differently to what I expected. Sometimes I brave it out a bit longer before testing ... it all depends on the testing matter. :)

I hope to get to read some of your earlier posts at a later time, and become a reguler reader. So, I may catch up again with you soon.

I like the look of your work. :)

Lance.

AmstradHero said...

I should thank you for pointing me in the right direction, Wyrin. Very useful tidbit indeed! :)

Glad you found the post interesting, and hope it's of some use.

Lance: Thanks! I took a look at your blog as well, and you've got some interesting things there - looks like I just found more regular reading material!

Lance Botelle (Bard of Althéa) said...

Hi again,

I left a comment to an earlier post regarding your invisible PC.

And I can confirm that you can supress text messages on resting from the Campaign Editor. (I do the same for my own rest system.)

Lance.