Choose Your Language

Thursday, 27 March 2008

Monster Drops & Distillables

Before I cover what I have been doing today, I just want to report that D&D was cancelled this week due to one player suffering from ill health. Therefore, the second part of Soul Shaker will have to wait until 2nd April now, when, hopefully, all will be well for the next stage of the adventure.

Anyway, now that I have finished writing the XML tutorial, I am able to turn my attention back to the campaign proper and continue developing the system for the new era - and today I have been taking a closer look at the crafting system, especially with respect to monster drops that can be distilled to create the essences.

In my examination of the current system, I have found that "distillable" drops do not appear to be as well automated as I first thought they would be. I thought they were all controlled via a "crafting system" that checked against a 2da file when the monster was killed, which in turn made a distillable item be dropped. This, however, is not the case. It seems the current official way to allocate distillable monster objects is to place them directly on the creature's inventory ready for when they die. This appears very inefficient to me and so I spent some time today adding an extra OnDeath script to the monsters so that a distillable object would be created with the body of the monster if certain criteria are met ... including ensuring that at least one member of the player's PCs has an alchemy skill of note. (Four points or greater.)

The new system works fine, although I still need to tweak it a bit to ensure it works as I like, including varying the chance of drop according to the PC's skill and only making certain items available at certain times. Overall though, the system appears far better structured and automated than the official version currently in place, and will, hopefully, be more versatile by the time I have finished it. The only thing a builder has to do to ensure the system works is to ensure the creature that can make a drop has a variable set on it at build time, which is easier to do than placing an item within their inventory anyway.

Tuesday, 25 March 2008

The NWN2 XML & GUI Tutorial

I have finished tidying up the last few sections of the PDF manual for the "NWN2 XML & GUI Coding for Beginners" today and having made one last check of the demo module that supports it, I will now upload it to the Vault. As soon as the link to it becomes available, I will attach a link to the left pane of this blog.

UPDATE: Download Here.





This blog entry will be the official area for people to leave any comments about the tutorial if they wish to.
 
If you wish to ask questions, please post them here for my attention:





Monday, 24 March 2008

The Next Stage

I am pleased to report that I am almost at the end of writing my NWN2 XML tutorial. I am just going through some last minute proof reading and, hopefully, will be able to upload it onto the Vault later today. I decided to change some of the terminology I have been using again, so that it reads closer to that already being used for the code by others. I considered that if I tried going too far with my own words, it may only serve to confuse the reader when it came to referring to other sources.

The Life Essence System

Once that is done, I intend do some more work on the Life Essence system. As readers who have been following the blog will know, Life Essence is something new to the new era of Althéa and a product of The Changing and the disappearance of Colour Magik. It is the source of power by which everything about life is altered and grows.

I have already considered one of its functions that I wish to develop, and now just have to see if it is practical, not only from a gaming perspective but also a scripting one. In this case, it is the Life Essence's ability to transform the mundane into the magikal! The normal Item Creation Feats will remain as normal, but the Life Essence system offers a way for the player to circumvent the system if they are prepared to pay the price! Some players may take up the opportunity to do this, whereas others may consider Life Essence too valuable for other projects to consider "wasting" it on such things. As I progress, you will learn more ....

Friday, 21 March 2008

Spring Cleaning

I decided to clean out my computer room today. It was long overdue for a dust and as spring is in the air, I also decided to clear out the rubbish around the room as well as put away some older computer parts and give it a good dusting. Hopefully, the new airy feel will please my local players.

I finally boxed up and put away an old analogue 20" monitor that sat in the corner of the room as well. So that means I now have two boxed 20" monitors (analogues) that I no longer use and are up for grabs (£25 each) if anybody can make use of them. I would give them away, but my HD recorder has just broken and I am hoping to make the money I need to get it fixed. They are both Hitachi (CM802 and CM827), fully functional and still in their original boxes.

While I was in the tidy up mood, I also swapped over the speakers I normally use to Netmeet with one of my players. The previous ones were starting to distort and make it difficult to hear him at times. These newer ones appear to have a much better tone and I have not noticed any distortion.

Next, I swapped over a couple of drives: I removed a DVD writer from my old PIII and swapped it for the CDROM that was a second drive in my main computer. The problem was that NWN2 needs a DVD drive to run, and as I normally like to use my DVD to backup data, it meant I was always having to swap discs to accommodate both operations. It meant I started to slack on my backing up, which is not good, and so I made the swap. As I don't use the older PIII for anything much nowadays, it won't need a DVD anyway ... I hope.

Finally, I swapped over a mouse on one of the client computers that I found was having difficulties with the right mouse button not opening the menus properly while in the game. The replacement mouse appears to work fine.

My wife decided to do some tidying of her spare room as well. Needless to say, it meant we were doing a lot of shuffling around, moving stuff from room to room and what we did not throw away, went into that extra-dimensional closet of all storing: the loft!

I am glad that is done for a while again - and with the room clean, it does inspire me to finish off the XML tutorial I have been working on. I can report that all the code is now finished and working. All it needs for me to do now is simply finish the writing and upload it. Then, finally, I may be in a position where I can return to my campaign, knowing I have cleared all the cobwebs from both my room and imaginative thinking.

Thursday, 20 March 2008

Souls Awakening! (ADV)

