Showing posts with label Neverwinter Nights. Show all posts
Showing posts with label Neverwinter Nights. Show all posts

Saturday, December 18, 2010

Neverwinter Nights Available at GoG.com


A team of 4 players, from different parts of the world ranging from Florida to Sri Lanka, explores an ancient underground fortress in Faerun, the world of Neverwinter Nights.

Atari's
Neverwinter Nights has just been made available as a DRM free download for $10 at Good Old Games.


A generation after it's original release NWN remains the most revolutionary cRPG ever made.

The adventure isn't that special. If you're a casual cRPG fan it's worth a play, but it won't rock your world. Baldurs's Gate 1 and 2 are both better cRPG experiences for the RP lightweight (and both are available on GoG). The official campaign is weak at best. The first expansion, Shadows of Undrentide, is MUCH better. In fact, just skip straight to "Shadows" (known in the NWN community as SoU). It's no Baldur's Gate, but at least it gives BG a run for it's money. The original campaign doesn't even try. The last full length module, Hoards of the Underdark (or HotU) is a sequel of SoU and is without doubt the best of the three modules, but it's also epic level. I wouldn't recommend making HotU your first NWN experience.

No. As far as the single player game goes it falls into the "meh" catagory. The graphics are dated, and in the OC the plot is lame, linear, and riddled with painfully 2 dimensional NPC's.

But it's still the best cRPG ever made.

What makes NWN stand apart from any game that came before it is the Aurora Toolset and it's multi-player features.
The toolset is easier to use and more powerful than anything ever released before or since. Dungeon Siege, Morrowind, even Oblivion have toolsets that pale in comparison to NWN. While the sequel, NWN 2, has a toolset that offers a building experience with much better graphics, it offers nothing in terms of improved game play and is much more complicated and time consuming. NWN is also highly modable. It's relatively easy to create and animate 3d models, so fans have fleshed out the game with custom clothing, models, buildings, monsters... you name it. The system is so flexible that it has been used to create d20 modern and even sci-fi modules. NWN is the perfect platform for the amateur game designer. As a result there are literally thousands of fan made modules, and literally hundreds that are actually superior to the official campaign.

Still not convinced? Let's talk multi-player. NWN can be played cooperatively or PvP. The official campaigns can be played co-op, but there are scores of fan made modules designed for MP co-op as well. Now there's nothing new about MP support. Baldur's Gate was an amazing MP experience for the few people who tried it, but compared to NWN it's downright primitive and without the toolset the MP experience in these games was intrinsically limited.

And this brings us to the one thing that sets NWN apart from every other cRPG ever made...

NWN has a Dungeon Master client.

NWN's DM client, in combination with the powerful toolset, relegates every other MP computer game on the market to the status of "Poser". This feature makes real tabletop Pen 'n Paper style role playing available in a thoroughly rendered 3-D environment for the very first time.

NWN still has a very active community. For a complete list of links and resources check out my dedicated Neverwinter Nights page. 

BUY NEVERWINTER NIGHTS RIGHT NOW! It's the best game value you will ever find.




Sunday, June 27, 2010

Betrayed by my Beloved Bioware


Bioware still hasn't come out with a demo for Dragon Age Origins. Well this gamer, for one, is done waiting.

My concern about Bioware not offering a demo has nothing to do with the game quality. I have no doubt about that. Bioware makes the best cRPG's on the market, bar none. This is the company that brought us Baldur's Gate and Neverwinter Nights. My concern is more practical. How can I know for sure it will run on my machine without testing it first with a Demo? My video card exceeds the recommended requirements in every category, but it's simply not on the list of supported cards, so it's a crap shoot. The only way to know for sure is to try it out by using a demo or a pirated copy.

Oh well. I guess it's off to the high seas. Arghh ye maties. At least you got a few organic links.

:-/

Tuesday, March 9, 2010

The Broken Heart: A Preview of my Upcoming NWN Module

Omagogg was a warrior of the Bear Claw tribe. Long before the city of Neverwinter sprang up Omagogg served Mhoghazz, Overlord of vast stretches of the sword coast with a reign that was still growing as civilization was only just reaching the north.

The young warrior was ambitious, and he sought help from Grizellha, a night hag. She agreed to help him overthrow Mhoghazz. When he asked her the price she told him "Omagogg, your rise to power will make you many enemies but one will stand above all and that enemy will take from you more than you can now conceive. You may make no attempt at vengeance. Fear not, warrior, for vengeance shall be had, but it will be mine, and not yours. I will come to him in his sleep and destroy him."

