Neverwinter Vault

Expand AllContract All -Site -My Profile -Features

Neverwinter Nights 2

-NWN2 Files -NWN2 Game Info -NWN2 Resources -NWN2 Community

Neverwinter Nights

-NWN Files -NWN Game Info -NWN Resources -NWN Community

Vault Network
RPG Vault
VN Boards
IGN Vault
Vault Wiki
· Age of Conan
· Anarchy Online
· Asheron's Call
· Dark Age of Camelot
· City of Heroes
· D&D
· EVE Online
· EverQuest
· EverQuest 2
· Final Fantasy
· Guild Wars
· Lineage 2
· Lord of the Rings Online
· Middle Earth
· Neverwinter Nights
· Pirates of the Burning Sea
· Rise of the Argonauts
· Star Wars Galaxies
· Tabula Rasa
· The Matrix Online
· The Witcher
· Titan Quest
· Two Worlds
· Vanguard
· Warhammer
· World of Warcraft

Planet Network
Planet Hub

IGN
Games
Cheats
Entertainment

The Web   The Site  



NWN HAKPAKS

- Jump to comments -
Title  Killer Horse Pack v1.1 by Axe
Author  Axe Murderer
Submitted / Updated  11-19-2006 / 06-07-2007
Category  Combos - All-In-One
Expansions  Works on all versions
Description
Axe Murderer's Killer Horse Pack v1.1
=======================================

This is a companion package for use with the CEP2 v1.0 or later. Using it without CEP2 installed in your module won't work. It will not work with CEP1 (any version). It makes it simple to add rideable horses of varying qualities and types into your module without having to do any scripting or blueprint building. The system incorporates horse ownership concepts allowing all rideable horses to be owned by a specific PC or NPC. It also includes a stable subsystem which allows you to designate stable areas that automatically generate steeds for your players to use, as they are needed. The stable subsystem comes complete with a steed merchant who will determine a price for the steeds, adjust it according to some skill checks both the player and the merchant make against each other, then lists all the horses and prices for the PC to choose from in a conversation. Also includes a stablehand subsystem which allows you to make NPCs that charge a fee to tend horses for PCs, keeping them safe from theft.

The package includes an erf file and a hak file containing all the scripts and blueprints required by the system. No CEP2 content is overwritten or replaced. Be sure to read the Readme file in full as it describes the whole system and how to set up and use it.


Note: Multiplayer testing of this package was extreemly minimal.


Version 1.1- Fixed some minor bugs.



Requirements.
==============

You must have the NWN game installed, both expansion packs SOU & HOTU, and
patch version 1.68 or later to use this package. You must also be using the CEP2 v1.0 or later in your module. The KHP system should be compatible with all custom content you add to your module. It will not work with CEP1, you must be using CEP2. It was developed and tested on a module with CEP2 v1.0 and CTP Release 1 both fully installed using all hak paks from both
packages.

Files

NameTypeSizeDownloads
How_I_built_the_demo_module.txtHow_I_built_the_demo_module.txt
Submitted: 11-19-2006 / Last Updated: 06-07-2007
txt6.85Kb206
How I Built The Demo Module...a step by step text description of how the demo module was created from scratch.
NWN_Killer_Horse_Pack_v1.0_by_Axe.zipNWN_Killer_Horse_Pack_v1.0_by_Axe.zip
Submitted: 11-19-2006 / Last Updated: 11-20-2006
zip170.84Kb386
This is version 1.0
NWN_Killer_Horse_Pack_v1.1_Demo_by_Axe.zipNWN_Killer_Horse_Pack_v1.1_Demo_by_Axe.zip
Submitted: 11-19-2006 / Last Updated: 04-18-2007
zip97.75Kb192
This is a demo module showing how to set up the system. I used the hak installation method (see the readme in the main KHP package) to install KHP into the module.

This is the version 1.1 demo module.
NWN_Killer_Horse_Pack_v1.0_Demo_by_Axe.zipNWN_Killer_Horse_Pack_v1.0_Demo_by_Axe.zip
Submitted: 11-19-2006 / Last Updated: 02-14-2007
zip97.49Kb190
This is the demo module that uses version 1.0
NWN_Killer_Horse_Pack_v1.1_by_Axe.zipNWN_Killer_Horse_Pack_v1.1_by_Axe.zip
Submitted: 11-19-2006 / Last Updated: 04-18-2007
zip174.41Kb244
Axe Murderer's Killer Horse Pack v1.1
=========================