And so the Soul Shaker module begins ....

As you may or may not know, I have been eagerly awaiting the start of this module for my group of players for years, ever since I first came up with the idea in October 2004! Since that time, however, I have lost two members of my group, but, in turn, have gratefully received a new member: Geoff (known to the Bioware forums as Quillmaster) . It means I now have three players who have started the Soul Shaker adventure with me as their DM.

Last week was a bit of a disaster when it came to the module changeover as you may recall, but I am very pleased to announce that this week went smooth as silk, as the saying goes. There were absolutely no issues during the session, although this should come as no surprise considering all the testing the module received and the large number of fixes I made for it since it was released on the Vault.

Basically, the session went very well, and I was pleased at how well the players quickly adapted to the "real time" combat, the first experience of such within the Althéa Campaign. A lot of the time was also spent in getting to grips with the differences that the demi-plane threw at them with regards to their PC's nature and development. It was interesting for me as a DM watching them learning to adapt to the strange situation and begin to understand the various roles each of them could adopt to help survive. I look forward to the next time we play, which may be as early as next week or the week after, subject to player availability. Either way, if it is as fun as it was this week, then I will be pleased. For those players interested in keeping a copy of the previous chapter of the adventure, the download for the collection of synopses for Torén Norus is now available from here.

You will notice that the normal XP and TIME details in the header to the synopsis brief are different this week. This is because XP is calculated differently within the demi-plane and that it is only relevant at the end of the module. Therefore, I will display the heroes current "Realm Level" instead. Furthermore, TIME does not flow at the same rate as it does within the Prime Material Plane, and therefore, this too becomes an irrelevance. For this reason, TIME will always be displayed as UNKNOWN. Not even the ratio of time flow is currently known.

SYNOPSIS SNIPPET: (REALM LEVEL: Zero) TIME:Unknown

"As the combination locked door opened, however, a small group of undead humanoid creatures spotted the heroes from the other side, and immediately lurched towards the heroes screaming, "Give me flesh!"

Grimbold shouted an immediate retreat, but in the confusion Myara thought it was for the attack and dived into the undead group even before she had readied her club. Fortunately, Karasten mustered his will to deliver a "Spirit Attack" and found he successfully started to deliver bolts of energy towards the undead enemy. Realizing what had happened, Grimbold turned back and went to the halfling's aid." Download the full synopsis here.

Monday, 17 March 2008

XML Terminology & Some Findings

I have been playing around with the XML code for NWN2 for a few days now and slowly putting together a really basic tutorial for people like myself who had no idea where to start. So far, the tutorial goes into a reasonable amount of detail about some basic GUIs, but I wanted to write one more GUI that went that little bit further and give information on how to send data back to the module, using functions like UIObject_Misc_ExecuteServerScript () and UIObject_Input_ActionTargetScript(). Now, I seem to have mastered the first of these two functions, and I thought I had mastered the second. However, when it came down to testing my code, the second of these functions refuses to work as I thought. I have posted on the Bioware forums, but have not had an answer yet. Hopefully, I will receive one soon, as it will allow me to complete the last GUI and finish the tutorial and post it on the Vault.

During my writing of the tutorial, I realised there was one term I was using that was a little misleading and so I decided to edit the word out for the correct name. However, I hope I explained its usage clearer than others have done in the past: Tags! In my working out of the code, I always saw the things like UIScene as "functions" and referred to them as such within the tutorial. However, as I learned more, I could see that it is the type of lines of code written above (in the first paragraph) that are actually the functions in XML and that these items I had been calling functions were merely "objects" with certain "tags", which I assume have been predefined by Obsidian. So, I edited all my incorrect references to "functions" and replaced them with the correct term of either "object" or "tag". Since then, I have also learned that what I have been calling "parameters", others are calling "attributes". However, as the word "parameter" has not been readily used elsewhere for XML, I have left my wording as it is for the time being, as it still makes more sense to me as a beginner, which is the audience I am aiming for.

I made another big discovery when testing my code as well: Functions like the two listed above must not have any spaces between their parameter listing. This had me stumped for ages, as I could see nothing wrong with my code and it was not until I copied and pasted a line almost identical to mine from another file and found that worked, did I then discover the spaces in my own code that made the difference.

Another discovery I made was that it is not yet possible to design a custom button that can be dropped onto a hotbar. Looking at the parameters available, I thought this could be done, but in practice it simply does not work. Then I checked the forums and someone else had mentioned they would like the facility to be able to do this, and so I assume it cannot be done after all. If anybody knows any different, then please let me know.

I intend to spend some more time looking over XML code made by others if and when I get the chance, especially some of the more advanced stuff, like that done by Adam Miller as part of his Dark Waters series. Maybe I can learn one or two tricks from him there.

Thursday, 13 March 2008

Departing of the Soul (ADV)

Well, if you read yesterday's post Shake, Rattle and Crash!, then you will know how disappointed I was with the module crossover at the end of the last adventure. It did not go smoothly at all. But enough of that, what else occurred on the night? Well, most of the evening otherwise went quite smoothly and you can catch up with the synopsis from here. Note, you gain a little more info about the "loose tooth" from the synopsis, as I realised afterwards that I should have reminded a player that their PC should have cast the "Tongues" spell and not the "Comprehend Languages" spell when trying to understand a foreign tongue. This is the subtle difference between these two spells, and so I have give the players the benefit of the doubt that this is the spell they would have cast, and so given them what they would have learned within the synopsis.