Omagogg agreed and within the year Mhoghazz, who had no surviving sons but for a single infant who had vanished months before, died of sickness, unable to rest for the nightmares that plagued him. Omagogg met all challengers in battle and became Chief of the Bear Claw.

Inwau was a barbarian princess, daughter of Hurugarr of Elk's Leap, one of the Bear Claw's smaller rivals. Omagogg was prepared to sack the Elk's Leap when Hurugarr sent Inwau, offering his thirteen year old daughter up to wed the overlord as a peace offering.

Omagogg was immediately smitten with the young girl's beauty and accepted her as his wife. The people of Elk's Leap were spared slaughter, and Hurugarr was bound to Omagogg's house by blood and became a great chieftain of his clan.

Inwau had a talent for wild magic, and as she grew she became a mighty sorceress. Omagogg and Inwau lived together in the Arms of the Bear, a great and ancient tunnel complex on high ground, in the hills overlooking the Vale of Summer.

Omagogg was blissfully happy with his bride. As he grew older with her he became a gentler ruler, and fair. As settlers trickled in from the south he allowed them to settle in his marginal lands in relative peace in exchange for trade goods. His people prospered, as did the "pinkskins" (so named for their lack of tatoos) from the south.

As Inwau blushed into womanhood she happened upon a pinkskin Captain named Herold Whillson. While she was trading for scrolls in his village they were attacked by a band of Ogres, and side by side they fought them off. They parted, but Inwau was clearly smitten by the chain clad knight. Each time she returned to the village to trade the spark between them grew. Soon she began sneaking out of the barbarian fortress from a secret tunnel she had built.

This went on for many years. The Pinkskin village prospered and grew, and eventually Omagogg traveled there himself to collect the governors tribute.

It is said that as soon as he saw Captain Whillson his queens treachery was laid bare, as he saw his two youngest sons in the armored man's eyes. Omagogg knew this was the enemy that the night hag had warned him of all those years ago. He knew that he should stay his hand and allow Grizellha to exact her vengeance, but his rage was too great. He drew his greatsword and struck the knight down. He then ordered his retinue to raze the town and they killed every man, woman and child in it.

He returned to the Arms of the Bear, but word of his deeds had arrived before him. Inwau lay dead in her chamber at her own hand and her bastard sons had fled to Elk's Leap.

Omagogg mustered his Army and marched on his wife's home tribe. Omagogg met Inwau's bastard sons on the battlefield, but they still loved him as a father and would not raise a weapon to him. Instead they bowed before him and offered their heads, which Omagogg took. Then his army slaughtered the people of the Elk's Leap just as thoroughly as they had destroyed the pinkskin town.

He returned to the Arms of the Bear, and that night Grizellha apeared to him. She said "Omagogg, you have served the life I made for you well, and now I have come to accept your payment. Now I shall destroy the enemy I warned you about all those years ago."

She returned to the shadows from whence she came and Omagogg railed at the darkness, "Devil Bitch, No enemy stands before Omagogg! I have slain them all with my own hands! Stand before me again and I shall destroy you as well!"

That night as he slept he stood again on the field of battle and took the heads of his sons. Night after night he suffered the same dream as Grizellha kept her promise and feasted on the despair of his greatest enemy.

Tuesday, March 2, 2010

ERROR: NO RIGHT BRACKET ON EXPRESSION from Lilac Soul's NWN Script Generator When Using CheckPartyForItem Function

If you're getting an ERROR: NO RIGHT BRACKET ON EXPRESSION error on compile when using Lilac Soul's Script Generator I'll pretty much bet the farm that you're trying to write a script that uses the CheckPartyForItem function. The solution is VERY simple. If you get this error just add an include for nw_i0_tool and voila! The script will compile perfectly.

If you don't know what an include is... well, it doesn't matter. Just generate the script normally and copy/paste it into the script editor. Save and Compile. If it gives you a No Right Bracket on Expression error just add a line above the entire script (immediately above or below the green comments are fine as long as the line is above the int Starting Conditional(); or void main(); line).

The line you need to add is:
#include "nw_i0_tool"

Don't put a semicolon after the line.

That's all there is too it. The script will compile normally now.

If it hadn't been for Lilac Soul's Neverwinter Nights Script Generator I never would have started modding. Sure there are some intrinsic limitations, but nothing you can't learn through. The script generator is a perfect starter tool for noob modders.