This is a companion package for use with the CEP2 v1.0 or later. It makes it simple to add rideable horses of varying qualities and types into your module without having to do any scripting or blueprint building.

The package includes an erf file and a hak file containing all the scripts and blueprints required by the system. No CEP2 content is overwritten or replaced. Be sure to read the Readme file in full as it describes the whole system and how to set up and use it.

Note: Multiplayer testing of this package was extreemly minimal.

Version 1.1- Fixed some minor bugs.


Requirements.
==========
You must have the NWN game installed, both expansion packs SOU & HOTU, and patch version 1.68 or later to use this package. You must also be using the CEP2 v1.0 or later in your module. The KHP system should be compatible with all custom content you add to your module. It will not work with CEP1, you must be using CEP2.

SCORE OUT OF 10
9.75
5 votes
View Stats
Cast Your Vote!

PORTFOLIO
Add this entry to your portfolio so you can track it
Manage your existing portfolios or create a new one.
SCREENS
No Images




You Must Be Logged In to Participate.
Comments (36):

  1  2 Next>

Posted by Axe_Murderer at 2008-05-19 19:04:59    
I am discontinuing support for this package in the wake of patch v1.69 and its native horse riding additions.

Posted by Axe_Murderer at 2007-06-27 20:57:33    
My scripts do not have a definition for that function, so it must be the other includes you have in there that are conflicting. If you e-mail your script to me I'll take a look at it and see if I can figure out where it's coming from. Try compiling without adding the KHP stuff in it and you will probably still see the error.

Just FYI, that error means that your script is including two different libraries that both contain a definition for the same function called RemoveEffects. That function should be defined only in "nw_i0_plot" which is a default Bioware library. It could be that your module has a modified version for that library in it. Modifying Bioware includes is a terribly bad idea and I suspect that is what is happening here -- just guessing tho. Check your module's script list and see if there is a script in there called "nw_i0_plot". If so, you can try deleting it (or better yet just rename it) so the module will default back to the Bioware version. But that could cause more problems than it solves if the module's other scripts are depending on the tweaked version being there.

Posted by Axe_Murderer at 2007-06-07 04:53:51    
I just added a new link above that contains a text file describing step-by-step how I created the demo module from scratch. I figured a specific example document might give those having trouble understanding this stuff some more to go on.

Posted by Axe_Murderer at 2007-06-07 01:55:28    
First off, just so you know, that check for conflicts button in there checks for conflicts between the haks you install not between your haks and the stuff you add directly to the module like scripts or blueprints or by importing erfs. So if you ever get a bad erf that doesn't work right, using that button won't tell you a damn thing about the erf or the stuff it installs into your mod. Erfs don't have 2da files or models or textures etc. in them so it is very unlikely their contents will ever conflict with anything in a hak pak anyway. What you have to worry about with erfs is scripts that conflict with other scripts because they use the same script name, or blueprints that have the same resref as existing blueprints in the module or its haks. It you have an erf with a script in it and you have a script in the module with the same name then when you import the erf you will replace the existing script with the one from the erf -- and that could cause problems naturally. Same deal with blueprints when you import an erf that has those. However, if the erf has a script or blueprint that is also included in a hak, the hak version will take precedence so therefore importing the erf means those scripts &/or blueprints will import but not function since the hak version will override it when the module loads.

With my stuff, it's either erf or hak not both. So if you do the erf method you can ignore all the instructions dealing with the hak. That step you're referring to should have a note on it to "only do this if you did the hak install method..." -- I guess I should have explicitly said that in there. In other words, don't put the hak in the custom content list if you imported the erf. If you did, go back in there and remove it.

Next is the good news... You have apparantly correctly imported the erf and you have correctly set up the stable's scripts and waypoints because horses are spawning for you. The problem is that the stable's variables are set up so that the horses it spawns are not owned by the merchant who will only sell horses he owns.