There were a few things worth pointing out though, some as a result of the crash and others just observed. This resulted in a final TNPatch for Torén Norus (0.05), even though we are finished with the mod:

1) Hit points calculated for the Realm went wrong after the player refreshed their main menus because a variable set during transfer was based upon the PC they were controlling and not the PM (Player Mannequin). This meant a couple of things (number of attacks and hit points) upon arriving at the Realm would have been inaccurately calculated for the PM, which is considerably lower level than the PC it was supposed to represent. This was the main fix for 0.05.

2) During my trouble-shooting to find what had happened, I discovered an exploit in Soul Shaker regarding Soul Fragments and fixed that. This and a typo correction were the 0.19 fix for Soul Shaker. Note, I will not upload these to the Vault until we have played Soul Shaker to completion. Then I will upload all fixes that we found along the way. NB: These are very unusual and unlikely to be encountered bugs and so I am not worried by them.

3) I added new code to help ensure the lich conversation starts when you encounter it. Again, this is a redundant fix for Torén Norus, as we have now finished it. I just like to make sure it is fixed for my own satisfaction.

Lastly, just to go back to the main crash that occurred. The only other thing that I could think of that may have been a contributing factor is that the level the module started in may have been too big for the game engine to handle across the Internet. In future, I will try to ensure all such module changeovers start in a small area by comparison, so that the game at least loads for all players before we start properly.
SYNOPSIS: (SESSION XP: 2579) 17/09/1197 (DEATH: Morgellin)

"A large round stone table stood in the centre of the room, surrounded by four thrones: This was the ancient Meeting Chamber that the heroes knew lay somewhere within the tower, and now they had found it.

Yet, as the stared into the chamber, a ghostly voice sounded in their heads at the same time as they spotted the emaciated husk of a humanoid being sitting in one of the thrones. Almost by instinct, the heroes knew they had found Terrell ... or what remained of him."   Download the full synopsis here.

Wednesday, 12 March 2008

Shake, Rattle & Crash!