Last night while modding I used it to do a simple script and behold... I got an error! It's not the first time I ever had this particular error, and It's one that can be worked around using multiple scripts and integer variables, but that's a royal PITA. This time I decided to try and fix it.

It took ten minutes.

I gotta tell ya, I feel pretty stupid for not Googling the solution right off. I shudder to think of the time I've lost in my life writing and testing scripts to get around this function. After ten minutes of looking at scripts that worked it became clear that all I was missing was a simple include!!!

Edit 10/1/12: The Krit has updated the script generator, and he's done a GREAT job with it. You can get the updated version here.












Sunday, January 25, 2009

Aurora Engine: The Easy Way to Add Secret and Placeable Doors to Your NWN Mod

It is shocking to me that the Bioware builders page on this subject is so absurdly out of date and incomplete. After extensive trial and error I've managed to document at least enough of the procedure so that Noobs like myself can quickly and easily set up secret and placable doors.

Placeable Doors:
Placeable doors are easy. You cannot use a "Hidden Wall Door" or "Hidden Trapdoor" from the miscelaneous interior standard pallet. Instead go to "Secret Object" and select a door from there. Now give the door a unique tag (For example "DoorPlaceableTag"). Under most circumstances you may want to remove the word "Secret" from the name so only the word "Door" will come up in-game if the player mouses over it.

Finally you need to place the waypoint. This waypoint will be the door's destination. Place the waypoint at the point where you want the door users to teleport to when thy go through the door and give it the same tag as your placeable door with the prefix "DST_" (for example "DST_DoorPlaceableTag").

Optionally you can use any door placeable and a waypoint using the naming conventions above and simply change the OnUsed script to x0_o2_use_wdoor.

If you open the OnUsed script you will see that the comments tell you to use a "LOC_" prefix. This is wrong. It is nothing shy of sadistic that this has never been corrected in any of the patches.


Secret Doors
How it works:
A secret door is simulated by putting an "OnHeartbeat" script on an invisible "trigger placeable" object. Every heartbeat (about once every six seconds) this script checks the skills of nearby players and rolls to see if the most skilled searcher has spotted the secret door.


When one of the players spots the door the trigger placeable destroys itself, spawns in a door at it's location, and sets it's Tag name as a string variable on it.

The door has an OnUsed script that uses the string variable to teleport anyone who uses it (along with henchmen and pets) to a waypoint with the same name.

How to set it up:
Place a "Hidden Trapdoor Trigger" or a "Hidden Wall Door Trigger" where you want the door to appear and give it a unique tag (for example "SecretDoorTag"). You will find the "Hidden Wall Door Trigger" and "Hidden Trapdoor Trigger" in the standard pallet under "Miscellaneous Interior". Place the trigger object in the center of the desired detection radius.

Next you need to place the waypoint that will act as the door's destination. Place the waypoint at the point where you want the door users to teleport when they go through the door to and give it the same tag as the Hidden Door Trigger object with the prefix "DST_" (for example "DST_SecretDoorTag").

I am referring to the "Hidden Trapdoor Trigger" and the "Hidden Wall Door Trigger" as "trigger objects" to avoid confusion, as they are not technically "triggers". In other words... they are not painted from the "trigger" pallet. They are placed from the "placeable" pallet. They're just called "triggers" in the placeable menu.

Hidden door trigger objects use the "invisible object" appearance. When the door appears it will be facing the same direction as the placeable.

To set the secret door's properties change the following fields:

  • Reflex Save: Determines the distance at which a PC can search for this door in meters.
  • Will Save: Determines the DC of finding this door.

Wall Door Placement Guidelines:
When placing wall doors be careful to place the trigger so when the door spawns it will be flush against the wall. Place the "hidden wall door trigger" so the arrow faces away from the wall and the back edge of the invisible object placeable is flush with the wall.

Wall Doors must be placed where they can be accessed by the players in-game. This can be problematic sometimes. For example, when using the city interior tileset the walkmesh often does not extend all the way to the wall, especially in the alcoves. If you spawn your doors so they appear flush against these walls they will be too far off the walkmesh for the players to fire the "OnUsed" event. A few placeable walls can go a long way towards solving this problem. There's a great selection of placeable walls in the Community Expansion Pack. Also... Door Placables set as "static" objects and placed backwards, with the doors facing the wall, can make a reasonable looking wall placable. As a rule if you cannot click-select the door in the toolset's graphic window it's too far off the walkmesh to be usable by the players.


Changing the Door Spawned by Hidden Door Triggers:
You will need to create a new door blueprint and modify the OnHeartbeat script if you want a door other than the default door to spawn.