The OnClientEnter modification is critical and must be done, however if you don't do that step it shouldn't affect the ownership of the horses that spawn in the stables so it isn't related to what you described. That step is necessary because it makes the module give PCs that join the branding iron and reins items and does some important recovery things when a player returns to the module after leaving the module while he was mounted. It is a very very simple step to do. Just find the line in your script that says "void main()" and insert that one line in so that part of the script looks like it's shown in step 2 of the guide. All valid OnClientEnter scripts have a "void main()" line in them somewhere, so go find it and plug in the KHP line as shown in the guide. Then put the #include deal at the top and you're good to go.

Once you get the OnClientEnter script going correctly you will get the branding iron and reins items when you join. Then try this:
Start up the module and go in the stable. Use the branding iron on one of the horses that spawns. It will tell you who owns the horse. If it doesn't say the name and ranch of your merchant then you did the stable area's variables wrong, which is still what I suspect is the problem since that is the only reason the merchant will say he has no horses when there are some present in the area.

All those variables are case-sensitive so if the merchant's ranch variable is set to "ponderosa" and the stable's is set to "PonDerosa", they won't match. Same with the stable's proprietor variable and the merchant NPC's name. Take a look at how the demo module is set up for a good example of how it needs to be done.

To ensure they will match, you can add these two lines into your merchant's OnSpawn script:

SetLocalString( GetArea( OBJECT_SELF), "RanchName", GetLocalString( OBJECT_SELF, "RanchName"));
SetLocalString( GetArea( OBJECT_SELF), "Proprietor", GetName( OBJECT_SELF));

This will make the merchant command the stable to only produce horses he will own as soon as he spawns into the stable at run-time. It will override the settings you manually make to the stable variables in the toolset however. One advantage to doing this is that if you ever change the merchant's name or ranch, the stable will automatically recognize those changes even if you forget to change the variables in the stable area.

Posted by Jennin24 at 2007-06-06 20:24:17    
Well, I double checked those things and they are definately not the problem. It all matches correctly. I am confused on a couple of things. I installed by the erf method and you had written not to do more then one method but then further down in the directions under "setting up your module" you said to add the hak to the top of the hak list in the custom content panel. That confused me because that was method 2 and you said not to do more then one method. Anyways, I checked in the custom content panel under check for conflicts and the hak never showed up there. So I did not do that. The next possible thing that I could have done wrong was under number 2 in "setting up your module". I went to the events panel under module properties and looked at the oncliententer script and what I saw under there looked nothing like what you gave as an example. Long story short, I didn't do anything with that. Other then one of those two things, I am out of ideas of what else I could have done wrong. Are one of those things possibly the problem?? Thanks

Posted by Axe_Murderer at 2007-06-05 22:31:34    
Sounds like you don't have the stable variables set up correctly so the horses that are spawning are not owned by the merchant. Make sure the merchant's RanchName variable matches exactly with the stable area's RanchName variable. Make sure the stable area's Proprietor variable is set to match the name of your merchant (first and last name separated by a space).

Posted by Jennin24 at 2007-06-04 12:43:15    
Hi, I'm a total newbie here and i'm having a problem getting your horse system to work. I have a stable, merchant, not putting a stablehand in yet, and some waypoints. Upon entering the stable some horses spawn but when I talk to the merchant she just says she's sold all of the horses but expects more in a few hours. I've tried this numerous times and I can't figure out what I'm doing wrong.

Posted by Axe_Murderer at 2007-05-26 17:15:10    
Totally separate from every other package. Mine only works with horses spawned from the blueprints I included with it. The Mount and Dismount functions in mine are customized versions of CEP2's stuff and if you don't use my functions to do those things it won't work right. I am not familiar with the other package you're talking about so I don't know how hard it will be to integrate them. I suspect it will be difficult to do.

Posted by Koneko at 2007-05-26 10:28:15    
Excuse me Axe Murderer, but I have a simple question for yourself before I download this. You're a member of the community that I trust with this types of things, but I was wondering if your Horse Pack was meant to be a completely separate entity from Barry's or a companion to it? Both are extremely wonderful and I am rather impressed by each, I just wanted to know if it was possible to combine the perks of both or not.

Posted by Axe_Murderer at 2007-04-18 04:07:26    
Well I made some changes to attempt a fix for the DM possession problem. You can give it a try and see if it works any better now. I also found a couple of minor bugs and fixed them.

Check the readme file it has new information concerning upgrading from v1.0 in the section about installing KHP into your module.