What a disappointment! :( I wish I had better news to share about the transition from Torén Norus into the Soul Shaker module, but alas, it is not to be. In all my testing over the weeks, months and years, I have never had the game crash on me completely like it did for our session tonight. The start of the adventure played along relatively smoothly while the players were in Torén Norus, but at the moment the last player sat in the magik throne that would start the procedure to transfer them into the Soul shaker module, CRASH!

First, let me apologise to my players and say that I hope it did not spoil the otherwise fun experience up to that point. It turned out to be a rough night for them, as they also lost their cleric, Morgellin, to an Iron Golem breath when he rolled a one on his saving throw! Furthermore, as it was the cleric that died and there was still no way out of the tower, it meant Morgellin had to be packed away in a bag of holding until the heroes could find another way to raise him. (Messy!)

Regarding the crash again, the only consolation I had was the fact that it did not appear to be anything to do with my code as such, but it simply seemed that NWN could not handle the module changeover over the Internet where one of the players was accessing the game. Why this would be the case, I don't know, but as soon as they were not involved, the module changeover process went smooth as silk.

So, in the end, I had to reload the game just for the LAN players, allow them to enter the Soul Shaker module from the Torén Norus module first, and then get the player on the Internet to do it separately afterwards. His joining still caused the game to crash, but by then all the data for his PC was recorded, and it meant we could start afresh with the Soul Shaker module and simply rejoin the module bypassing the module changeover step.

Unfortunately, the process did mean the players missed out on the introduction movie, and the opening speeches by Terrell, but at least we reached the point where we could save the game ready for the next time we played. I had looked forward to this moment for so long that the eventual disaster of the transition really annoyed me. I just hope now that the rest of the gaming experience is one of smooth sailing.

In the meanwhile, I ask that all players download and read the manual ready for the next time we play. The game is obviously a lot different from anything you will have experienced before, and even the brief introduction that we did see should have given you a clue to as much. The manual can be downloaded from here: SOUL SHAKER GAME MANUAL. Please spend some time reading pages 5 - 29 so that you are familiar with the basic mechanics of the game. Combat is no different from normal (real time) play, but character development and surrounding mechanics is definitely affected upon this demi-realm of the lich. I advise NOT TO READ past page 29, as it starts to speak of things that the player would not yet know about the Realm and so it would spoil their experience if they did.

SYNOPSIS DELAYED

After that disappointment and the extra time it took me to sort out the problem with the game to make it ready for next week, I have not had time to sort out the regular synopsis yet, but hope to find some time tomorrow - so please check back then.

XML TUTORIAL

On a positive note, I have been making headway with the XML & GUI Tutorial. I am making all sorts of discoveries about XML as I write it,which I hope will help others when the tutorial is finally released.

Monday, 10 March 2008

Digesting XML

I have been spending some time just reading over the information that elf des coquillages pointed out to me in a comment yesterday regarding XML coding. (Links have been added to the Useful Links section on the left.) Sometimes it is just good to get to grips with something like this to be able to gain confidence with regards to custom building as a whole. I think I have got to grips with as much as I need for now, and will probably try to put together a small beginners tutorial to help remind me, but also to post on the Vault for others. It won't necessarily contain the correct language for certain terms, but will be aimed at people similar to myself who may just like to have some of the more basic concepts outlined in a language easily understood, which I feel is missing at the moment.

First, however, I want to be able to right my own XML file to demonstrate the level of knowledge I have reached and maybe to help show some of those elements that are not obvious, like the different fonts available.

Hopefully, once I have that off my chest, I will be able to start looking at writing more towards the first module of the campaign within the new era. I still need to add the books sections (which is why I did "Readable Books"), but maybe I can look at one or two other areas of the mechanics from a different approach now that my knowledge of XML has improved. I will have to wait and see how the mood and imagination takes me.

Sunday, 9 March 2008

XML Code - Backward Engineering

I have to confess that I like the new GUI interface operations and how we can, as builders, develop various feedback and displays for our players. To me it adds a new dimension to the game, and allows me to help structure a module to keep players aware of events and help keep the plot focused. Or, I may also be able to design an interface to make use of new and complete independent systems that make the world of Althéa unique.

The only problem is that XML is new to me, much like script was when I first encountered it. However, whereas script appeared more logical, XML requires a little more forethought, as much of what you are doing is building something visual with numbers (or so it seems to me). In script the objects to code with were mostly already present, whereas XML is more like coding the object in the first place.

Therefore, if I wanted to make more use of the new GUI interface, I needed to start looking at what others have done and pull them apart to understand it. To help me in this project, I copied and printed off the small amount of information available at Obsidian's XML Blog. The XML information is on the first few pages (oldest) of the blog. I then opened up some XML files that others have written and started to try to make sense of everything.

I found that if I copied the text into something like Word and then highlighted different sections according to when each "function" appeared to start and end, I began to see a pattern among the otherwise just "rush" of text. Then, comparing the highlighted code with the information I copied from Obsidian, I could begin to see how the functions were being used, and even managed to start editing my example XML to test in game. The results were encouraging, and while I am not going to be making many of my own to begin with, I do believe I have enough knowledge now to be able to work on someone else's XML file and alter it for what I need. As there are quite a few official and unofficial files available, I should be able to do what I need when the time comes. (I will let you know.)

Here are some of the XML commands that I have started to get to grips with:

  • < !-- COMMENTS HERE -- > : How to make comments in the XML code.
  • UIScene : Defines the main GUI size, placing and function. (The box that appears.)
  • UIText : Places text within the main GUI.
  • UIButton : For placing a button, but appears to rely a lot of UIFrame for visual look.
  • UIFrame : Appears to be used with UIButton to define an image.

Feel free to comment on XML coding if you can help enlighten me to anything or lead me to a better understanding of it. There are still a few functions that I need to look at more closely and learn how all the different parameters interact with other, including:

  • UIObject : Appears to be used with most other functions in some way.
  • UIListBox : Has similarities with UIPane.
  • UIScrollBar : Appears to be used UIListBox (among others).

Readable Books

I am pleased to report that my Readable Books hak has been very well received from the NWN2 community, and so far, has received all tens for its contribution. :) (Link to the mod is on the left.) Note, I originally uploaded this module into the mods section, but later had it transferred to the Custom UI section, which is more appropriate. This has, however, made some of the comments normally shown within the "View Comments" section unavailable. They can, however, still be read from the comments below the module listing.

Friday, 7 March 2008

Dark Waters Looks Amazing!


















I am spending a little time just surfing and looking at other NWN stuff in general and must confess how amazed I was when I saw Adam Miller's latest module "Dark Waters 2 - Beyond The Sea". It was the new GUI and custom content that has astonished me at the moment and I can say that I can't wait to take a look at what he has done and to see if I can learn anything more new from it that may be useful for some of my own designs. It's when I see work like his that I realise I still have a lot to learn about scripting and XML files in general. I have added his website to the links to the left, and will be keeping a close eye on his work.

Take a look at this video link to see what I mean:

Thursday, 6 March 2008

Readable Books

Yesterday I said I would expand on my workings with my version of Readable Books, based on clubok's original work. Well today, I hope to give a bit more detail as well as announce that my version will be posted onto the Vault later today, and the link to it added to this blog site shortly afterwards when it becomes available. There were two reasons that drove me to this work:

  1. I needed to add some books that some PCs needed to carry around for the resting system I am working on.

  2. I liked the way these books worked and always intended to have them for the new campaign, but wanted an easier way to add or remove the text data.

The original design by clubok required editing a TLK file and updating a 2da file so that the text could then be viewed. This has some advantages in that it is probably easier to write the text in the first place, but does, in my opinion, require too much extra work trying to keep track of stringrefs and having to update the 2da file with the various types of information it needs to work properly. I also believe that because my version is based in scripts, it is probably more flexible to the everyday builder. Each has its merits, and so I felt there was room for my version to be built, even if it is just me who ends up using it. ;)

One of the advantages was that I was able to add a "Picture Book", which is basically a book with pictures added. The pictures have to be added to the hak before build time, but after they are added, they can be selected to be viewed as if a page of a book. I included an example in the demo mod, but the pictures were not the best possible, as I did not want to spend too long on preparing them.

Not Bookworms - Bugs!