Before you ask... No... You cannot use the secret doors under "secret object" in the standard pallet. The OnUsed script is wrong. The door placeables in the "secret object" pallet are for use with the Secret Object Triggers in the standard "Triggers" pallet. Use of these triggers is beyond the scope of this post.

  1. First... create a new blueprint for the door appearance that you want to spawn. For example... the default wall door has a wooden appearance. To create a stone door select the Hidden Wall Door and "Edit Copy". Change the appearance, for example, to "Wall Door Stone". I also like to change the name to "Secret Door" (it just looks cooler than the default name). Make a note of the new placeable resref for the next step, modifying the hidden trigger's OnHeartbeat script.
  2. Now place a Hidden Wall Door Trigger or Hidden Trapdoor Trigger placeable object where you want your custom secret door to spawn.
  3. Copy and Paste the below script into the script editor. Change the area highlighted in red (around line 116) to the resref (not tag) of the placable object that you created in step one. Give your new script a unique name. Now go into the properties of your hidden door trigger and replace the OnHeartbeat script with your new script.
  4. Set the destination waypoint the same way you would if you were using a default door. Just place a waypoint at the point where you want the door users to teleport to and give it the same tag with the prefix "DST_" (for example "DST_SecretDoorTag").
The OnHeartbeat script for your Hidden Door Trigger object:
Copy and paste everything in black. The red font you will replace with the resref of your custom door placeable.

//::///////////////////////////////////////////////
//:: nw_o2_dtwalldoor.nss
//:: Copyright (c) 2001-2 Bioware Corp.
//:://////////////////////////////////////////////
//
// This script runs on either the Hidden Trap Door
// or Hidden Wall Door Trigger invisible objects.
// This script will do a check and see
// if any PC comes within a radius of this Trigger.

// If the PC has the search skill or is an Elf then
// a search check will be made.

// It will create a Trap or Wall door that will have
// its Destination set to a waypoint that has
// a tag of DST_

// The radius is determined by the Reflex saving
// throw of the invisible object

// The DC of the search stored by the Willpower
// saving throw.

//
//:://////////////////////////////////////////////
//:: Created By : Robert Babiak
//:: Created On : June 25, 2002
//::---------------------------------------------
//:: Modifyed By : Robert, Andrew, Derek
//:: Modifyed On : July - September
//:://////////////////////////////////////////////

void main()
{
// get the radius and DC of the secret door.
float fSearchDist = IntToFloat(GetReflexSavingThrow(OBJECT_SELF));
int nDiffaculty = GetWillSavingThrow(OBJECT_SELF);

// what is the tag of this object used in setting the destination
string sTag = GetTag(OBJECT_SELF);

// has it been found?
int nDone = GetLocalInt(OBJECT_SELF,"D_"+sTag);
int nReset = GetLocalInt(OBJECT_SELF,"Reset");

// ok reset the door is destroyed, and the done and reset flas are made 0 again
if (nReset == 1)
{
nDone = 0;
nReset = 0;

SetLocalInt(OBJECT_SELF,"D_"+sTag,nDone);
SetLocalInt(OBJECT_SELF,"Reset",nReset);

object oidDoor= GetLocalObject(OBJECT_SELF,"Door");
if (oidDoor != OBJECT_INVALID)
{
SetPlotFlag(oidDoor,0);
DestroyObject(oidDoor,GetLocalFloat(OBJECT_SELF,"ResetDelay"));
}

}


int nBestSkill = -50;
object oidBestSearcher = OBJECT_INVALID;
int nCount = 1;

// Find the best searcher within the search radius.
object oidNearestCreature = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC);
int nDoneSearch = 0;
int nFoundPCs = 0;

while ((nDone == 0) &&
(nDoneSearch == 0) &&
(oidNearestCreature != OBJECT_INVALID)
)
{
// what is the distance of the PC to the door location
float fDist = GetDistanceBetween(OBJECT_SELF,oidNearestCreature);

if (fDist <= fSearchDist) { int nSkill = GetSkillRank(SKILL_SEARCH,oidNearestCreature); if (nSkill > nBestSkill)
{
nBestSkill = nSkill;
oidBestSearcher = oidNearestCreature;
}
nFoundPCs = nFoundPCs +1;
}
else
{
// If there is no one in the search radius, don't continue to search
// for the best skill.
nDoneSearch = 1;
}
nCount = nCount +1;
oidNearestCreature = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, OBJECT_SELF ,nCount);
}