Posted by Axe_Murderer at 2007-04-15 14:08:12    
I will take a look and see if there is anything I can do about it. I suspect that I won't be able to stop that from happening however. There is no way in a script to detect when a DM possesses something and I think when you do it is probably hosing up the effects used to make the horse go into limbo while a PC is mounted.

All I can suggest right now is to avoid possessing the horses. If you have possessed one and the PC mounts it while you are in control I am not sure what will happen, but I would not be surprised if things get messy (2 humans trying to control the same npc is bound to cause some kind of havoc). If you do end up in the situation you described, simply using the DM console to delete or kill the PC's invisible horse should reset the PC so he can get another. If that doesn't work it could be some CEP2 problem too.

Posted by Perigryne at 2007-04-15 06:55:14    Voted 9.75 on 04/15/07
--sorry-- After DM posession of horse, on the next PC dismount, the horse becomes invisible and undetectable (completely unusable), but is still in the object directory of active objects. getting a new horse from that point on yields same result. --horse disappears on dismount and remains invisible.

Other than that - it's a fantastic system. Thank you.
_________________________
Currently working on The World of Caudor

Posted by Perigryne at 2007-04-15 06:51:32    Voted 9.75 on 04/15/07
Having an issue.. I'll test further, but it's multiplayer, and appears to be when a DM takes over your horse while invisible.... I'll confirm and repost when I can prove it.

Perigryne, PWA
World of Caudor
worldofcaudor.com
_________________________
Currently working on The World of Caudor

Posted by Axe_Murderer at 2007-03-14 04:01:00    
E-Mail me your script and I'll take a look at it.

Posted by destinyzalias at 2007-03-13 21:33:02    
I'm a complete newbie here, but I totally need some horses in my module. I used the CEP one, but it didn't aquire to my tastes. Now your horses seem awesome and all, but Im having a problem with compiling my oncliententer script ... #include "_horse_ride_inc" ... has a problem (unknown state in compiler), and i cant figure out how to fix it. Help me out?
_________________________
-Destinyzalias

Posted by Axe_Murderer at 2007-02-14 01:44:21    
OK I added a demo. Link above to download it.

Posted by DM_Spike at 2007-02-11 04:52:39    Voted 9.50 on 02/11/07
After spending 2 days of trying to work out how to set the variables, I finally got it to work.
A demo mod would be very helpful to people with less modding experience.

Once it got working I found it very pleasing to use.

Good work Axe.

Posted by Axe_Murderer at 2006-12-16 21:28:45    
Somebody asked how to make transitions that only the dismounted could go thru, so here is what I gave him:


// Transition Trigger OnEnter script or
// Door OnAreaTransitionClick script
//:://////////////////////////////////////
#include "_horse_ride_inc"
#include "x0_i0_transport"

void main()
{ object oPC = GetEnteringObject();
if( !GetIsPC( oPC)) return;

if( GetIsMounted( oPC))
{ FloatingTextStringOnCreature( "To enter there you must first dismount your horse.", oPC, FALSE);
return;
}

object oDestination = GetTransitionTarget( OBJECT_SELF);
if( GetIsObjectValid( oDestination)) TransportToWaypoint( oPC, oDestination);
}


Posted by Axe_Murderer at 2006-12-08 16:45:13    
It's a piece of cake to write a transition script. Just use the GetIsMounted function from my library and if it returns TRUE, don't let them thru.

Posted by Axe_Murderer at 2006-12-08 16:42:07    
If you only want unique steeds, you will have to write your own stable_on_enter script to spawn them. The only thing I put in related to controlling what steeds a stable spawns is the variable that lets you supress the chance of getting the unique ones.