During my alteration of the code, it gave me a chance to learn a few more things about NWN2's tool set in general. Most of the time things went smoothly, but there were a few things that had me stumped for a while. Three things were related to some bugs in the engine:

1) Inventory Item Limit: The first problem that I encountered was that I was unable to limit the number of items that a placeable could hold. I wanted to reduce a bookcase's contents limit to no more than about ten items. Unfortunately, even though I changed the inventory limit figure, it would still default to a high number. I learned this is a known issue and will be dealt with soon.

2) SetFirstName(): The second issue that I encountered was to do with renaming an object using SetFirstName(). This function is supposed to work in a similar fashion as SetName() from NWN1. All my debug testing showed it to work, but the item would not change its name in game. It turned out the bug is that the name does change, but it is not updated on the item until after it has been moved within the PC's inventory.

3) GetHasSpell(): The last bug I encountered, which is probably the most frustrating in some ways, was the GetHasSpell() function. The function is supposed to check if a PC has a particular spell memorised. Unfortunately, it will say that a wizard has a Summon Creature spell memorised (for every level) even when they do not. I tried to exclude these particular spells from the check, but it prevented all the spells from working for a sorcerer. :(

Scripting Issues

There were a couple of scripting issues that came to light for me using NWN2, which I was not aware of when using NWN1:

1) Include Compiling: The first issue was the very important requirement to recompile scripts that rely on an include script, if the include is changed in any way. I don't ever recall having to do this when using NWN1, but it may be because I have done more with include scripts using NWN2 than I have done before when using NWN1. In this module I had three scripts that each used the include script called "alb_booktext". As this include file was where I write all the main text for the books in question, I soon came to realise that compiling and saving this single script to test my alterations in game was not enough. Basically, the three scripts that called upon the data from this include file also needed to be compiled and saved, even though there was nothing directly being changed in them! Now that I know this happens, I write it here as a reminder to myself and anybody else who may be wondering why a script is not applying updates one may have done to it.

2) Script Order: The second scripting issue I encountered was based upon the order in which my code was firing. At first I could not see any reasons why my loops were not working correctly. They would run through the loop for a while and then appear to drop out. It turned out that I was probably asking too much from the loop, and by altering where I did certain checks for the object being tested within the loop, it allowed the function to complete the loop without dropping out. The function in question is written below, and the original problem was that I was doing the if checks for the iCount number before checking if the PC had the spell. By moving the if checks until after the spell had been checked first, the script worked fine. Unfortunately, the "OR" commands do not show if I type the script and so I will have to rely on an image to show what I mean:

(Click on the image to enlarge it.)

The rest of the coding went fairly smoothly. I would like to thank diophant on the NWN2 forums for pointing me in the right direction with one of the scripts. Check out the ReadBook.PDF file that comes with the ReadBooks module for more information about setting up the books themselves. (Link to the left in My NWN2 Modules.)

Wednesday, 5 March 2008

Gary Gygax - D&D Creator Dies

I heard the news today that Gary Gygax, creator of D&D died yesterday at the age of 69. Here is a snippet from the BBC website where you can read the full story:

"Gary Gygax, co-creator of the first role-playing game Dungeons and Dragons, has died at the age of 69. Gygax, who developed the game in 1974 with Dave Arneson, had been suffering from health problems for several years.

Famous for its mythical creatures and odd-shaped dice, Dungeons and Dragons was an instant success that spawned a slew of video games, books and films. Gygax was also an author who wrote numerous fantasy books, including the Greyhawk series of adventure novels. He died on Tuesday at his home in Lake Geneva, Wisconsin, leaving a wife and six children. "




Readable Books (NWN2 Mod)

For the last few days, I have been rewriting clubok's "Readable Books" module to work without 2da and tlk files. I loved the original concept, and having books look like books adds a lot to the atmosphere of the game in my opinion. It was always something I intended to do, and as I have reached the stage where I needed to define the wizard or sorcerer's spell book and cleric's holy book for when it comes to resting within the new era of the campaign, I made the leap to go ahead and do it.

The end result, I believe, is a much easier process to manage , where all data is added or changed within one script within the module, rather than having to edit a tlk file and a 2da file, with confusing string resrefs and large tlk numbers. I have been able to maintain all the events that the original could do and even add one or two new elements of my own, including viewing pictures within a book.

I am in the process of finishing off the PDF manual that explains how to add new books and update the text, and once that is complete, I will upload everything to the Vault and give a link from the menu on the left hand side. Furthermore, I will give some feedback on the building of the module that may be useful to others. For those familiar with clubok's version, you may notice I have made a difference that the contents conversation stays open all the while the book is being used. I personally found this easier to work with.

Torén Norus Adventure Postponed
Unfortunately, unforeseen events caused me to have to postpone this week's D&D adventure, which means the launch of Soul Shaker has been put back another week. It has been a long time coming since I first started working with it in October 2004, and so one more week should not make much difference. As it happened, the Internet appeared to be somewhat sluggish tonight, and so it may have hampered our gaming experience anyway.

First Ever NWN2 Internet Connection
As the D&D adventure was postponed tonight, one of my players and I tried to play another CRPG. However, as that was hampered by the Internet problem, we then decided to try to use NWN2 for the first time over the Internet instead, using my Readable Books module as a test. At first, he kept being kicked out as he tried to join. Then, I quickly recalled something about a PWC file and after creating the file in the toolset and sending him a copy, we managed to connect fine.