if ((nDone == 0) &&
(nFoundPCs != 0) &&
(GetIsObjectValid(oidBestSearcher))
)
{
int nMod = d20();

// did we find it.
if ((nBestSkill +nMod > nDiffaculty))
{
location locLoc = GetLocation (OBJECT_SELF);
object oidDoor;
// yes we found it, now create the appropriate door, EDIT THE LINE BELOW TO CHANGE RESREF OF SPAWNED DOOR
oidDoor = CreateObject(OBJECT_TYPE_PLACEABLE,"NW_PL_HIDDENDR01",locLoc,TRUE);

SetLocalString( oidDoor, "Destination" , "DST_"+sTag );
// make this door as found.
SetLocalInt(OBJECT_SELF,"D_"+sTag,1);
SetPlotFlag(oidDoor,1);
SetLocalObject(OBJECT_SELF,"Door",oidDoor);

} // if skill search found
} // if Object is valid
}







Monday, July 28, 2008

NWN 1.69 is Out

Bioware has just released the last ever patch for Neverwinter Nights 1, and OH WHAT A PATCH! Ridable horses, amazing new tilesets, and outstanding new models. I especially like the new armor models... very western European.

The downside, of course, being that I now need to completely rebuild Rel Mord in the new system.

Sadly I must bid a fond (and hopefully temporary) adieu to the Community Creature Pack.

Picking the CCP creatures out has been a major headache, but it needed to be done anyway as the newer versions were not compatible with the version 4 I was using anyway. I will be re-adding it as soon as it's up to speed with 1.69.

I'll be running out my new mod for NWNCon4.

Thursday, May 8, 2008


Well, I've made it into the Neverwinter Connection's DM Hall of Fame. Special thanks to all my players, especially Dave_O who would rather run his foot over with a car than forget to review me, and has me on his favorites list like 3 times!!!

We'll be moving our Neverwinter Nights game night to Mondays from now on. I'm always looking for Noobies to join our merry band, so if you would like to join us for some vicarious high adventure please, set yourself up with an account at www.neverwinterconnections.com and PM me. My handle there is "Urk".

Saturday, April 19, 2008

Alcohol Anonymous

The Event with Skunkeen last Saturday was a success, but a less than stellar one.

The module, Alcohol Anonymous, was a very clever one. The build was amateurish and entirely Dependant on DM participation, but the plot and NPCs were amusing and the whole game had a very survival-horror feel, which is... to say the least... right up my alley.

This event was intended for aspiring DMs. As PCs died (and oh how horribly they died) they were given DM passwords and we taught them tricks of the trade as the adventure progressed. After the adventure the survivors also logged on as DMs and we began a question and answer session on how to use the DM client.

Now as a rule I run Open events. No passwords or anything. I'm always happy to field new players, or shall I say, I USED TO BE happy to field new players.

One of our invited players was running X-Fire during the game, and while we were playing an X-Fire Griefer calling himself RagdollKnight piggybacked in.

I've been running events on Neverwinter Connections for about a year, and in all those games... say 20 or more... I've yet to run into a griefer.

So this guy starts wreaking all the havok that a DM can Wreak, and a DM can wreak a lott of havok. He basically ruined the question and answer session.

I wasn't running a dedicated server, so it forced a server reboot and password change to boot him off. Very frustrating.

What is is with Griefers? I simply do not understand the mindset that ruining other peoples experience is somehow intrinsically fun. It seems even more pitiful than it is aggravating. Is your life so empty? Are you so small and useless in RL that you can only assert yourself by being a bully in cyberspace? I shall ask my wife about it. She's a doctoral candidate working on her degree in Psychology.

Anyway... Many thanks to Skunkeen for the event. We'll do it again... but next time it will be a password protected application only event on a dedicated server.

Friday, April 11, 2008

My Brain Hurts!

I understand User Defined Events!

Last night, while working on my Neverwinter Nights campaign, I finally figured out how the bloody User Defined Events work, and they are AWESOME! It's very simple really, you call a user defined by number, and this triggers a script stored in the area, module, or object that the event is stored on. I used it to script a battlefield sequence in my next Broken Heart session. I can't wait to test it out.

Special NWN Event

I have some excitement scheduled for tomorrow. I'm going to be teaming up with the legendary Skunkeen and co-DMing a Neverwinter Nights event geared towards teaching noobies how to DM! If you're interested in learning more about Skunkeen you can see his NWC profile page.

He was also interviewed once for the NWN Podcast. You can hear his interview here. He was on episode 44.