No, it definitely will not work with the existing CEP dismount function. My system has a totally custom version of both the mount and dismount functions (because that's where all the CEP bugs were located). My functions are directly derived from theirs however so you can compare the two and see the differences.

Posted by RoxyFerret at 2006-12-08 06:09:38    Voted 9.00 on 12/05/06
Axe, have you considered updating this package to include persistence over server resets? I'm certain other PWs would jump on the system more if that were included. Just wondering.

So far our users are enjoying it immensely. It's far superior to the old system we found on the 'vault'.

I'm also curious as to how we can spawn only the unique mounts in a certain area, and if the zep script used in the CEP will work for dismounting yours on transitions.

I know, lots of work, but I'm hoping our questions may help others and make this easier to understand, and therefore more popular.

~ Roxy
_________________________
Antolle ulua sulrim; lle naa haran e' nausalle.

Posted by Axe_Murderer at 2006-12-06 17:16:37    
That sounds like a CEP2 bug to me. You should post that problem in the CEP forum and see if anyone else has seen it. Be prepared to tell them lots of details about the character you used when you saw it (what race, gender, etc.).

Posted by RoxyFerret at 2006-12-06 05:51:51    Voted 9.00 on 12/05/06
I had an odd thing happen: Although my PC looked fine when she mounted her horse the first few times, at some point the model changed to have her torso split from her legs so that the torso remained upon the horse, but her legs were under the horse. I haven't seen if this is permanent yet, and will keep testing.

~ Roxy
_________________________
Antolle ulua sulrim; lle naa haran e' nausalle.

Posted by Axe_Murderer at 2006-12-05 10:57:45    
By the way, the reason I chose to use character name instead of TAG is due to how the branding iron works. When you use that item on a horse you do not own it says "Bob Jones owns this horse" instead of "MERCHANT_32 owns this horse". Plus it keeps KHP independent of other scripts you might wanna use with your merchants that use the TAG to do their thing which is the typical way most people do things.

Posted by Axe_Murderer at 2006-12-05 10:54:13    
Somehow I knew that would be confusing...

The stable produces steeds that are owned by somebody but area's have no character name, thus the Proprietor variable was introduced. The merchant only sells steeds he owns. The stable area's RanchName and Proprietor variables determine who the initial owner of horses spawned by that stable will be (I think if you make them both blank the stable will spawn unowned steeds but I might have taken that out I forget). The merchant will look for horses in the stable that are marked with his character name and RanchName and will only sell those.

Therefore, if you want stable area A which has a merchant named "Bob Jones" who is from the "Jones" ranch occupying it, to make the stable generate horses that Bob will sell, you need to set stable A's RanchName to "Jones" and Proprietor to "Bob Jones".

The idea behind the stable variables here is to allow people to write thier own custom stable spawning scripts to replace the one in the stable_on_enter script which generates the steeds randomly and always for the same owner. By default, the system only allows for the stable to generate steeds for one merchant, or two if they both have the same name and ranch (but I strongly discourage that -- if you think about what might happen with two NPCs and two PCs all in sales conversations at the same time you'll understand why). Since those area variables can be changed on the fly, this allows you to change who the owner of the horses will be as they spawn giving you the ability to spawn steeds for more than one owner (or merchant) in the same stable. You could even set it up to spawn horses that automatically belong to PCs this way -- no purchase necessary. Sort of PC owned stables if you will.

Variable names are a combination of character name and ranch name. For NPCs their ranch name is stored in a variable on them. For PCs the ranch name is their NWN Account name. Thus, all my characters will come from the Axe_Murderer ranch.

Posted by RoxyFerret at 2006-12-05 07:55:39    Voted 9.00 on 12/05/06
Could use a little more help with the documentation. At this point, we have a stable, merchant, and the stablehand. Confusion seems to be exactly what names these variables have to have in order for the horses to be purchasable.

Proprietor name - Is this the name of a NPC, or of the area?
Ranchname - Which NPCs in ONE area have to share this exact name?
NPCs - For variables, are you using tag names or creature names?

The spawning seems to work, and the brand says the horses aren't owned by anyone, but can't be mounted or purchased. The merchant says she has no horses for sale, even when four or more were spawned.

Perhaps a working one-area demo would help.

I love the system; just having trouble getting it started up on our PW.

~ Roxy
_________________________
Antolle ulua sulrim; lle naa haran e' nausalle.

Posted by Axe_Murderer at 2006-12-01 00:05:29    
Ummm -- I meant SteedRestockDelay not SteedSpawnDelay in the posts below. The readme is correct so follow that...

Posted by Axe_Murderer at 2006-11-27 21:34:00    
When you create your variables on the stable area, make sure you name them correctly and get their datatype right. For example, SteedSpawnDelay is not the same as steedspawndelay, and a variable called RanchName but set to type int instead of string means there is no RanchName variable on the stable as far as KHP is concerned.

Posted by Axe_Murderer at 2006-11-27 21:08:43    
They spawn whenever a PC enters the stable and there are no other PCs in the stable. Also the SteedSpawnDelay variable on the stable area specifies the minimum number of rounds that must pass after the previous restocking before the next one will occur.

So if you set the delay variable to 30 rounds, enter the stable (causing a steed restocking) and immediately leave, then the next time it will restock is at least 30 rounds later when you re-enter (assuming of course there are no other PCs in there when you do).

Assuming you have installed KHP correctly, there are 6 conditions that will cause restocking spawns to never happen. They are:
1. If you set the SteedSpawnBlocked variable on the stable area to a non-zero value.
2. Your stable area has no RanchName or Proprietor variable set on it, or if they are present but either of them is set to a blank string.
3. There is not at least one Stable Steed Spawn Point waypoint in the stable (use the one found in the custom waypoint palette under the Waypoints category when you paint it/them in).
4. The SteedSpawnDelay variable on the stable area is set to a value less than 1, or is not present at all.
5. You forget to set the stable area's OnEnter script to "stable_on_enter".
6. You install KHP using the erf install method then edit my scripts or blueprints and phuk them all up.

Note also that there is a 50% chance at each steed spawn point waypoint that no steed will spawn there during a restock of the stable. So if you only have one spawn waypoint placed in the stable, then half the time when you enter you should see no steeds there. I tested with 4 waypoints and found it was pretty rare to see no steeds at all, but it did happen occasionally. Placing more steed spawn point waypoints in the stable will make this less likely to happen.

Posted by death2ux1 at 2006-11-27 20:42:58    
I'm having trouble making the horses spawn. I added the variables for the area properties and put the waypoint and everything and changed the integers around and i can't get them to spawn, how long do i have to wait for them to spawn?

  1  2 Next>

You must be Logged In to post comments in this section.

 
Most recent posts on the MMO General Boards
Analyst: Star Wars: The Old Republic Could...Analyst: Star Wars: The Old Republic Could Sell 3M: more numbers
- last reply by Acao on Aug 15, 2011 06:15 PM
which class will your first character be
- last reply by Blisteringballs on Aug 15, 2011 05:50 PM
New Community Content!
- posted by Vault_News on Aug 15, 2011 05:00 PM
New Community Content!
- posted by Vault_News on Aug 15, 2011 04:00 PM
NWN Idea Database Update
- posted by Vault_News on Aug 15, 2011 03:46 PM
Missing Votes for NWN2 Hall of Fame
- posted by Vault_News on Aug 15, 2011 03:40 PM
Missing Votes for NWN Hall of Fame
- posted by Vault_News on Aug 15, 2011 03:39 PM
Random Questions and game altering suggest...Random Questions and game altering suggestions!!!
- last reply by ArkadyTepes on Aug 15, 2011 03:22 PM
State of the game?
- last reply by LyricOpera on Aug 15, 2011 01:37 PM
Yesterday streaming, now demanding downloa...Yesterday streaming, now demanding download :(
- last reply by Sinane-tk on Aug 15, 2011 10:23 AM
 

   


IGN Entertainment
By continuing past this page, and by your continued use of this site, you agree to be bound by and abide by the User Agreement.
Copyright 1996-2011, IGN Entertainment, Inc. | Support | Privacy Policy | User Agreement | RSS Feeds
IGN’s enterprise databases running Oracle, SQL and MySQL are professionally monitored and managed by Pythian Remote DBA.


NWN2 Hall of Fame

HOF NWN2 UI


View all Hall of Fame entries


Neverwinter Nights 2

TOP NWN2 Modules

NEW Modules

NEW Reviews

NEW INTL. Modules

TOP Hakpaks

TOP Gameworlds

TOP Tutorials

TOP Prefab:Areas

TOP Blueprints

TOP Plugins

TOP UI

TOP Other

TOP Visual Effects

TOP Scripts

TOP Tools

TOP Movies

TOP Models

TOP Characters





Hall of Fame

HOF NWN Modules


View all Hall of Fame entries


TOP NWN Modules

NEW NWN Modules

NEW Reviews

TOP Intl. Modules

TOP NWN Hakpaks

TOP NWN Gameworlds

TOP NWN Models

TOP NWN Portraits

TOP NWN Scripts

TOP NWN Prefabs

TOP NWN Other

TOP NWN Movies

TOP Sounds

TOP NWN Textures

TOP NWN Creatures

TOP NWN Characters