I was a little disappointed with the functionality of the DM Client, as even the movement felt a little jumpy rather than smooth. It was probably due to the fast movement that the DM has, but it still felt a little awkward to use. I also found the controls a lot harder to find and some of the basic stuff (like searching an inventory), I could not find at all!

However, my use of the DM Client is a long way off yet, and so I hope many of these issues will be resolved by the time I come to use it, or I will have a better computer on which to run it, or I may just get used to using it in time.

Thursday, 28 February 2008

A Soul Shaking Moment!

Today, for some unknown reason (call it suspicion), I decided to do just one last double check on the current module's ability to transfer the PCs data into Soul Shaker, which I hope we will start playing next week - and I am glad that I did, as I found some errors! As you can imagine, I was not too pleased as it meant having to redo some code for Soul Shaker as well as the current module, just to be sure everything synchronised alright.

As it happens, I could do most of the fixes from the current module, but there were two aspects that required me having to update Soul Shaker:
  1. The opening journal entry was incorrect for players joining from Althéa.
  2. I had missed two racial checks for setting a camera on the player.

These fixes have now been added to Soul Shaker and the module has been updated on the Vault.

I first considered a problem might be present when I had a vague recollection of updating an important script a few months ago that handled the data transfer from one module to the other. At the time, the update was straightforward enough and worked fine for normal play. However, because in the Althéa campaign the players play their PCs via a player mannequin (PM), the incorrect details were being recorded from the PM rather than recording the details from the PC being played/controlled with the PM.

I have now updated both the Soul Shaker module (v0.18) and the current module (0.04) to allow a successful entry into the Soul Shaker module whether playing a normal PC or when playing a PC via a PM (as with the Althéa campaign). Let us now hope for a smooth transition when the time comes.

Wednesday, 27 February 2008

Tombs of the Dead (ADV)

The sixth week of this adventure saw the heroes venture into the fourth and part way into the fifth level of the tower of Torén Norus. While there were no major glitches this week, I did notice a small problem that required a fix ready for next week, and there was a minor problem with an object being missed (which has now been fixed and I will ask the players to retrace their steps for next week to discover it). All these fixes have been added to the TNPatch 0.04, ready for next week's play. Read all about this week's adventure in the synopsis, now available at the website. There is a snippet below as usual:

SYNOPSIS: (SESSION XP: 141 + 100 bonus for Karasten and Myara) 17/09/1197

"There were a number of open crypts around the large chamber in which they found themselves, but everyone was drawn towards the huge obelisk towards the centre of the tower. It stood firm and tall and had fiery glyphs drawn on every one of its sides. When approached they revealed their message for all, "Here lie the Elf Lord founders. Their memories will never be forgotten all the while the towers of Torén Norus and Torné Norus stand."

Tuesday, 26 February 2008

Companion Development

I have been off work for the last week due to ME, a chronic illness I have that stops me from doing regular activities more often than I would like. When I get a few minutes respite from the symptoms, playing around with NWN and writing this blog are one of the few things I can do that help me to relax by removing me from the stresses that make my illness worse. And while I may not even be as active with this as much as I would like, at least I can still contribute something.

I have been continuing to look at the resting system that the campaign will use, and I hope to be able to make another post about that when I have finished ironing out some of the last items and scripts that it will use. In the meanwhile, I made a couple of discoveries regarding companions and their development when it comes to some of the properties set on them.

Where Have All My Spell Slots Gone?

The first thing I learned was that if you add spell using classes to a companion in the toolset and then try to use them in game, then their empty spell slots would be missing and there would be no way to learn spells with them. (Interestingly, I can see this being quite useful as a way of developing characters in a way that excluded them from spell learning in a world where such may not be possible ... but that's another story.) The solution turned out to be to use the Set To Package Defaults button under the "Spells" properties tab for the PC, which would then allocate all the spells for you. NB: If you add the spells manually (a few at a time), you are able to alter the amount of spells that the PC has access to from the start, but they will still be unable to learn more, even if their level would imply otherwise. Of course, in normal game play, this would not be an issue, as the player would have allocated spells as they progressed in levels within the game. I simply mention it here as it confused me for a while.

Learning A New Trade

The second thing I learned was how to remove the class restriction for companions when they had acquired enough XP to be able to learn a new class. In the OC, each companion is restricted in which class they can progress. However, by removing the Starting Package under their properties allows the player to select any class for them to progress in. (See image to the left.)

I Want To Talk!

There was one other handy tip that I learned from Nasherzor on the forums, and that was how to enable any PC to speak with another NPC. By default, the Main PC will switch back to being played if a player speaks to an NPC. However, there may be circumstances when a player may wish a specific PC they are controlling to speak with the NPC in question. To enable this, I have learned that the Can Talk To Non Player Owned Creatures button on the NPC being spoken to needs to be set to TRUE.

Thursday, 21 February 2008

Tomes of Times Past (ADV)

This week, the fifth, was another great week without any problems or issues and everybody was around to appreciate the game. The session started at the beginning of the third level of the tower and ended up with the players about to go to the fourth level. Read all about this week's adventure in the synopsis, now available at the website. There is a snippet below as usual:

SYNOPSIS: (SESSION XP: 288) 17/09/1197

"In this room, however, there was also a strange floating automaton that eyed the newcomers without any signs of concern. Grimbold and Wanda slowly approached the mechanism, and as they did so, it spoke with a metallic voice, "How may I assist?"

In fact, the only issues I had this week was trying to locate extra web space to upload a copy of the book the players found: "Ado Ia Dom". I normally have tons of web space with Microsoft Office Live, but their server appears down at the moment and I cannot upload anything. In the meanwhile, I have used the last part of my own ISP server space to store the PDF file, but will move it when the MS server is back up. I have also uploaded the pages as JPG files to be viewed online from the website, although they may not be as clear to read as the PDF file. (Check out the synopsis from the link above.) UPDATE: The file has now been moved to the Microsoft site.

Sunday, 17 February 2008

Resting & The Passage of Time

For the last two weeks I have been writing code to handle resting and the passing of time. Like all things to do with scripting and creating new mechanics however, the exercise has taken longer than I first thought it would do. This is mainly to do with the fact that determining who the main PC is when possessing a companion can be quite difficult, especially when using the in-game "rest" command.

There are also other conditions to consider that can affect the rest and recovery of HPs, spells, prayers and general recovery, such as lack of food, nearby monsters, or simply not being allowed. Lastly, of course, is the fact that in a multi-player game, one player may initiate a rest period, but you will not want every player to then add more time just because they choose to rest straight afterwards. It all gets very confusing as you can imagine, but I believe I have finally come to a conclusion with all this and have just a few minor details to finish coding before it is done. Throughout this time, I have been in touch with people on the NWN2 forums, and I can thank Jassper for his explanation of such things as to what constitutes a party or a faction or just a single person. This has an impact on which characters are treated when a player presses the rest button.

Waiting or Resting

When a player presses the rest button within the game, they will be requesting one of two things: Either to Wait or to Rest. Both of these options are displayed within a GUI (Graphical User Interface), allowing the player to choose which option they prefer. However, there are a few conditions that will prevent the REST GUI from being displayed, such as nearby enemies or being within a "No Rest Allowed" zone, such as city streets or active dungeons. In these cases, the player will have to continue with their adventures or find another place to rest/wait.

If the player is able to initiate the REST GUI so that the options are displayed, then they may still be restricted to being able to wait only. This will be the case if the PCs do not have any food (and therefore cannot gain the benefits of resting) or they have already rested within the last eight hours (not tired enough). The player will receive both an audio (gong sound) and a visual feedback if they are too hungry to rest (first image above), but the GUI will still open within half a second of this warning (second image) allowing the PCs to wait if they so desire.

WAITING: Depending upon the time of the day that the player chooses to wait, then they will be offered to wait until dusk or wait until dawn. As long as the GUI has displayed (meaning the PC is outside of any current restrictions), then they will always be able to choose the wait option. The current time of day the option is selected will also determine how many hours pass until the dawn or dusk, and will also count as time towards their PC's next available time before they can rest. In other words, if there are six hours until dawn and they choose to wait, then six hours will be removed from their eight hours wait time between resting. With waiting, the PC does not recover any HPs, spells or general health - only time passes and costs a food ration. If the PCs do not carry any food, then they may suffer from some hunger damage (in which case there would be no good reason to wait to try to rest, as resting cannot be done on an empty stomach anyway). NB: Having the Survival skill will help prevent some hunger damage if none of the players characters carry any rations.

The image to the left shows the player having chosen to wait until dusk without having any food to eat first. The screen has now turned darker (dusk), the result of a hunger check is displayed because they did not have any food, and the number of hours passed has been shown along with the new current time and date.

RESTING: As long as all the right conditions are met, then a player may choose to rest his characters instead of waiting. The conditions to allow resting are: (a) Not to have already rested within the last eight hours and (b) To carry food (normally rations), one of which is used up on resting. There are also audio and visual warnings to help warn players if any of their characters do not carry items that may be required to help study for prayers (Holy Book) or learn spells (Spell Book). Resting will always give some HPs back (according to the place of rest), and may help towards recovering from an ailment (poison or disease), but will not allow PCs to recover their prayer or spell abilities if they are missing vital objects required for the task. Resting is always considered eight hours. (However, see the note on Amorphous & Personal Times next.)

Amorphous & Personal Times

To help keep time flow reasonably standard and in the control of the players, I have currently opted for 15 minutes real time = 1 hour game time. This would mean a player would have to play for two hours real time before the eight hours restriction has passed by in game time before the PCs can learn either their prayers or spells again. Note, however, that if the wait option can be selected, then they will be able to overcome even this real time restriction. However, to be able to rest after this wait time, it would still mean the PCs are effectively camped outside in an open area, do not have any enemies nearby, can feed themselves and have access to their objects of study. This also precludes any other restrictions the DM may place upon the PCs, such as other environmental (severe weather) or personal restrictions (cursed?). The bottom line is, resting will not be readily available, unless the players are in a safe area and well prepared.

When it comes to calculating the eight hour delay before further prayer or spell recovery, each PC will have a personal eight hour window of time, starting from the moment that they last rested. Most of the time, (if players choose to rest at the same time), it also means all PCs in the game will be ready to recover spells at the same time. However, having personal time may allow players to plan certain usage of spells more tactically.

Note, however, actual time will only move forward in chunks for all PCs within the world when the wait option is selected. Actual time for rest is otherwise "swallowed up" by the time scale differential between real time and game time and balanced by each individual PCs own eight hour time window.

E.g. One player may choose to rest his or her characters at 9.00 a.m. game time. (No time is moved forward using this option.) Another player chooses to do the same. All PCs controlled by these two players have a personal time stamp placed upon them, from which they must wait another eight hours (5.00 p.m. game time) before they can learn their prayers or spells again. A third player does not need to rest because they have a full complement of spells, but does need to do so after another real time hour of game play (which would equate to about 2.00 p.m in game time). He or she may choose to rest at this time, whereas the previous players could not. (Again, no time is moved forward when selected.) However, the players now decide that the other PCs belonging to the other two players do need to recover their spells (again) and therefore try to find a place where they can wait until dusk (6.00 p.m in four hours time). Any player can choose to select this option from the GUI and the actual time for the game will move forward for all PCs. If successful, then the time will move forward enough for the players to allow their PCs to learn their prayers or spells again. (6.00 p.m. is after 5.0 p.m.) Alternatively, the players could have opted to continue playing without choosing the wait option (or may have been forced to keep playing because of circumstances) and would have been able to rest again when the game time reached 5.00 p.m. after about another 45 minutes real time.

I still have a little more coding left to do, and will give another update on this when I have finished it, and include any more details as I think of them. In the meanwhile, if you have any questions, please add them as a comment below.

Thursday, 14 February 2008

Ancient Mysteries (ADV)

Week four of play went very smoothly and without any glitches. The only downside was that one of the players could not make it this week. His playing style and contribution was missed, and we hope to see him along next week. In the meanwhile, the synopsis is up for grabs at the website, both for him to catch up with events and for any others who may be following. Here is a snippet as usual:







SYNOPSIS: (SESSION XP: 701) 17/09/1197

The synopsis is available at the website now! Here is a snippet:

"After the combat, the heroes checked out the chamber with the crystal and found a headstone at the back, which read "Let Kyrianda Lathellian's blessing be available for all." None of the heroes could determine what this meant, and so left the ancient mystery alone for the time being."

Tuesday, 5 February 2008

A Blast From The Past!

Having the week off has allowed me to work with the NWN2 toolset more closely, and to start to understand the more nitty-gritty of its engine, as well as start to make more posts in the forums. Today, I decided to take a break from learning about crafting and its functions, but not before I made a post in the Bioware forums asking for more details on how distillable objects are set to be dropped from the various monsters. At first, I tracked down what I thought would be the answer from within the des_crft_drop.2da file, but having played the official campaign and collected such things as fire giant heads, I still cannot see how such things are determined, as this 2da file does not contain such information where I thought it would be. To date, I have not had an answer as to what actually does determine such drops. In the worse case scenario, I will write my own scripts to handle such matters. It would just have been nice to understand this a bit more first.

The Rift On The Borantan Plains:

Instead, I decided to turn my hand to designing another area. The images included show my results, and I don't mind showing them as the players would have already "seen" this area from their time playing in pen and paper. (So many years ago now!)

These images show the rift that opened upon the Borantan Plains near to the start of the game: The same rift that the heroes later descended and found their way to the Underdark, where they are still today.





I was pleased with the results again, and I am beginning to see that some quite good results are possible, even with the minimal amount of skill.

(In case it is not obvious, you can click on any picture in this blog to get a larger view.)









FUNCTION: SetTime()

During my drawing of the new area, I had the urge to dabble with some campfires and to add some script that automatically changed their state (fire effect) according to the time of day. This highlighted a couple of issues itself. First off, I learned that Placed Effects (e.g. flames) are harder to work with (manipulate) than I first thought, and secondly, the SetTime function works very differently to how I first thought when the module Game Time has been altered.

As you know, I intend to alter the flow of time from the previous 1 minute = 1 minute style of play to something that allows for real time waiting before spells can recovered from a rest. Originally, I proposed using 4 minutes = 1 Game hour, which equated to meaning resting would only be possible every 24 real time minutes (if within an area where you can rest). However, I am also considering higher values like 15 minutes = 1 Game Hour, as this would mean players would only be able to rest their PCs about once per gaming session (two hours real time), unless overridden by the DM for any reason. This would give more meaning to careful spell use and disposable magik items such as potions and scrolls, and even such items as wands, staves and rods.

Anyway, during my use of the SetTime function, I discovered that setting the minutes higher than the module "minutes per hour" would alter the hour setting as if the minutes lapped the hour. i.e. Setting the module minutes per hour does NOT alter the flow of time to make 60 minutes now fit within the hour, but actually makes the hour comprise of the lower number of minutes. Therefore, in the module where the time was set to 15 minutes = 1 Game Hour, if I used the SetTime function to set 3 hours 59 minutes, this would actually set the game time to 6 hours 14 minutes (6.14 am) and not 3.59 am as you might expect. In other words, the 59 minutes are 3 x 15 minutes (hours) plus another 14 minutes. And when the clock that now says 6.14 am moves on one minute, the time would be 7.00 am and not 6.15 am.