You are here

NWN1 Guide: For DM's and Builders

                               ===================================
                                    Neverwinter Nights Guide:     
                                      For DM's and Builders
                               ===================================

                                          Version 1.2 BETA

                                         By: Tolerance0
                               Email/MSN: tolerance0@hotmail.com

                                         Edos Homepage:
                        http://www.angelfire.com/mt/mandg/nwn/intro.html
                               (does not work and probably never will)

_________________________________________________________________________________________________

E-Mail Policy:

If you do indeed email me, put "NWN Guide" as your subject line. If not,
chances are slim that I will even open the email, let alone reply to it.

You can email me with comments/extra info/mistakes/cheers feel free, but no crap mail.
If you are sending me extra info I will of course give you full credit for your input.
Your email address will not be posted inside the guide unless you specify.

Also make sure that your mail service is accepting webmail from Hotmail, or my message
may never get sent to you.



                    USE CTRL + F TO FIND THINGS YOU ARE LOOKING FOR FASTER
------------------------------------------------------------------------------------------------
                                      Table of Contents:
------------------------------------------------------------------------------------------------
I. Introduction
   1. About
   2. Edos Information
   3. Version Information
   4. Special Thanks

II. For DM's:
   1. Building a storyline.
   2. Know your players.
   3. Keeping your players entertained.
   4. Encounters & Rewards.
   5. Persistent Worlds
   6. DM Resources
   7. DM Responsibilities
   8. My Stance on D&D rules.

III. For Builders:
   1. Making an Area.
   2. Making a World.
   3. Making NPC's.
   4. Making Monsters.
   5. Scripting.
	A. Making Doors/Transitions.      
	B. NPC Walk Waypoints.
	C. Conversations.
	D. Making a Gambling Function.
	E. Objects you can sit in/on.
	F. MMORPG Style Creature Generators.
	G. Healing Locations (Fountains, Wells, etc).
	H. Sundials that tell time.
	I. Wishing Fountain.
	J. Doors that open with levers.
	K. Using Scripts to Describe Areas.
	L. NPCs Initiate Conversations
	M. Tavern Sound Script
	N. Having NPCs Attack PCs
	O. PnP Style Creature Generators
      P. Treasure Respawning
      Q. Exploding Creatures
      R. Repulsion Fields
      S. Level Restricted Areas       
      T. Applying Effects
   6. Advanced Scripting.
      A. Bounty Hunters.
      B. PvP Arenas. (Not included yet.)
      C. Secret Doors.
      D. Glowing Objects/People.
      E. Barmaids/Bartenders.
      F. Commanding NPC's Manually.
      G. Giving NPCs Daily Routines / Custom AI.
      H. Blacksmiths that hammer their Anvils.
      I. Having NPCs Follow PCs.
      J. Training Dojos.
      K. DM: Level Handler.
      L. DM: PC Info Handler.
      M. Waypoint Systems.
      N. Playing Tag.
      O. Henchmen Unleashed.
   7. Objects & Placeables.
   8. Keeping things interesting.
   9. Special Effects.
      A. Visual Effects Listing (VFX_*)
      B. Sound Effects Listing
  10. Think outside the box.
  11. Hak Pak Editing and Custom Content
       i. About Hak Paks
      ii. HakPakFAQ
       A. Custom Character/Monster Portraits
       B. Custom Ambient Music Files
       C. Custom Sound Files
       D. Custom Tilesets
       E. Custom Creatures/NPCs
         -Reskinning a Monster (Not included yet.)
       F. Custom Image Maps
       G. Custom Classes
       H. Custom Items
         -Weapons (Not included yet.)
         -Armor
         -Inventory
       I. Custom Placeables

////////////////////////////////////////////////////////////////////////
Please Note: Any Examples that are used are probably cheesy due to lack
of time and patience to think up great ones for this guide. Sorry!
////////////////////////////////////////////////////////////////////////


Some expressions:
RPG: Role-playing game (smack yourself for not knowing that)
D&D: Dungeons & Dragons
DM: Dungeon Master
PC: Player Character
NPC: Non-player character
PW: Persistent World
RP: Role-play, role-playing
DC: Die-count
HD: Hit Dice
PnP: Pen and Paper (referring to real life modules)



-------------------------------------------------------------------------------------------------
I. Introduction
-------------------------------------------------------------------------------------------------

[ 1. About ]

	First off, thanks for reading. This guide was written to help out and possibly inspire
beginner DM's or starting builders. Hopefully I can help you get a start in the ever expanding
world of Neverwinter Nights. To contact me the information is at the very top of this document.


Random note of version 1.1:

Oh yeah. Since my fingers are numb from playing guitar for the last 2 hours (literally numb, and
literally 2 hours) I'm gonna urge you to go download the following songs and learn to play them on
guitar. Or violin, I saw in a Guns and Roses video on of the guys in the orchestra they hired playing
the solos from their songs. I don't even need to tell you it was badass.

Download (or buy the full CDs):
Steve Vai- Blue Powder, The Audience is Listening
Slayer- Divine Intervention



[ 2. Edos Information ]

Edos is my PW that I host and DM for. It is quite enormous and continuously growing.

Some Edos Features:
-PvP Arena where players can bet on each other.
-Advanced Job System
-Advanced Mercenary and Pet Systems
-Banking and Storage System, Bounty Hunters
-Public message boards, personal houses for PCs, etc
-60 Unique items hidden throughout the land.
-Secret areas and monsters.

Basically, everything that can be done with the NWN engine IS being done with the NWN engine.

For all the information regarding Edos the homepage is at:
http://www.angelfire.com/mt/mandg/nwn/intro.html

Right now the homepage is decently crappy. Give me a while to update it massively.



[ 3. Version Information ]

1.2B- ***CHECK THIS OUT***
      Added FULL Hardcore Ruleset (HCR) support under "Keeping your players entertained." (II.3)
      Added the "My Stance on D&D Rules." section. (II.8)

      Added a few ideas for builders under "Keeping Things Interesting". (III.8)

      Added complete listing of Visual Effects (VFX_*). There's ALOT of them...I never
      knew which to use...so I tested them and made a list for easy viewing.(III.9.A)

      Added complete listing of Sound Effects (no ambient music, but ambient sound and all the rest).
      There's 7568 sounds, please enjoy them. *Section currently INCOMPLETE* (III.9.B)

      ***CHECK THIS OUT***
      Added ALOT of HakPak information, which is basically the key to changing nearly
      every aspect of your NWN modules to anything you can create...literally. (III.11)
      (HakPak)
      -Custom Character/Monster Portraits
      -Custom Ambient Music Files
      -Custom Sound Files
      -Custom Tilesets
      -Custom Creatures/NPCs
      -Custom Items
      -Custom Placeables
      

      Re-arranged some of the scripts and added:
      (Basic)
      -Applying Effects

      (Advanced)
      -Barmaid/Bartenders script is NOW WORKING.
      -Playing Tag

1.10- Added an important note in Conversations section (5.C)
      Added a few more expressions under Table of Contents
      Added a VERY IMPORTANT notice about module corruption (Beginning of "For Builders")
      Added the "DM Responsibilities" section (II.7)
      Added a note about Transitions (III.5.A)

      Re-arranged some of the scripts and added:
      (Advanced)
       -Bounty Hunters.
       -Secret Doors.
       -Glowing Objects/People.
       -Commanding NPC's Manually.
       -Giving NPCs Daily Routines.
       -Blacksmiths that hammer their Anvils.
       -Having NPCs Follow PCs.
       -Training Dojos
       -DM: Level Handler
       -DM: PC Info Handler
	 -Waypoint Systems

      (Basic)
       -Level Restricted Areas
       -Repulsion Fields
       -Exploding Creatures
       -PnP Style Creature Generators
       -Treasure Respawning
       -Having NPCs Attack PCs
       -NPCs Initiate Conversations
       -Tavern Sounds
       -WORKING set of sitting scripts for PCs
       -WORKING Wishing Fountain	

1.00- All sections except "Advanced Scripting" included, updates and addendum's coming soon.
      I decided to release it early without the "Advanced Scripting" section.



[ 4. Special Thanks ]

-All the guys participating in my PW
-GH for being a pwn player and continuously trying to make me the best DM ever :)
-Grand because I hate you (heehee)
-Dom Querom for making a kick ass script collection
-Albert Shih for making a few good scripts I used



------------------------------------------------------------------------------------------------
II. For DM's
------------------------------------------------------------------------------------------------

[ 1. Building a storyline. ]

The storyline is in most cases the hardest thing for a DM to come up with. Its very easy to just
make a dungeon and throw down monsters for the party to kill...but there is no fun in that,
and that is not what being a DM is all about.

When building a storyline, I think the hardest thing to do is to be original. Alot of games have
been made that use the SAME storyline. Save the princess, stop the evil king, or find the buried
treasure are used all too often to keep your players into your story. Granted, the Zelda series
was great, but overuse of the plot nowadays makes it dull and lifeless. Try to come up with your
own storyline. As hard as it may be to believe, an original storyline is not as hard as it seems.
Here is a list of possible plots, and the main characters you'd need to execute it.

Storyline                               Main Characters                                                                    
Abduction                               Abductor, Abducted, Guardian
Adultery                                Deceived Spouse, Two Adulterers
All Sacrificed for Passion              Lover, Object of Passion, Person or Thing 
Ambition                                An Ambitious Person, Coveted Thing, Adversary 
An Enemy Loved                          Beloved Enemy, Lover, Hater 
Conflict with a God                     Mortal, Immortal
Crimes of Love                          Lover, Beloved, theme of Dissolution
Daring Enterprise                       Bold Leader, Goal, Adversary
Deliverance                             Unfortunates, Threatener, Rescuer
Disaster                                Vanquished Power, Victorious Power or Messenger
Discovery of Dishonor of a Loved One    Discoverer, Guilty One
Enigma                                  Interrogator, Seeker, Problem
Familial Hatred                         Two Family Members who hate each other
Familial Rivalry                        Preferred Kinsman, Rejected Kinsman, Object
Fatal Imprudence                        Imprudent person, Victim or lost object
Faulty Judgement                        Mistaken One, Victim of Mistake, Guilty Person 
Involuntary Crimes of Love              Lover, Beloved, Revealer
Kinsman Kills Unrecognised Kinsman      Killer, Unrecognised Victim, Revealer
Loss of Loved Ones                      Kinsman Slain, Kinsman Witness, Executioner
Madness                                 Madman, Victim
Mistaken Jealousy                       Jealous One, Object of Jealousy, Supposed Accomplice, 
Murderous Adultery                      Two Adulterers, the Betrayed
Obstacles to Love                       Two Lovers, Obstacle
Obtaining                               Opposing Parties, Object, maybe an Arbitrator
Pursuit                                 Fugitive from Punishment, Pursuer
Recovery of a Lost One                  Seeker, One Found
Remorse                                 Culprit, Victim, Interrogator
Revenge                                 Avenger, Criminal
Revolt                                  Tyrant, Conspirator(s)
Rivalry Between Superior and Inferior   Superior, Inferior, Object
Sacrifice of Loved Ones                 Hero, Beloved Victim, Need for Sacrifice
Self Sacrifice for an Ideal             Hero, Ideal, Person or Thing Sacrificed
Self Sacrifice for Kindred              Hero, Kinsman, Person or Thing Sacrificed
Supplication                            Persecutor, Suppliant, a Power in Authority
Vengeance by Family upon Family         Avenging Kinsman, Guilty Kinsman, Relative
Victim of Cruelty or Misfortune         Unfortunates, Master or Unlucky Person

Of course all of those are good ideas, but eventually you should learn to come up with your own
plots and stories without having to refer to this list. Keep in mind, nothing is taboo in the
world of DM'ing, unless it is considered "objectionable material" by your players.

Also, plot twists are good...most of the time. Do not over use them, or your players will begin
to expect them, and things will get boring. Plot twists are very well used in murder mysteries,
betrayals, and plots of that nature. You can craft your plot so that the players will fall right
into your trap. Its not as bad as it sounds...having your players misled is often used for
greater purpose. For example, say the party just finished collecting all the parts of an ancient
scepter (eh, you get the idea). Now the villain could come in and take it away after you have
done all the work for him/her leaving the party no choice but to follow him/her to retrieve the
scepter. This is somewhat common, but not a bad idea to incorporate into your stories.

Please note, you DO NOT have to have a pre-determined story when you DM. Many DM's just make it
up as they go along, and it is a very effective, very simple way of doing things. It allows you
to form your plot around the actions of your character as well as let the character themselves
have more room to work with throughout the story.



[ 2. Know your players. ]

Know what your player's personalities are, and their weaknesses. What decisions they would make
if presented with a certain situation. This can be used VERY well to set off side quests or
other possibilities. For example, have the righteous and moral character(s) be approached by
someone in need of assistance. The character(s) will most likely accept the quest and try to
help the person. Now, this is where you can get very creative. You can have the character(s)
that went to help become captured and have the rest of the party do a rescue mission, or you
can have the person captured presented with a jail-break like quest. Either way you can do
alot of different things with this.

Also know what your players like. Don't send hordes of Orcs against the party when you know
for a fact they BORE of fighting orcs. It just leads to a bunch of bored players who decide
to start attacking each other or the NPC's. Not good. Give your players challenging and
exciting puzzles and battles. Give them alot to work with, while still being able to change
things around if you need to.

If you are making a persistent world I heavily advise getting a character info sheet of the
characters participating so that you can plan ahead on side quests that involve them and such.

-------------------------------------------------------------------------------
                              DM NO-NO #1
-------------------------------------------------------------------------------
DO NOT, for any reason pick on a player because you don't like him/her.
Make sure its all randomly done by a dice to find out who exactly gets
the evil curse cast upon them by the evil witch. Only use a particular
character is it in integral to the development or completion of your plot. 
------------------------------------------------------------------------------
                              DM NO-NO #2
------------------------------------------------------------------------------
DO NOT, for any reason give a player overpowered weapons at any point in the
story unless they earned them. Just because he/she is your friend doesn't
mean that the gods of the realm you play in should entrust their heavenly
powers to that character. It just makes it no fun for all the honest and
hard-working characters.
-------------------------------------------------------------------------------



[ 3. Keeping your players entertained. ]

---Puzzles:---
Puzzles are by far one of my favorite things in RPGs. There is no greater joy for a DM than to
sit there watching PC's agonize over a puzzle when the answer is right in front of their eyes.
Riddles are a great puzzle for many players.

Infinite possibilities can happen with puzzles. Puzzles keep the players, as well as DM,
entertained and stop dungeons from getting boring, repetitive, and nothing but monsters.
Use them, and use them well.

---Secrets:---
Personally, I like secrets. It gives players something to search for, and discover with great
joy and pride. For example, my persistent world, Edos, harbors many secrets. It has secret
items, secret areas, secret monsters. Many, many things for my players to discover and rejoice
over. I can't wait until one of the players discovers one of the secret items :D. If you make
secret items, make them unique and only one in existence. It's much funner that way, and gives
the player much more reason to find them.

---PvP:---
Some players may wish to have an arena or PvP function in the game. I think this is very fun
to see players go head to head against each other. Let them fight each other :) it makes
everyone happy.

---Misc:---
Npc interaction, historical notes, and many other things are good to use in your world. Let
them tickle the fancies of your players for no apparent reasons. A small book on gardening
could be quite amusing to players who find it in the local barn. Things like that give players
small little insights into the story you create for them, as well as insights into your head.

---HCR:---

This stands for hardcore ruleset. It was made by Archaegeo and many others in the Bioware community.
It's a GREAT addition to the game, and a very interesting, and very intertaining means of keeping
your modules alive and keeping players intereseted. Instead of writing down all the rules myself, I'm
going use Archaegeo's Manual for the HCR.

**Begin Manual**

HardCore Ruleset (July 29th 2002. 1.7.0)
 
Lead Designer
Archaegeo Neosophy
 
Started June 20th, 2002
Original Manual by Archaegeo Neosophy 
Regularly updated by E.G. Hornbostel, aka Whyteshadow 

Table of Contents
Copyright Information
Overview
Feature Discussion 
  Persistent World Support 
  Character Generation 
  Experience in HCR 
  Death and Dying 
  Resting and Natural Healing 
  Healing Skill and Medkits 
  Searching and Traps 
  Spells and Special Abilities 
  Server Support 
  Miscellaneous 
Installing the HardCore Rule System (HCR) 
  Case 1 : Building a New Module 
  Case 2 : Upgrading a Module not previously HCR 
  Case 3 : Upgrading a Module previously under the HCR 
  All Cases 
Building and Playing with the HardCore Ruleset 
  Subraces 
  Experience 
  Death, Dying and Corpses 
  Resting and Natural Healing 
  Healing Skill and Medkits 
  Searching; Traps and Locks, Creating, Locating and Disarming 
  Spells, Spell-Like Abilities, Familiars and Pets 
  Server Support 
  Miscellaneous 
DM Helper 
When cast on a player 
When cast on a creature 
When cast on a creature or selectable object 
When cast on a door 
When cast without a target 
Wandering Monster System
Summon Creature Spells
hc_defaults : Game settings
Detailed Description of All HCR Components 
  Areas 
    EXAMPLE  hc_fugue_exit  SCRIPT 
  Conversations 
  Creatures : None 
  Doors : None 
  Encounters : None 
  Items 
  Placeables 
  Merchants 
Scripts

Copyright Information
The HardCore Ruleset (HCR) is released for use by Dungeon Masters (DMs) and 
Builders to use to create modules for NeverWinter Nights (NWN) based upon the 
HCR. This code is not released as public domain. Any use of any portion of the 
HCR must retain all credit information, such as the about_credits script and the 
// remarks within the code. Users are granted the right to modify the work as 
needed to function as desired in their modules. Rights are granted to the end 
user as stated above, not to conflict with the agreements contained within the 
EULA.

Before any code not written by Archaegeo is added to the HCR, the author of the 
code is contacted and asked if inclusion of the code within the HCR is 
acceptable. If the author cannot be contacted, the authors code will not be used 
unless it was released with a statement that it could be used as the end user 
wanted.

Infogrames and Bioware are the only entities granted unlimited rights to the 
HCR, in accordance with the EULA that accompanies NWN.

In English, use the code as you need to, but retain credits in it of all names 
that appear, and do not release other versions as HCR. If you have a product 
that works well with the HCR, you are encouraged to have it hosted on the HCR 
site as an add-on product or offer to have it included in the HCR releases.



Overview
The HardCore Ruleset was started on the 20th of June by Arcahegeo. It began with 
the simple purpose of changing how folks died, and moved on from there. Many 
folks have contributed to the development of the HCR, and ideas and suggestions 
are always welcome.

The HCR in its current form has many features, which will be discussed in 
greater depth below. It enhances death, resting, casting, and much more. The 
guiding principle Archaegeo uses to determine whether or not to put things into 
the HCR is twofold:

1)     Does it allow NWN to more closely follow a Sourcebook (SB) rule? Example: 

Arch didn’t want potions to be usable on unconscious bodies, but someone showed 
him the rule in the DMG, so it was added.

2)     Does it enhance play such that players care more for their characters? 

Example: Level 1 is extremely tough under the HCR system, you will likely die, 
and if you do, it costs 450gp minimum to resurrect you, not worth it for a level 
1 character, so you stay dead.  This has the effect of meaning that if you see a 
level 9 character on a true HCR system, you KNOW that character is well earned 
if he started at level 1.  You end up caring for your characters a LOT more.
Anyone is welcome to use the HCR in their module.  If you run a game that’s HCR 
enabled, please place (HCR) in the Server name somehow, so others know you are 
running a HCR server.

Revisions to the HCR come out frequently.  Revisions numbers have no special 
significance other than they are sequential.  If you wish to update each minor 
revision, do so, but it is recommended that you update at least each 0.0.5 revs, 
i.e. 1.3.5 1.4.0, etc.   Of course you are never required to update, you may 
choose to stop at any time you wish and are satisfied with the HCR ruleset.   
Many features of the HCR may be turned off when needed, so play with the ones 
that let you enjoy the game as you wish.

The HCR Homepage is at:

http://nwn.darkemud.com/~darke/HC

The HCR is designed with the following assumptions made about the modules using HCR:
  Difficulty is set to Hardcore 
  Experience slider is set to 0% 
  Server Vault characters only 
  ELC On 
  ILR Off. 
  Full PVP 
  Time scale default

 
Feature Discussion
This section will discuss the various features of the HCR.


Persistent World Support
So long as the server remains online, the status that a player leaves the world 
in is the status the player will return to the world in. So if a player is dying 
at -5 hp and they quit out of the game, they will return dying at -5 hp. This 
also holds true if the server is restarted from a saved game.


Character Generation
When a character with 0 experience points enters the game, they are stripped of 
all items, and given the PHB amount of gold for their class. The player 
character may now purchase basic items by clicking on the HCR Signpost (custom 
placeable item). You may either choose to place your start point in the _Base 
area with a one-way portal to your module's actual start area or create your own 
start area with the same properties.


Adjusting the Minimum Character Level for the Module
You can set your module up so that all characters start with a minimum level.


Subraces
Subraces are supported. Subraces which require an ECL (effective character 
level) are not included.


Experience in HCR
HCR is meant to be played with the modules experience slider set to 0.  
Experience in HCR is now handled per the DMG pg 165. The current Bioware system 
takes into account Familiars, Summoned Creatures, Animal Companions and Henchmen 
when calculating your average level. Plus it bases exp on the individual (and 
pets) level and doesn't do a party split of the EXP. In fact, a single creature 
actually gives more exp in a larger party with pets than a single pc fighting 
solo.
 
If the CR of the creature is 8 more or less than the Average party level, they 
will gain 0 experience.  8 CR below is no challenge, 8 CR above they should be 
unable to defeat, so the DM should award exp in that case.
Henchmen count as players in regards to XP division.


Leveling Up and Trainers
Level trainers (turned on by default) are now supported. When turned on, a 
person must go to a trainer to level. If he/she levels without going to a 
trainer he/she will lose that level and must go to the trainer to regain it. 


Death and Dying
Death and dying follows what is defined in the Player Handbook (PHB) pg 129 as 
closely as is possible.

When a player takes damage that reduces them to 0 hp, they are DISABLED.  While 
disabled, a player receives an 80% movement penalty, is Slowed, and is Cursed 
with -5 pts to all stats save constitution and charisma.

When a player takes damage that reduces them between -1 and -9 hp, they begin to 
die.  They fall to the ground, and a Death Corpse (DC) appears beside them.  
Everything not equipped on the character, including their gold, appears on the 
DC.  Anyone can loot these items, the intent being that your party members can 
use the cure potion you have on your body to heal you.

Once a round (6 sec) there is a 10% chance that you will STABILIZE.  If you do, 
you stop bleeding, if not, you take 1pt of damage.  Once stabilized, there is a 
10% chance per hour (2 min by default timer) that you will enter RECOVERY, if 
not, you take 1pt of damage.  Once in recovery, you have a 10% chance per day of 
beginning to heal normally.  While in recovery, you suffer the exact same 
penalties as when disabled.

If you heal ANY while -1 to -9, you automatically jump to a stable heal state.  
You will take no more damage and are under the same effects as when in Recovery.
Once you reach -10 hp, you are dead.  All equipped items join your Death Corpse, 
along with the Player Corpse Token (PCT).

When you die, you get one automatic roll to see if your Deity chooses to notice 
your passing and resurrect you.  There is a 5% chance this will happen, +1% per 
4 levels.  If not, you are off to the Fugue Plane.

One on the Fugue Plane, you are able to move, but not attack anyone.  You stay 
here till you decide you are tired of waiting, or till you get resurrected (See 
below)

You now keep all your worldly possessions when you enter the fugue plane. 
However, if anyone opens your death corpse, all your possessions, except the 
fugue robe, will be instantly transported to your death corpse. When your 
deathcorpse is closed, or when your corpse token is placed in someone's 
inventory, all your items are once again put back on your character (except 
anything that was removed by the looting player). This feature was added so that 
players do not loose their hard-earned items on a full server reset. Note: you 
must be standing still while the looting player closes your corpse, or your 
items may not transfer over. To regain these items, the looter must open and 
close your corpse again. 

Back in the real world, your corpse may be dragged by anyone who picks up your 
PCT. It weighs 130lbs.  When they pick up your PCT, your DC goes to the Storage 
area, making it look like they picked up your corpse.  When they drop the PCT, 
your DC reappears where they drop it.

The PCT may be activated targeting a NPC cleric of level 9 or higher.  The NPC 
cleric will raise the dead person, if the person using the PCT has 50gp*level of 
NPC cleric for raise dead, 70*level for resurrection and 90*level for true 
resurrection.  Raise dead and Resurrection have an additional 500gp cost, and 
true resurrection has an additional 5000gp cost, so 950gp minimum.  (Thus its 
usually not financially feasible to raise a level 1 person). When resurrected by 
any means other than Deity, you lose 1 level, going to the middle of the 
previous level.  If level 1, you lose 1 hp.  BUG: If you are multiclassed and 
lose a level, it bugs your character if you are only 1/1 in level. Will be fixed 
soon.

When you return to life, you appear in the vicinity of your corpse and your corpse vanishes.

Henchmen are now removed from service before you are transported to fugue so that they do not accompany you there. 


Resting and Natural Healing
You can rest in game once every 24 hours (48 min). If you have a bedroll, that 
time becomes every 8 hours (16 min). This is done so that casters do not just 
cast all their spells, rest for 30 seconds and then rinse and repeat. 
Quitting and returning does not reset this timer. 

If you are using the FOODSYSTEM you need food on you to be able to rest. (Cant 
rest on an empty stomach you just toss and turn all night). 

When you rest, you only heal 1 hit point per level instead of full heal.
This prevents fighters from attack, rest, attack sequence. 


Rest Button
When your character can rest, the rest button will now blink. This way, Any 
spellcasters can safely cast all his/her spells right before resting. 


Resting In Armor
Resting in Armor with a total bonus of AC 6 or more will produce fatigue (-2 to 
Str, -2 to Dex, walk only). Resting in armor while fatigued will produce 
exhaustion (-6 to Str, -6 to Dex, slow walk only). 

Understandably, this isn't 100% PHB behavior, but PHB behavior requires querying 
an armor's Armor Check penalty. Bioware, in their wisdom failed to supply us 
with any method that would give us this much needed data. 


-Healing Skill and Medkits-


Healing
When using the HC Healing kits, the Healing skill now follows the PHB. Healing 
only serves to stabilize anyone who is bleeding to death, allows the healer to 
attempt to cure poison or disease (on a successful heal check), or allows the 
healer to attempt long term care. 


Scroll and Potion Creation
The Magic Item Creation System Add-on allows mages to create scrolls and potions 
if they have enough money and XP. For detailed instructions on how to use this 
addon, please read the MagicItemCreationSystem.txt file in the HardCoreERFMI.zip addon file. 


-Searching and Traps-


Searching
A new search and trap system has been introduced as of release 1.7.0 to better 
emulate PHB rules and to get rid of the automatic "Take 20" roll. In order to 
detect traps, a player must now use a "Search Tool". This tool completely 
replaces the NWN search button. When HCRTRAPS is set to 1, this tool is 
automatically given to any players that don't have one when they log in. 


Secret Doors
Secret doors have been introduced that work with the search tool. These secret 
doors are also passively detectable by elves. Any elf who walks within five feet 
of the door may discover a secret door if a successful search check is made. 
Builders adept at scripting may also use this tool to allow players to find 
hidden items. Simply insert your search code in the preEvent or postEvent hooks 
(see tablescriptsevenrow on event hooks). 


Traps and Locks
When using this system, in order to disarm traps or open locks, the player must 
now use the HC "Thieves' Tools". 
Traps of DC 21 or more may only be dectected and disarmed by Rogues. 
You may not use the thieves' tools if you are untrained in disarm trap or 
unlock. Do so only at your own risk.

 
-Spells and Special Abilities-


Spell Changes
The Summon Creature line (I-IX) now lasts the duration given in the PHB, i.e. 1 
round per caster level. (Plus 1 round to make up for NWN Game mechanics).  If 
you want this to last longer, you may set SUMMONTIMER to the number of 
rounds/level you want it to last.  This change does not affect Familiars, which 
still last till dead or you rest.

There is now a "Summonin Creatures book" that allows a caster to choose what 
creature to summon. 

The Cure <blank> Wounds series of spells has been modified such that they do not 
cure for maximum when cast on Players.

The spells Raise Dead and Resurrection have been modified to apply the 
resurrection penalty of level loss.


Material Components
If you set MATERCOMP in hc_defaults to 1 you will turn on requirements for 
material components. Note, if you choose to use them (I recommend it) you must 
also install the add-on Material Components (HardCoreERFMC.zip) if you did not 
download the Full Hardcore set.

When material components are turned on, Clerics and Paladins must now carry a 
holy/unholy symbol.


Wild Magic and Null Magic

No, not druid spells.

Wild magic is magic gone awry -- usually due to the magical nature of the area 
(such as a planar area) or perhaps due to some really powerful wards and glyphs. 
The possible effects are random (and not always good or bad). You may place the 
wild magic effect upon your whole module, an area or several areas, or an object 
(creature, placeable, item, etc).

Null Magic is simply that... for some reason, the area/object/creature nullifies spells.


Sound Familiar?
When a Familiar dies, the familiar's master will now lose 200xp x level of the 
owner. The owner will be given a chance to avoid half the penalty by making a 
successful Fortitude check. 

Feeding a familiar will no longer heal it fully. Sorry, but the ability to 
spontaneously heal is reserved for Artifact Familiars. Familiars now heal as 
PC's do (1 hp per hit dice) when resting. 

Summoning a familiar is free for the first time. Any subsequent summons cost 
100gp per the PHB. 

If you feel your familiar is getting a bit too daring, simply unsummon it. 


Animal Companions
Animal Companions are now created to be 1 hit die greater than the player. 


Turning Undead
Evil Clerics may now dominate the most powerful undead creature that was 
supposed to be destroyed. The rest of the undead that were meant to die will now 
follow the cleric. 

Determining the turning levels for pure Paladins and Paladin/Cleric multiclass 
is now correct as per PHB p. 56 (fixes a Bioware bug). 


Paladin Powers
The Paladin now has the power to detect undead. It's per the PCB, except for 
lasting auras. 

The Paladin has an aura of courage that he can activate once he reaches level 2. 
It lasts for 2d6 rounds. 


-Server Support-


Login message
A login message appears to all players when logging in.


Locking the Server
Say your playing along, and you like your current grouping, or you don't want 
new players for the moment? Simply use the command line (hit ` to bring it up) 
and type:


To Lock the server: 
dmsetmodulevarint LOCKED 1
To unlock the server:
dmsetmodulevarint LOCKED 0


DM reservation system
By setting DMRESERVE in hc_defaults to some number greater than 0, the game will 
limit the number of players to that number, regardless of what Maxplayers is set 
to on the server.  This allows the DM to always have a slot to log into.


HCR Helper
There is a new tool for DM's called the HCR helper. This tool allows the DM to 
turn HCR settings on or off on the fly, or to change HCR settings on the fly. 
Feel your party isn't making enough money to level? Lower leveling costs! It's 
that simple! Monsters giving too much XP? As long as you didn't place them by 
hand, simply change the XP settings at will! And you get all of this for the low 
price of... FREE! Act now and we'll even throw in this manual! 
Be very careful, though, as some settings would be very bad to change under 
certain circumstances... such as turning off the LOOTSYSTEM off while someone is dead. 


Single Character Servers
A new setting in hc_defaults (SINGLECHARACTER) can be turned on to enforce each 
player (via CDKEY) to play with only one character. The restriction lasts until 
the next full server reset, upon which the player now must play with only the 
first character he logs in as. 


Player Killer Tracking and Banning
A PK Tracker system  Setting PKTRACKER to a number higher than 0 in hc_defaults 
will make it so that if anyone kills more PC's than that number, they are booted 
from the game and cannot get back in in any form till the server resets.  If 
TELLONPK is set to 1 in hc_in (default) then all dm's are told anytime a player 
kills a player.  Note that PK's against members of your own party do not count 
against your total allowed (whoops, fireball)


Persistent World Database
A Persistent World Database system has been added. This system allows you to 
keep track of specific variables you would like to keep between server resets. 


-Miscellaneous-


DM Helper
If you downloaded the full Hardcore file, or installed the DM Helper add-on 
package, all DM’s are given a DM Helper upon login. (See DM Helper below)


Player DM's
If you have a player's Public CD Key, you may set him/her up to be a player DM. 
What this means is that they may use the DMWand and HCWand. 


Player DM's
DM's may now use the HCRHelper to set a "player" DM. This is a player for whom 
the HCRHelper and DMHelper will function. You must know the players public CDKey 
to set them as a player DM (can be yourself) and you can get that info via 
DMHelper. So now when you have to leave, you can leave a player in charge if you 
trust them. Or if your party is one member short, you can play as a PC and still 
have DM controls. 


Event Hooks
Event hooks are a great way to add custom code to your modules, and yet make it 
very easy to upgrade from HC version to HC version. As long as you do not touch 
the base files and put any modified code in the event hooks, upgrading to a new 
HC module should be very quick and very painless (perhaps not as painless as a 
wax job, but it's getting there). 

Event hooks can now be used to completely bypass HCR behavior. 


Timestamps
There is now a new function called SecondsSinceBegin() that returns the number 
of seconds since the server was originally started, if you are using the 
persistent world log dumps. If you are not using the persistent world dumps, 
then it will return the number of seconds since the server was last re-started. 


Potions
There are four new potions that may be used on others rather than just self. 
They are the Cure <blank> wounds series. They appear under miscellaneous since 
Bioware has potions hardcoded as self only. These potions cost IAW the PHB. Its 
strongly recommended you remove the normal cure potions from vendors and just 
use the improved ones.


Sittables
Any item may be made sittable upon by addition of the hc_pc_sittable script 
(hey, its cheesy, but I liked it).


Summoned Monsters and Random Encounters
An add-on summon monster system adds more than 200 creatures to the possible 
results when casting Summon Creature. A wandering monster system is available,
allowing you to set the strength and chance of wandering critters when players rest.


Communication
An add-on bulletin board system is available. at this link: 

http://nwn.darkemud.com/~darke/HC/download.htm


Natural Light Sources
Natural light objects have a duration per the PHB, duration settable by 
BURNTORCH in hc_defaults. You would want to remove all NWN torches from the 
game. HC Torches are dimmer so that a lantern can be brighter than a torch.


Grenade Like Weapons and Oil Flasks
Oil, Holy Water, Alchemist's Fire and Acid Flasks can be thrown per phb pg 109, 113, 114, and 138. 
Players may use a flask of oil to create a campfire that they can sit around.


Where's the beef?
Players may use a skinning knife to carve meat from dead animals and then cook 
it on a campfire.


Monster and NPC Corpses
Tired of watching seeing your awesome kills simply vanish into thin air, only to 
leave tons of loot in a tiny little bag? 

Worry no more! When monsters or NPCs die, they leave their corpses behind. Use 
this to search for loot instead of the loot bags. 


Installing the Hardcore Rule System


The HCR system is distributed in three formats. HardCoreFull.zip, HardCoreBase.zip and HardCoreERF.zip. 


HardCoreFull.zip
HardCoreFull.zip contains all Hosted add-ons, except for the Purple Rose Inn. It 
contains all the hardcore scripts and items in one handy little module.


HardCoreBase.zip
HardCoreBase.zip contains the basic Hardcore scripts. If you would like any of 
the Hosted add-ons included you must download the appropriate add-on file (see 
the Download page for a complete list of add-ons)


HardCoreERF.zip
This file contains all the scripts, custom objects and other custom HC required 
items included in the HardCoreBase.zip file. The ERF distribution is the 
distribution set as a set of 6 exports (ERF) files, broken down as follows:
ERF1 : The hcr files.  All of the scripts except for the DM Helper
ERF2 : Conversations : in this case its just the DM Helper.
ERF3 : The Items : All of the special items associated with HCR
ERF4 : The Placeables : All of the special HCR Placeables
ERF5 : The Merchants : Currently just the Newbie Merchant
The rest of this section describes different methods of implementing HCR in 
different situations.  I STRONGLY recommend you read the rest of this 
documentation first before you begin installation.


Case 1 : Building a New Module
So you’ve decided to build a new module using the HCR system, good for you.  
You’ve chosen the easiest method of using HCR.  Just grab the HardCoreBase.zip, 
uncompress it in your modules directory, read this documentation, and begin 
building.  Good luck.


Case 2 : Upgrading a Module NOT previously HCR
So you’ve read all about the HCR and decided it’s the ruleset for you, 
fantastic.  Since you’ve never used the HCR before, you’ve got it pretty easy 
when it comes to converting.  You have two options:
1)     Grab the Base zip and export all areas in the module your converting, 
then import them into the HardCore Base module. (Super easy)
2)     Grab the ERF set, and import the ERF’s into your module.  Be aware, at 
this time there is a bug that if you choose to overwrite a file that already 
exists, the Toolset might add all kinds of characters to the files.  Since 
you’ve never used HCR before, the only files you should have to overwrite are 
the ones that begin with: nw_'.  So import away.  Once you are done importing, 
you must place the scripts in the areas shown in the SCRIPTS section of this 
document.  I.e., hc_entering goes in Module Properties (in the Edit menu), 
Events, OnClientEnter.


Case 3 : Upgrading a Module previously under the HCR
It use to be hard for you, but now your life has gotten a lot easier.  As of 
version 1.3, there is a script called changed_files which lists ALL of the files 
that were changed in any way since the previous version.  

The easiest way for you to upgrade is to either cut and paste from the new file 
to the existing one in your module or to delete the existing file in your module 
and import the new file.  This is MUCH faster than importing the entire ERF sets 
and then finding out where the Toolset added extra bugs.


All Cases
For all cases, there are some things to bear in mind.

If you have any existing scripts in any of the blocks that hc_ scripts need to 
go, you may have to mesh them.  This is the hardest case.  Most of the time the 
hc files can just replace what's there, but if there is something special in the 
existing file (i.e. the campaign modules) you'll have to do some meshing, and 
that requires some knowledge and is beyond the scope of this document.
One ideal way to build using the HCR system to make it easier to upgrade is to 
build your module separate of the HCR system, and then mesh the two anytime you 
upgrade your module, or a HCR revision comes out that you need.

Be sure to keep meticulous change records on any scripts you need to change to 
make a feature in your world that’s not a part of the HCR so that when you go to 
upgrade, you can more easily do so.


Building and Playing with the HardCore Ruleset
This section will discuss the various features of the HCR in detail.


Subraces
To use a Subrace, you must pick the base race (i.e. Elf) and then click on the 
Subrace button and type the subrace name EXACTLY as it is on the "Sub Race" 
column in the table below (i.e. Sun Elf): 

Base          Race       SubRace   Affects Gameplay?
Dwarf         Gold        Dwarf          No
             Shield       Dwarf         Yes
Elf           Moon         Elf           No
              Sun          Elf          Yes
              Wild         Elf          Yes
              Wood         Elf          Yes
Halfling   Strongheart   Halfling       Yes
            Lightfoot    Halfling        No


Experience in HCR
If you plan on using the HCR XP tables, please set module's experience slider to 0. 

Experience in HCR is now modeled after the DMG pg 165. The current Bioware 
system takes into account Familiars, Summoned Creatures, Animal Companions and 
Henchmen when calculating your average level. It bases experience on the average 
party level (including pets and summoned creatures) and doesn't do a party split 
of the EXP. In fact, a single creature actually gives more exp in a larger party 
with low-level pets than a single pc fighting solo. 

Please note that as per the DMG tables, no experience is awarded if the 
individual creature's CR is either 8 points above or below the average party 
level. This is because anything below 8 will be no challenge at all. Anything 
above 8 would be literally impossible, and so defeating such an encounter would 
require special DM intervention (or scripts). A good example of this would be 
the Red Dragon in Chapter 3 of the official SP campaign. Unless weakened, this 
encounter would almost surely be impossible to defeat with a single character at 
level 16. Because a special device was needed, full XP for the encounter should 
not be given, and the DM/Builder should decide what a fair XP value should be. 
The rate of experience gain in HCR is controlled by two variables in 
hc_defaults. One is BASEXP. The other is BONUSXP. 

BASEXP is used to calculate a creature's base experience points based on its CR. 
Setting it to 300 will give you numbers that match the DMG. BASEXP is set to 75 
by default. This value was chosen due to the ease at which most players are able 
to dispatch a CR 1 creature with the current BW palette of creatures. If you 
know that your module will consistently be played by four or more players, you 
may want to raise this value a little. 

BONUSXP adds experence after the fact. It can be used to speed up XP gain in your campaign. 

You must play test your module to get the feel for what is right for your 
desired progression.  (This could not be stressed enough). 

To set up a module to behave similar to the NWN default of 10%, just set BASEXP 
to 30. (Many thanks to Helz and Mmealman for the base for this code and to 
Whyteshadow for optimizing it). This allows you to have the same advancement as 
normal NWN, but it does not reward larger parties (other than safeties in 
numbers), neither does it reward anyone for summoning low-level creatures. 
As a player, you now must consider: do you limit your party size and have more 
risk, or do you go with a large party and have less risk, but less reward? 
As a DM/Builder, this system also allows you to control exactly how much exp 
will be available in a module. 


Leveling Up and Trainers
By default, HC requires that players go to a level trainer to gain a level. 
Builder/DM may turn this on or off by setting the LEVELTRAINER variable to 1 
(default) or 0 respectively. 

With LEVELTRAINER turned on, and a player levels without first going to a 
trainer, the player will lose that level, and must go to the trainer to regain 
it. All experience gained until then is lost. 

Cost to train is 1000 GP x Current Level, but may be changed with the LEVELCOST variable. 


Death, Dying and Corpses
Author's note: Currently this section is exactly the same as the one in feature 
discussion, at least until I can figure out how to separate usage vs. feature 
description on this complex issue. 

When a player takes damage that reduces them to 0 hp, they are DISABLED. While 
disabled, a player receives an 80% movement penalty, is Slowed, and is Cursed 
with -5 pts to all stats save constitution and charisma. 

When a player takes damage that reduces them between -1 and -9 hp, they begin to 
die.  They fall to the ground, and a Death Corpse (DC) appears beside them.  
Everything not equipped on the character, including their gold, appears on the 
DC.  Anyone can loot these items, the intent being that your party members can 
use the cure potion you have on your body to heal you.

Once a round (6 sec) there is a 10% chance that you will STABILIZE.  If you do, 
you stop bleeding, if not, you take 1pt of damage.  Once stabilized, there is a 
10% chance per hour (2 min by default timer) that you will enter RECOVERY, if 
not, you take 1pt of damage.  Once in recovery, you have a 10% chance per day of 
beginning to heal normally.  While in recovery, you suffer the exact same 
penalties as when disabled.

If you heal ANY while -1 to -9, you automatically jump to a stable heal state.  
You will take no more damage and are under the same effects as when in Recovery.
Once you reach -10 hp, you are dead.  All equipped items join your Death Corpse, 
along with the Player Corpse Token (PCT).

When you die, you get one automatic roll to see if your Deity chooses to notice 
your passing and resurrect you.  There is a 5% chance this will happen, +1% per 
4 levels.  If not, you are off to the Fugue Plane.

One on the Fugue Plane, you are able to move, but not attack anyone.  You stay 
here till you decide you are tired of waiting, or till you get resurrected (See below)

Back in the real world, your corpse may be dragged by anyone who picks up your 
PCT. It weighs 130lbs.  When they pick up your PCT, your DC goes to the Storage 
area, making it look like they picked up your corpse.  When they drop the PCT, 
your DC reappears where they drop it.

The PCT may be activated targeting a NPC cleric of level 9 or higher.  The NPC 
cleric will raise the dead person, if the person using the PCT has 50gp*level of 
NPC cleric for raise dead, 70*level for resurrection and 90*level for true 
resurrection.  Raise dead and Resurrection have an additional 500gp cost, and 
true resurrection has an additional 5000gp cost, so 950gp minimum.  (Thus its 
usually not financially feasible to raise a level 1 person). When resurrected by 
any means other than Deity, you lose 1 level, going to the middle of the 
previous level.  If level 1, you lose 1 hp.  BUG: If you are multiclassed and 
lose a level, it bugs your character if you are only 1/1 in level. Will be fixed soon.

When you return to life, everything on your Death Corpse is put back on you and it and the PCT vanish.


Resting and Natural Healing
You can rest in game once every 24 hours (48 min).  If you have a bedroll, that 
time becomes every 8 hours (16 min).  This is done so that casters do not just 
cast all their spells, rest for 30 seconds and then rinse and repeat. 


Quitting and returning does not reset this timer. 
If you are using the FOODSYSTEM you need food on you to be able to rest.
(Cant rest on an empty stomach you just toss and turn all night). 

When you rest, you only heal 1 hit point per level instead of full heal.
This prevents fighters from attack, rest, attack sequence. 

Only one person per party may rest at any one time. This is to prevent spellcasters
from losing their chance at rest when other party members finish resting before them. 


Resting In Armor
Resting in Armor with a total bonus of AC 6 or more will produce fatigue (-2 to 
Str, -2 to Dex, walk only). Resting in armor while fatigued will produce 
exhaustion (-6 to Str, -6 to Dex, slow walk only). This option may be turned off 
by setting RESTARMORPEN to 0. 

Understandably, this isn't 100% PHB behavior, but PHB behavior requires querying 
an armor's Armor Check penalty. Bioware, in their wisdom failed to supply us 
with any method that would give us this much needed data. 


-Healing Skill and Medkits-


Healing
If you have the healing skill and a medicine bag, you may now attempt to 
stabilize anyone who is bleeding to death, attempt to cure poison or disease (on 
a successful heal check vs Disease DC), or attempt long term care. 
In order to attempt long term care, the healer must use the healing kit on an 
healthy person. Healthy means no poison, no disease, and the person recieving 
care has at least one hitpoint. 

A healer may not apply long term care upon himself.

To use the healing kit, right click on the healing kit, choose "Unique Power", 
then point at the person you would like to apply healing to. 


Scroll and Potion Creation
The Magic Item Creation System Add-on allows mages to create scrolls and potions 
if they have enough money and XP. For detailed instructions on how to use this 
addon, please read the MagicItemCreationSystem.txt file in the HardCoreERFMI.zip addon file. 

-Searching; Traps, Locks, Creating, Locating and Disarming-


Searching
The search tool can be used by Builders adept at scripting to allow players to 
find hidden items. Simply insert your search code in the preEvent or postEvent 
hooks (see the chapter on event hooks). 


Secret Doors

Builder: 
  To add secret doors, simply add a "secret door placeholder" at the location 
  you would like your secret door to apear. 
  Do NOT change the name. Hovever, change the tag to whatever you want it to be. 

  Create a destination waypoint. Change the waypoint's tag to dst_ + "tag of 
  secret door placeholder". For example: if your secret door placeholder's tag 
  is "secret_big_treasure_inside", the destination waypoint should be 
  "dst_secret_big_treasure_inside". 

  Make sure your waypoint is facing the direction that you would like your players to face. 

Player: 
  You do not have to be a rogue, nor do you need any points in the Search skill, but it helps. 

  Approach within ten feet of where you think a secret door may be located. 
  Use the search tool. If you make a successful DC check vs the secret door (and 
  if there actually is one), then a message will appear on your message box 
  indicating that a secret door has been found. 

  The secret door will not appear as a visible or tangible object, but rather as 
  an invisible object which you may have to scan for (with your mouse) in the 
  surrounding area. The "door" will also disappear in 60 seconds. These two 
  features exist so that your efforts will not help other parties in the game. 

Traps
While using this system in regard to traps, traps of DC 21 or more may only be dectected by Rogues. 

To use this system, 

Builder: 
  Set HCRTRAPS to 1 (default). 
  Add 100 to the Detect DC of all the traps in the game. For example, a trap 
  with a detect DC of 25 should now be set to 125. 
  Add 100 to the Disarm DC of all the traps in the game. If its disarm DC is 30, 
  then set the Disarm DC to 130. 
  Add 100 to the Unlock DC of all the locks in the game. Example, a 20 DC lock 
  (PHB Minimum) should now be 120. 

Player: 

Searching for Traps: 
  Stand within 10 feet of where you think the trap is 
  Activate the Search Tool. Two ways to do this. 
    1. Put the tool in a quickbar slot. Click on the slot or press slot function 
    key. 
    2. Right click on the search tool. Select "Unique Power Self Only". 
  Except for visually revealing traps to the player on a sucessful DC check, no 
  other feedback is given. This is because detect trap rolls are the DM's 
  domain. 


Disarming Traps 
  First you must personally detect a trap. Having your level 20 rogue buddy do 
  it for you will not work. 
  Activate the Thieves' Tools. Two ways to do this. 
    1. Put the tool in a quickbar slot. Click on the slot or press slot function 
    key. Point at the item you wish to disarm. 
    2. Right click on the tool. Select "Unique Power". Point at the item you 
    wish to disarm. 
  Caution: If you fail your disarm check by -5 or more, you will trigger the 
  trap. 


Picking Locks 
  Activate the Thieves' Tools. Two ways to do this. 
    1. Put the tool in a quickbar slot. Click on the slot or press slot function 
    key. Point at the item you wish to unlock. 
    2. Right click on the tool. Select "Unique Power". Point at the item you 
    wish to unlock. 
  Caution: If you fail to pick your lock, there is a chance that you may break 
  your tools (Lock DC / 2). 


-Spells and Special Abilities-


Material Components
In order to use material components with HC, you must set MATERCOMP to 1, then 
install the Material Components addon if you did not download the Full Hardcore 
set. 

When material components are turned on, Clerics and Paladins must now carry a holy/unholy symbol. 


-Table of Spells Requiring Material Components-


Spell                    Components                 Total Value (GP)
Circle Of Death          Crushed Black Pearl        500
Create Greater Undead    Large Black Onyx           500
Create Undead            Small Black Onyx           250
Greater Stoneskin        Diamond Powder             500
Identify                 Pearl Infusion             100
Mordenkainen's Sword     Miniature Platinum Sword   250
Raise Dead               Small Diamond              500
Ressurection             Small Diamond              500
Restoration              Tiny Diamond Powder        100
ShapeChange              Jade Circlet (Focus, Worn) 1500
Stone Skin               Little diamond powder      250
True Seeing              Mushroom Ointment          100


Wild Magic and Null Magic

To activate wild/null magic, you must download the HCR Spell System Addon then 
apply the SetWMState() function on all the areas, items, creatures, and objects 
that you would like the null/wild magic applied to. 


The function is defined as: 
void SetWMState(object oTarget, int nState, int nAmount=1)

ParameterDescription
oTarget
The target area, object, etc. that you would like to apply wild/null

nState
The state you wish to modify. Either WM_NORMAL, WM_NULL, WM_WILD

nAmount
The strength of the given state.

To turn off wild magic, simply call SetWMState(Object, WM_NORMAL, 0). This will 
reset all WM_NULL and WM_WILD states on that object. 

Raising nAmount > 1 will strengthen that attribute. Raising nAmount for 
WM_NORMAL will make WM_NULL and WM_WILD less powerful. Raising nAmount for 
WM_NULL and WM_WILD will make those attributes more powerful. Experiment with 
these values to get the desired result. You may not set any of the values to a 
negative number. Setting them to a negative number will set the attribute to 0 
instead. 

For the less technically inclinded, there are two custom placeables. Placing the 
"Null Magic Marker" (under Special->Custom1) in an area will make that entire 
area a null magic area. Placing the "Wild Magic Marker" in an area will make the 
entire area a wild magic area. Caution: Do not inhale magic marker fumes. 
For a detailed description of Wild Magic read ReadMeChanges.txt in HardcoreERFSP.zip. 


Sound Familiar?
When a Familiar dies, the familiar's master will now lose 200xp x level of the 
owner. The owner will be given a chance to avoid half the penalty by making a 
successful Fortitude check. 

Feeding a familiar will no longer heal it fully. Sorry, but the ability to 
spontaneously heal is reserved for Artifact Familiars. Familiars heal as PC's do 
(1 hp per hit dice). 

If you feel your familiar is getting a bit too daring, simply unsummon it. 
These may all be turned off by setting the REALFAM variable to 0. With REALFAM 
set to 0, the mage will only recieve damage rather than an XP penalty as well. 


-Server Support-


Locking the Server

To Lock the server: 
dmsetmodulevarint LOCKED 1
To unlock the server:
dmsetmodulevarint LOCKED 0
DM reservation system

By setting DMRESERVE in hc_defaults to some number greater than 0, the game will 
limit the number of players to that number, regardless of what Maxplayers is set 
to on the server. This allows the DM to always have a slot to log into. 


Player Killer Tracking and Banning
Set PKTRACKER to a number higher than 0 to boot players who have killed that 
many PC's. The player will not be able to get back in the game in any way, shape 
or form until the server resets (or util he buys himself a new copy of NWN). 
Set TELLONPK to 1 to inform all DM's anytime a player kills a player. Note that 
PK's against members of your own party do not count against your total allowed 
(whoops, fireball). 


Persistent World Database
PWDB is a set of scripts made to manage persistent data in Neverwinter Nights 
servers. The power of this tool is that it does not require external programs or 
hacks to work with your module. The drawback is that you need to compile (build) 
your module every time you restart your server. The PWDB has been fully 
integrated into HCR as of version 1.7.0. 


To use this system, First determine which values you would like to track. 
Next replace "Local" in the GetLocalX and SetLocalX funcitons with "Persistent".
Example, SetPersistentInt, GetPersistentInt.
They should work and behave exactly like their "Local" counterparts. 


Every few minutes, the system will dump all the data in the server log file. 
Once in a while the system will also dump a change set. 

When you finally need to restart the server from scratch, you must do the following:
 
Have everyone log out after pressing the Rest button (even if they can't rest).
Pressing the Rest button will save their location.
Wait about a minute, and then shut down the server. 
Open the log file called nwserverLog1 in your nwn/logs.0 directory (or the highest number, ie logs.5).
Scroll down till you come to the end. You are looking for two sections.
One section is called "BEGIN PWDB SAVE ALL". This is a full dump. The other is called "BEGIN PWDB SAVE CHANGED".
This is a changes dump. IF there is a "BEGIN PWDB SAVE CHANGED" as the last dump, you need the SAVE ALL and
the SAVE CHANGED sections, otherwise, if SAVE ALL is the last dump, you just need that section. Cut and paste
the functions from just after <script type='all'> or <script type='changed'> down to </script>. Open up the
toolset and edit the script called hc_inc_pwdb_data. 

If you copied the ALL script, paste it over the PWDBLoad function in its entirety.

If you copied the CHANGED script, paste it over PWDBLoadChanged function.

If CHANGED was the last dump, paste both. 

Now Save hc_inc_pwdb_data. You may get one error, that SetPersistentIntKey is not defined.
Thats ok, ignore it. Now make any other changes you need to your module and then click rebuild. 

The following are values that HCR already keeps track of: 
  Starting Year, Month, Day, Hour. 
  Current Year, Month, Day, Hour, Minute, Second. 
  PC's PK Count 
  PC's Current Character (if using Single Character option) 
  Player DM (if Set by a DM with HCRHelper) 
  Player's Last Location. Whenever you rest your last location is set. 
  PC's Player State (No more Fugue Robes) 
  Player's Hit points 
  Player's Last Rest Time 
  Player's Last Recovery Check 
  Level cost penalties (if using Leveltrain) 


-Miscellaneous-


Event Hooks
In order to use the event hooks, figure out which event you would like to add 
your custom code to. Then look up the hc_inc_eventname file that you wish to 
modify. For instance, to add cutom behavior to the OnRespawn event, open up 
hc_inc_on_respwn. 

In the file, you will find two empty functions. preEvent() and postEvent(). To 
add custom code that should execute before an event fires, put your code in the 
preEvent() funciton. To add custom code that should execute after an event 
fires, put your custom code in postEvent(). 

When moving from HC version to HC version, keep in mind that unless otherwise 
noted in changed_files, you need not-- in fact, if you have custom code in 
there, you must not-- allow Aurora to update these include files. Doing so will 
result in loss of code, a hell of a lot of tears, and perhaps a bout of 
depression on your part. 

If you wish to completely bypass HC behavior for a specific script, simply 
return 0 (or FALSE) in the preEvent() function. To allow HC code to execute, 
return 1 (or TRUE) in the preEvent() function. 


Communication
An add-on bulletin board system is available. at this link: 

http://nwn.darkemud.com/~darke/HC/download.htm


Natural Light Sources
Lanterns may be filled by dropping the lantern on the ground, then activating an 
oil flask on it. 


Grenade Like Weapons and Oil Flasks
Oil, Holy Water, Thunder stones, Tanglefoot Bags, Alchemist's Fire and Acid 
Flasks can be thrown per phb pg 109, 113, 114, and 138 
Players may use a flask of oil to create a campfire that they can sit around by 
clicking on the nearby ground. 


Where's the beef?
Players may use a skinning knife to carve meat from dead animals and then cook 
it on a campfire created with an oilflask. 


Monster and NPC Corpses
To learn how to change the default behavior of NPC corpses, please consult the 
code comments in the hc_inc_dthcorpse script. 


DM Helper
The DM Helper is a tool designed  to overcome many of the missing features of 
the DM Client.  When Bioware makes the promised changes to the DM Client, some 
of these features will no longer be needed. The DM Helper's homepage is here.
The essential DM tool.  I would not personally run a module without this add-on 
installed.  HCR Fully supports the DMH, and has custom functions in it that are 
fully supported by the DMH.  

To use: Download the DMH from the link, and install it by importing the ERF's.  
You do not need to import the dmw_activate ERF.  DO NOT OVERWRITE any files that 
it asks if you want to overwrite or you will break your HCR.  DMH comes with 
some HCR files in it for modules using the DMH without HCR.  

The DMH use to be included with the HCR and the ONLY reason it was made into an 
add-on product was to speed build time for builders during the clean up of 
1.3.6.   Many many thanks to Doppleganger, Jhenne, and their crew for this 
essential tool and their continued close working relationship with the HCR team.

The current features of DM's Helper includes: 

If cast on a player
  Display attributes (stats, equipped items, player name, etc) 
  Change alignment (Law, Chaos, Good, Evil) by one or five points 
  Give the player a full map of the area 
  Follow the player 
  Force the player to follow you (for a short period of time) 
  Take items - all equipped, all unequipped, all items, or an item equipped into 
  a specific slot 
  Penguin the player - paralyze the player, and turn him into a penguin 
  Unpenguin the player 
  Boot the PC out of the game 
  Roll a skill or ability check 
  Join the PC's party 
  Leave the party
    
If cast on a creature
  Display attributes (stats, equipped items, player name, etc) 
  Change alignment (Law, Chaos, Good, Evil) by one or five points 
  Follow the creature 
  Force the creature to follow you (for a short period of time) (it will resume 
  walking waypoints, if any, once it stops following) 
  Tell the creature to run the "nw_c2_default9" script (resumes waypoint 
  walking) 
  Take items - all equipped, all unequipped, all items, or an item equipped into 
  a specific slot 
  Kill creature, leaving a corpse 
  Roll a skill or ability check
    
If cast on a creature or selectable object
  Kill object, leaving any loot it would normally leave 
  Destroy this object 
  Turn this object on or off (for placeables that can turn on and off)
    
If cast on a door
  Lock or unlock the door

If cast without a target
  Change the weather of the area (rain, snow, clear, or original map setting) 
  Reload the current running module (use with caution, may cause server to 
  become unstable on large maps) 
  Advance the current time of day by one, three, or five hours 
  Advance to the next day or night period 
  Destroy an object that is close by (includes untargettable objects) 
  Turn an object that is close by on or off (for placeables that can turn on and 
  off) (Warning: some objects may not show the change until the observer has 
  exited the area and re-entered. This is probably related to a similar problem 
  with destroying static objects) 
  If the Hardcore Rules mod is installed, report on what systems are enabled
    
Wandering Monster System
The wandering monster system is allows for each area you create to have a 
percent chance anytime a player rests in it to have a wandering monster appear.  
The creature will appear near the player, and then immediately attack the 
player. To use the wandering monster system, you must download the 
HC_WANDERSYSTEM critters (created by Whyteshadow), unless you like fighting 
vicious, bloody badgers, ready to tear your toes out. Otherwise you must create 
your own monster set. 

To set up an area to use the wandering monster system:

For checking ever X minutes:
  Import the critters. 
  Select the area you wish to have a chance of wandering monsters.  Select 
  Edit->Area Properties and click on Events. 
  In the OnHeartbeat slot, select hc_areanm_hb and click edit 
  Set WANDERCHANCE to the percent chance of a random critter every X minutes. 
  Set WANDERSTRENGTH to the strength of the random encounter, a number 1 to 20, 
  based on the dungeon level (roughly correlates to the CR of the encounter. 
  Set WANDERTIMER for the time, in minutes, between checks. (That's REAL TIME, 
  not WORLD TIME) 
  Click Save As and rename the script to something like hc_base_hb (or whatever 
  the name of your area is). 
  Close the Script editor. 
  Repeat steps 1-6 for other areas as necessary\ 
  Rebuild Module 
  Enjoy 

For checking when a player rests:
  Import the critters. 
  Select the area you wish to have a chance of wandering monsters.  Select 
  Edit->Area Properties and click on Events. 
  In the OnEnter slot, select hc_areanm_enter and click edit 
  Set WANDERCHANCE to the percent chance of a random critter whenever someone rests in the area. 
  Set WANDERSTRENGTH to the strength of the random encounter, a number 1 to 
  20, based on the dungeon level (roughly correlates to the CR of the encounter. 
  Click Save As and rename the script to something like hc_base_enter (or 
  whatever the name of your area is). 
  Close the Script editor. 
  Repeat steps 1-6 for other areas as necessary\ 
  Rebuild Module 
  Enjoy 


Summon Creature Spells
The summon creature I-IX spell line has been modified in two ways.  
The first is that summoned creatures only last for 1 round per level of the 
caster (plus 1 round due to game mechanics).  This is in keeping with the PHB 
and makes mages weak as they should be at level 1.  Before summoned critters 
lasted as long as familiars, and a mage was a one person party.  There is a 
variable in hc_summon_inc called SUMMONTIMER that is defaulted to 1.  That means 
they will last 1 round per level of the caster.  If you bump it say to 3, they 
will last 3 rounds per level of the caster.

The second is that hc_summon_inc has a table in it now that if uncommented, will 
allow you to specify which creatures are summoned by each level of the spell.  
As of version 1.4.9, the ERF file (Created by Albereth) used for summoning now 
contains a creature list that closely follows the PHB summon monster tables. To 
use this optional feature, comment out line 23 in hc_summon_inc (that's the 
return ""; line) and download the ERF and import it into your module. The ERF 
may be downloaded at:

http://nwn.darkemud.com/~darke/HC/Files/HardCoreERFSU.zip


I strongly suggest you use the optional add-on.


hc_defaults : The Game Settings
The settings placed in the Module object by hc_defaults is used in almost all of 
the hc_ scripts. It has many definable variables that you may modify to affect 
default HC behavior. 

Name          Default Value  Description 
PWS_PLAYER_STATE_xxxxxxx     Do not adjust these at all. They track the health of the player. 
PWS_GUI_STRING_xxxxx         You may set these strings to what you want to appear in the GUI box if you enable
                             GUI respawn popups. 
SINGLECHARACTER      0       Set this to 1 to enforce a one player per person rule (based on Public CD Key).
                             The player cannot play with a new character until the server is fully reset, in
                             which case he is then stuck with the first character that he logs in as.

LEVELTRAINER         0       Set this to 1 to require players to visit a trainer so that they could level. 
LEVELCOST          1000      This is the cost per current level of the character to train up a level.
                             Set this to whatever you feel is reasonable for your campaign. 

MATERCOMP            0       Change this to 1 if you wish to use the optional spell material components add-on.
                             You must download the material components Add-on for this to work. When set to 1,
                             Clerics and Paladins must also have a holy/unholy symbol to turn undead. 

REALFAM              1       Familiar behavior. Set to 0 for NWN Style Familars (heal when fed, no XP penalty
                             to master upon death). 
DMRESERVE            0       Change this to the number of players you wish to be allowed into your module.
                             Then set the servers max number to any number higher than DMRESERVE. This will allow
                             DM's to always have a place in an open game without having to password your server or
                             boot folks off.
TELLONPK             1       Set this to 0 if you do not want a message as DM when someone kills another player. 
PKTRACKER            5       Set this to the number of times someone can PK another player. 
                             If they exceed this number, they get booted and banned until server reset. 
                             This boot/ban is logged and all DM's online are told about it. Set this 
                             number to 0 to turn off this feature. 
WANDERSYSTEM         1       Set this to 0 to turn off checks for wandering monsters entirely. TO use wandering
                             monsters, you must have this set to 1, AND you must put a hc_areanm_hb and/or
                             hc_areanm_enter into the area's OnHeartbeat and OnEnter script areas. See those files
                             for more variables to adjust to use the Wandering (actually random) encounter system. 
GODSYSTEM            1       Set this to 0 to turn off the chance for a Deity granted resurrection.
                             Currently its 5% chance +1% per 4 levels. 
RESTARMORPEN         1       Set this to 0 to allow players to rest in any Armor of AC 6 or more without any penalties. 
DEATHSYSTEM          1       Set this to 0 to allow quit and return to get around death system.
                             This will also turn on the respawn window. 
DEATHOVERREBOOT      1       Set this to 0 to allow dead people to remain in fugue even after a full server reset. 
BLEEDSYSTEM          1       Do not set this to 0 at this time. it will break things.
RESTSYSTEM           1       Set this to 0 to remove resting restrictions from play entirely
                             (standard BW NWN resting at that point) 
LOOTSYSTEM           1       Set this to 0 to disable lootable player corpses.
REZPENALTY           1       Set this to 0 to remove the loss of level penalty that is incurred when a player
                             is raised by any method other than DM or Deity resurrection. 
LIMBO                1       Set this to 0 to remove the free all expense paid trip to the Fugue on death 
                             STORESYSTEM1Set this to 0 to remove the stripping of characters with 0 xp 
                             when they enter the game (i.e. let them keep what bioware gave them for starting equipment). 
FOODSYSTEM           1       Set this to 0 to remove the need for food to let someone rest. 
HCREXP               1       Set this to 0 to use normal NWN exp distribution 
BEDROLLSYSTEM        1       Set this to 0 to remove the usage of bedrolls which cuts
                             resting time to ever 8 hours vice ever 24 hours. 
LIMITEDRESTHEAL      1       Set this to 0 to allow players to heal fully when they rest. 
BURNTORCH            1       Set this to 0 to let torches, light spells, and lanterns last BW durations instead of
                             by the book durations. If this is set higher than 1, torches will last that many
                             times longer than normal, i.e. setting it to 3 would make torches last 3 hours
                             instead of 1. 
BASEXP              75       This is the number that gives the amount of xp from the DM's guide to players for
                             a kill, setting it to 30 will simulate BW's 10% slider setting. If using the HCREXP
                             system, be sure your modules xp slider is at 0%
BONUSXP              0       Set this to any number higher than 0 to award that many xp to any kill.
                             (even kills > or < 8 CR from player average CR)
GIVELEVEL            1       Set this to the level you wish players to start your module at.
LOGINMESSAGE                 Set this to the message you want all players to see upon login.



Detailed Description of All HCR Components
Below, each specific component of the HCR system is broken down and discussed in more detail


-Areas-


_Base
The base area of the module. Currently has the 4 new cure potions on the ground, 
a level 9 cleric, and a CR2 dog. This area and the items within were all created 
for testing purposes only, and to give the module a start location (if no other 
start location has already been mapped). _Base may be deleted at will without 
harming the operation of the HCR, however it is small, and its leaving it 
installed is recommended.

Fugue Plane : The Fugue Plane is where players go when they die. Behind the 
cliffs on the fugue plane is where corpses go to when the PCT is taken off a 
DC.The fugue plane is per the Forgotten Realms Sourcebook for what happens to 
dead players.

The Fugue Plane may be enhanced. If you wish to make a quest in the fugue plane 
that allows players to get back to the real world, that is your prerogative. Its 
not in keeping with the rules, and once the solution to such a quest is known, 
it will spread rapidly to all your players. If you do so, all you need to do is 
put example script below into the OnExit block of the Fugue Plane area 
properties.

You may also replace the fugue plane entirely. To do so, be sure that two 
placeables, one with the tag FugueMarker and one with StorageMarker appear 
in your new area. Also the area must have the Tag FuguePlane.

EXAMPLE  hc_fugue_exit  SCRIPT
#include hc_inc;
void main()
{
    object oPlayer=GetExitingObject();
    SPS(oPlayer, PWS_PLAYER_STATE_ALIVE);
    ApplyEffectToObject (DURATION_TYPE_INSTANT, EffectResurrection(),
        oPlayer);
    ApplyEffectToObject (DURATION_TYPE_INSTANT, EffectHeal( 
        GetMaxHitPoints (oPlayer)), oPlayer);
    AssignCommand(oPlayer, DelayCommand(0.2, JumpToLocation(
        GetLocalLocation(oMod,"DIED_HERE"+GetName(oPlayer)))));
}


Conversations
Currently there is only one conversation that comes with the HCR, that one is 
'dmwand'.  This is the conversation script that handles all of the DM Helper 
functions.  The DM Helper is a semi external tool to the HCR and will not be 
covered in great depth in this documentation.


Creatures : None


Doors : None


Encounters : None


Items
Bag of Gold : Items/Custom/Special/Custom1/ Bag of Gold : Item that allows for 
dropping and recovering a dying/dead players gold. 

Bedroll : Items/Custom/Special/Custom1 : Item in inventory for when bedroll isn’t on ground. 

DM Helper : Items/Custom/Special/Custom1 : The DM Helper wand.  Could be anything, it’s a wand. 

Player Corpse : Items/Custom/Special/Custom1 : The Player Corpse Token that appears on the Death
Corpse and allows for 'dragging' a corpse. 

Food Ration : Items/Custom/Special/Custom2 : Food ration.  Used for resting.  
The hc_resting script will allow ANY item with Food (without the &#8220;&#8221;’s) in the 
tag to be used as a  food item.  So FoodBagel would be ok, or RottingMeatFood as well. 

*subrace : Items/Custom/Special/Custom2 : Items that go on subrace characters in 
their creature weapon slot.  See SUBRACE tablescriptsevenrow. 

Potion of Cure <blank> Wounds : Items/Custom/Special/Custom3 : The new cure 
potions that can be used on others, recommend you only use these potions in your module. 

Potion of Cure <blank> Wounds : Items/Custom/Special/Custom3 : The new cure 
potions that can be used on others, recommend you only use these potions in your module. 

Cooked Steak : Items/Custom/Special/Custom1 : Food Cooked over a campfire. 

Fugue Robe : Items/Custom/Special/Custom1 : The robe you recieve upon death. 

Medicine Bag : Items/Custom/Special/Custom1 : Replacement for NWN healing kits. 

Skinning Knife : Items/Custom/Special/Custom1 : Tool used to take meat from game animals. 

Search Tool : Items/Custom/Special/Custom1 : Tool used to replace the search button. 

Thieves' Tools : Items/Custom/Special/Custom1 : Tool used mainly by rogues to pick locks and disarm traps. 

Thieves' Tools, Masterwork : Items/Custom/Special/Custom1 : Tool used mainly by 
rogues to pick locks and disarm traps. It gives the user +2 to his skill check. 

Acid Flask : Items/Custom/Special/Custom4 : Grenade weapon. Like Acid (what else?). 1d6 dmg. 

Alchemist's Fire : Items/Custom/Special/Custom4 : Grenade weapon. Like Napalm. 1d6 dmg. + 1d6 dmg next round. 

Holy Water Flask : Items/Custom/Special/Custom4 : Grenade weapon. Affects undead only. 2d4 dmg. 

Oil Flask : Items/Custom/Special/Custom4 : Grenade weapon. 50% failure rate. 1d6 
dmg + 1d6 next round. : Oil flasks are also used to fill up lanterns and light camp fires. 

Torch : Items/Custom/Special/Custom4 : Torch that burns out and is dimmer than NWN torches. 

Lantern : Items/Custom/Special/Custom4 : Brighter and longer lasting than torches. Needs oil flask for re-fills.

Holy Symbol : Items/Custom/Special/Custom5 : Required to turn undead. 


Placeables
Death Corpse : Placeables/Custom/Containers/Death Corpse :
The corpse that appears on player dying or death that holds all his objects. 

Bedroll : Placeables/Custom/Miscellaneous/Bedroll :
The bedroll that appears on the ground when someone rests using a bedroll. 

Fugue Marker : Placeables/Custom/pennants/Fugue marker :
The marker used to move dead folks to fugue plane.

Storage Marker : Placeables/Custom/pennants/Storage Marker :
The marker used to move death corpses to fugue plane when they are being dragged. 

Chair : Placeables/Custom/Special/Custom1/Chair :
An example of a sittable object.  May be deleted. 

HCR Signpost : Placeables/Custom/Pendants & Signs/ :
The HCR sign. When examined, gives a detailed description of HCR. When used, opens the newbie store.

Campfire : Placeables/Custom/Miscellaneous : The campfire created by an 
oilflask. you can only cook food with this campfire, not the default NWN campfire. 

Training Center : Placeables/Custom/Trades & Academic & Farm :
An example traning object used to level up the players. 


-Merchants-

Newbie Merchant : Merchants/Custom/Special/Custom1 : The merchant that is shown 
to new players to initially equip themselves.  Can be put in any area of your module. 


Scripts
The following is a list of ALL scripts that are a part of the HCR.Scripts are 
listed in alphabetical order. They include a detailed description of what they 
do and where they go.  NOTE: Any include files will always show an error when 
you build the module or if you try to compile them.
They are listed in the format: Script Name: Location: Function


Name Event Description 
      about_credits None Text document listing credits for those who have helped 
      contribute to the HCR project in some major manner. 
      about_death None Text document describing death system in great detail. 
      Please read this file before posting any questions on how death and dying 
      works in HC. 
      about_dmhelper None Text document describing lastest features of the DM 
      Helper 
      about_module None Text document similar to this table that lists both 
      recent changes and all files associated with HCR 
      changed_files None Text document listing all files changed since last 
      revision. 
      dmw_* files Various The dmw_ files are all associated with the DM helper 
      and are automagically assigned and imported when you import the DM helper 
      add-on. 
      hc_areanm_enter Area Properties : Events : OnEnter This is a template 
      script for use in the OnEnter event in each of your areas. This script 
      allows you to set up the chance of an encounter during rest. To use this 
      file, set the WANDERCHANCE and WANDERSTRENGTH variables to the desired 
      values, rename the file, and place it in the area's OnEnter. 
      hc_areanm_hb Area Properties : Events : OnHeartbeat This is a template 
      script for use in the OnHeartbeat event in each of your areas. This script 
      allows you to set up the chance of wandering monsters while exploring the 
      area. To use this file, set the WANDERCHANCE, WANDERSTRENGTH and 
      WANDERTIMER variables to the desired values, rename the file, and place it 
      in the area's OnHeartbeat. 
      hc_bleeding None Called by hc_on_heartbeat. Handles all changes in player 
      state due to bleeding and dying 
      hc_cat_tt_abort None Conversation action taken when a rogue chooses to 
      abort his disarm attempt. 
      hc_cat_tt_disarm None Conversation action taken when a rogue chooses to 
      attempt a disarm. 
      hc_corpse_sound None Used to mask "chest opening sound" when looting 
      corpses. 
      hc_csc_ttc_dangr None Conversation starting conditional for the thieves' 
      tools indicating that disarming a trap would be dangerous. 
      hc_csc_ttc_easy None Conversation starting conditional for the thieves' 
      tools indicating that disarming a trap would be easy. 
      hc_csc_ttc_risky None Conversation starting conditional for the thieves' 
      tools indicating that disarming a trap would be risky. 
      hc_csc_ttc_safe None Conversation starting conditional for the thieves' 
      tools indicating that disarming a trap would be very safe. 
      hc_csc_ttc_vdang None Conversation starting conditional for the thieves' 
      tools indicating when disarming a trap would be very dangerous. 
      hc_clicknewstore None Called by the OnClick event on the HCR signpost that 
      now carries the newbie store. 
      hc_dmw_inc None This is a file required to make the DMWand work correctly 
      with the HC Ruleset. 
      hc_fugue_enter Area Properties : Events : OnEnter Removes the LocalInt of 
      MOVING once they arrive. Used to handle delays on large modules so folks 
      don’t show up with items 
      hc_fugue_exit Area Properties : Events : OnExit Removes the Fugue robe 
      from the character as he's leaving Fugue. 
      hc_fugue_sign Fugue Marker : Events : OnUsed Shows The Fugue Plane when used. 
      hc_grenade None Called whenever the Unique Power is activated on a grenade 
      type weapon, such as oil flasks, holy water, etc. 
      hc_hb_campfire Object Properties -- On heartbeat. Allows for the creation 
      of camp fires. These campfires burn out and allow you to cook meat on 
      them. 
      hc_hb_deathcrps Death Corpse : Events - OnHeartbeat This is where the 
      Death Corpse checks to see if it is empty (destroys itself) or if its 
      owner is alive again (gives stuff back) 
      hc_inc None The main inc file. See hc_inc tablescriptsevenrow for more 
      details. 
      hc_inc_death None Used by hc_bleeding and hc_on_ply_dying to disable or 
      undisable a character. 
      hc_inc_dthcorpse none Functions and settings for lootable NPC corpses. 
      hc_inc_familiar None Used to set HC Familiar settings on or off. Used by 
      nw_ch_fm_st_12 (feed familiar) and nw_ch_ac7 (henchmen/familiar death). 
      hc_inc_gods None Used by hc_on_ply_death to check for deity intervetion on 
      death. 
      hc_inc_on_acq Module Properties - Events - OnAcquireItem Skeleton pre and 
      post hooks for module "OnAquire" events. 
      hc_inc_on_act Module Properties - Events - OnAcivateItem Skeleton pre and 
      post hooks for module "OnActivated" events. 
      hc_inc_on_death Module Properties - Events - OnPlayerDeath Skeleton pre 
      and post hooks for module "OnPlayerDeath" events. 
      hc_inc_on_dying Module Properties - Events - OnPlayerDying Skeleton pre 
      and post hooks for module "OnPlayerDying" events. 
      hc_inc_on_enter Module Properties - Events - OnClientEnter Skeleton pre 
      and post hooks for module "OnClientEnter" events. 
      hc_inc_on_hrtbt Module Properties - Events - OnHeartbeat Skeleton pre and 
      post hooks for module "OnHeartbeat" events. 
      hc_inc_on_leave Module Properties - Events - OnClientLeave Skeleton pre 
      and post hooks for module "OnClientLeave" events. 
      hc_inc_on_level Module Properties - Events - OnPlayerLevelUp Skeleton pre 
      and post hooks for module "OnPlayerLevelUp" events. 
      hc_inc_on_load Module Properties - Events - OnModuleLoad Skeleton pre and 
      post hooks for module "OnModuleLoad" events. 
      hc_inc_on_respwn Module Properties - Events - OnPlayerRespawn Skeleton pre 
      and post hooks for module "OnPlayerRespawn" events. 
      hc_inc_on_rest Module Properties - Events - OnPlayerRest Skeleton pre and 
      post hooks for module "OnPlayerRest" events. 
      hc_inc_on_unacq Module Properties - Events - OnUnaquired Skeleton pre and 
      post hooks for module "OnUnaquired" events. 
      hc_inc_on_user Module Properties - Events - OnUser Skeleton pre and post 
      hooks for module "OnUser" events. 
      hc_inc_remeff None Used by several scripts to remove negative effects on a 
      player. 
      hc_inc_rezpen None Used by several scripts to apply resurrection penalties 
      applied when the character is raised from the dead. 
      hc_inc_subrace None Used by hc_on_cl_enter to modify a player to match his 
      subrace. 
      hc_inc_summon None Used by the summoning spells to summon a new slew of 
      creatures. 
      hc_inc_transfer None Used by several scripts to transfer items to a 
      deathcorpse from a player as he dies, or do the player from his 
      deathcorpse when he is resurrected. 
      hc_inc_wandering None Used by the hc_areanm_enter and hc_areanmm_hb for 
      wandering monster checks. 
      hc_on_acq_item Module Properties - Events - OnAcquireItem Activated 
      everytime a player aquires an item. 
      hc_on_act_item Module Properties : Events : OnActivateItem Checks for DM 
      Helper, New cure potions, or playercorpse. Takes appropriate action if one 
      of these. This is where the NPC clerical resurrection is handled. 
      hc_on_cl_enter Module Properties : Events : OnClientEnter Handles 
      equipping new character, giving DM’s a DM Helper, login message, subrace 
      setup, and returning players to their last player state (dying, dead, etc) 

      hc_on_cl_leave Module Properties : Events : OnClientLeave Called when the 
      a player leaves the game. Currently does nothing. If you wish to build a 
      module compatible with future HC updates, please do not touch this script. 
      Use the preEvent and postEvent hooks instead. 
      hc_on_heartbeat Module Properties : Events : OnHeartbeat Called every 6 
      seconds. Calls hc_bleeding to see if players need to be processed. 
      hc_on_mod_load Module Properties : Events : OnModuleLoad Called when the module first
      loads. Currently does nothing. If you wish to build a module compatible with
      future HC updates, please do not touch this script. Use the preEvent and postEvent
      hooks instead. 
      hc_on_play_death Module Properties : Events : OnPlayerDeath This script handles when a
      player reaches -10hp or more.  It makes the death corpse if it doesn’t exist, puts
      all items on it, and makes the PCT and ships the user off to Fugue Plane if no Deity Ress 
      hc_play_rest Module Properties : Events : OnPlayerRest Controls resting and its
      requirements and restrictions 
      hc_on_ply_dying Module Properties : Events : OnPlayerDying This script handles the player
      who goes less than 1 hp.  It is only called once for each player when they go less than 1 hp. 
      hc_ply_lvl_up Module Properties : Events : OnPlayerLevelUp Handles trainer leveling. 
      hc_on_ply_respwn Module Properties : Events : OnPlayerRespawn Used to 
      control respawn if the full bleedsystem is not used. 
      hc_on_unacq_item Module Properties : Events : OnUnAquireItem Handles what happens to specific items when dropped. 
      hc_pc_sit_chair Item -> OnUse Place on a useable item's OnUse event to make it sittable by PC's. 
      hc_used_campfire Item Properties : Events : OnUsed Called whenever a campfire is used. 
      hc_used_lvltrain Item Properties : Events : OnUsed Conversations : ActionsTaken Allows a character to level up.
      Can be placed on an item's OnUsed event or a conversation's ActionsTaken hook. 
      hc_user_define Module Properties : Events : OnUserDefine Called by Module 
      UserDefined Events. Currently does nothing. 
      hc_c2_default7 NPC Properties : Events : OnDeath Called when an NPC dies. Handles the XP system. 
      hc_ch_ac7 NPC Properties : Events : OnDeath Called when a henchman/familiar dies dies.
      Handles the Familiar dying penalties. 
      hc_ch_fm_st_12 None Called when the familiar is fed. 
      hcrh_* None Scripts for the HC Helper. 
      nw_s0_cur* None The cure <blank> wounds spells, changed so that PC’s and NPC's alike heal by a die roll. 
      nw_s0_raisdead None Raise Dead spell, modified to apply rez penalty 
      nw_s0_resserec None Resurrection spell, modified to apply rez penalty 
      nw_s0_summon None SEE SUMMON chapter 
      nw_s2_turndead none Turn undead. Fixed bioware bug, and modifies evil cleric turns to closely resemble PHB. 

**End of Manual**




[ 4. Encounters & Rewards. ] 

Give them easy and low rewarding battles, and hard well rewarding battles. Never give them alot
of things for something they worked effortlessly on. Give them INTERESTING battles. Lots of
orcs gets boring...but one tough dragon is a blast. Make sure they have to use teamwork in their
battles, not just having everyone be a meat shield for the one person doing all the damage.

If you put the characters in a battle they CANNOT win, you better have it be part of the
storyline and have them devise a way to get out. Or you are gonna be stuck with a few dead
characters, and a few pissed off friends.

Make bosses hard is my philosophy. I find all too often that the puzzles in the dungeon prior to
the boss are much harder than the bosses themselves. Make them hard...but manageable. Weaknesses
on bosses are a good thing, but you should not give every boss a weakness that can be overcome
easily. The only true weaknesses a boss should have is the chance of dying to a skilled and well
organized party.



[ 5. Persistent Worlds. ]

Creating and managing a persistent world is hard --- but do-able.
I myself manage a PW and it is coming along nicely. Read section I.2 for information about it.

The main things about running a PW are to continuously keep your players entertained,
keep them involved, and keep them motivated. Keep them as interested as playing your world as
you are creating it. In the end, they will give you as much praise for your world for as much
work that you put into it.

Also take into account what your players think and enjoy. Make the world so
that THEY enjoy it, not you. After all, they are the ones playing in it.



[ 6. DM Resources. ]

http://www.angelfire.com/mt/mandg/nwn/scripts/dmhelper.html
A script you can use in your modules that gives the in-game
information on your players(stats, locations, etc)

http://www.angelfire.com/mt/mandg/nwn/scripts/pwdb.txt
[A script that stores Persistent World data]



[ 7. DM Responsibilities. ]

With the rise of NWN's popularity I'd like to ask you DMs out there to play nice, be fair, and
stop any cheaters, rule-breakers, power abusers, or general assholes from messing up this great
game for the rest of the people playing it. If you see someone cheating ban them, even if they are
your friend. Its just not cool to see other DMs play favorites.

Keep watch on your players as well, with the "Respawning Treasure" scripts I provided they can
potentially take alot of powerful items with no effort at all. Make sure you watch players and make
sure they don't abuse any loops in your modules, or glitches in your modules.

Please try to keep things interesting for your players.

In short:
-Fight against cheating, rule-breakers, and general assholes
-Be nice to everyone
-If you're going to hate your players, hate them all equally
-Don't let players abuse loops or glitches in your modules



[ 8. My Stance on D&D Rules. ]

Before you read, this is one of those sections you're not allowed to email me and complain about.
Feel free to complain about any other parts of the guide, though.

Alright, since NWN began theres been a huge calling to be right on the money with sourcebook rules.
While I think that's all fine and dandy, and has brought about alot of great scripts, such as the HCR,
you shouldn't force yourself or your players to be bound to your modules by them. Make rules as you see
fit, as you see fair, and as you see entertaining.

I see alot of "climbing" or "drowning" scripts that are just text messages of DC, which I find
thoroughly boring, I'd rather fore go it and have a player jump on top of the cliff, or die from a
timer from being underwater. I figure if you want to see text of DCs go back to playing PnP, but with the
NWN engine you can be doing so much more...

Making modules and worlds and everything else you may make with the toolset, or DM client
is not about following someone else's rules. It's about making your own.



-------------------------------------------------------------------------------------------------
III. For Builders
-------------------------------------------------------------------------------------------------



------------------------------IMPORTANT NOTICE ABOUT MODULE CORRUPTION---------------------------

(ONLY affects your toolset if you are running a version below 1.19)

There is a very large bug that can occur in your modules which can *potentially* destroy all that
you are working on. If this bug occurs you will be unable to open your module, and will get an
error that says it couldn't unpack the temp folder. This method IS NOT a fix, it is a workaround,
and you will still lose a random amount of material, depending on which file is corrupted.

The bug itself has something to do with the Conversation Editor. I'm not exactly sure what, but
if you want to play it safe until Bioware releases a patch PERMANENTLY fixing this bug,
don't use any conversations in your modules yet.

The workaround to this bug is:

1) Close the toolset if its open.

2) Go into your modules directory. Leave this directory open.

3) Remove any temp directories.

4) Open the toolset, open your module. DO NOT click the okay button when your module fails. 

5) Go to your modules directory, make a copy of the temp file that is currently there. Note this name.

6) Close the toolset, reboot as required (XP doesn't usually need to, Win98SE does).

7) Make a new module, with one area. Save the module.

8) Open the module directory WITH the toolset and new module still loaded.

9) Copy the contents of the directory you copied earlier into the new temp directory that your
new module just made, overwrite any dup files.

10) Go to the toolset. Save As your new module to a new name. Close the toolset.

11) Open the toolset, open the new name. You should now have most of your old module in this new
module minus the corrupt script and anything that unpacks after that. 
-------------------------------------------------------------------------------------------------



[ 1. Making an Area. ]

A simple task. Make it as big or small as you like. The max area size is 32x32 and minimum is
2x2. Once you have your area laid out and chosen, you can play with the lighting effects.
Lighting is very important. It adds mood and power to an area. The best advice I can give you
is to play around with the ambient, diffuse, and fog effects/colors and see what you like.

Changing the ambient and diffuse colors will also change the
tint (slightly) of your objects, placeables, and terrain..

Depending on what area you made you should now add your terrain effects (groups, features, etc).
The order you do this will effect some things, however. You can't link water to a stream, but
you can link streams to water (for example). once you have all your little features and groups
in place you can start to add monsters, NPCs, placeables, objects. All that is really up to you,
I can't help much there :-P.



[ 2. Making a World. ]

By far harder than just making an area. Worlds are large and expansive, and contain alot of
material for your players to interact with. A world, essentially, is just many areas linked
together. The major difference is that many if not all of these areas should be unique and
essential to the development of a plot or basis of a storyline. Once again, I can't give you
much direction past a few pointers on making a world. It's all preference.

-Don't make two areas the same (unless its for a reason, of course)

-MAKE SURE you link areas correctly, so that everything you want can be accessed,
 and everything you don't can't be.

-Make sure you test areas before you play them, there may be placement errors or other problems.

-It's also very useful to have some sort of organization pattern in your worlds so that you can 
 find things quickly and easily. Label object tags by the areas they are in, and further more by
 what part of the areas they are in. I usually label things like "House3Rug" or labels of that
 nature.

-If you make any kind of container be sure to take off the random treasure script (where
 applicable) or else you'll have some random treasure in your container along with the items you
 put in the inventory manually. The random treasure is not shown in the inventory window,
 though, so the only way to remove it is to take away that script (its the OnDeath script,
 usually nw_a2_classlow or nw_a2_classhig depending on what type of container you made).



[ 3. Making NPC's ]

What they look like is up to you. Try to make the important ones look different, so they are
easy to find. Give your NPCs personalities as well. Don't just make them boring, in their
conversations give them unique personalities. DO NOT just make them stand around and throw out
quests. That's HORRIBLY boring...allow your players to carry on conversations with the NPCs.
It is also possible (if you know how to script it, see section III.6.F) to have players
manually type in commands that the NPC's will respond to.

You can just use pre-made NPCs from the monster menu, but I suggest creating your own unique
looking NPCs. All you have to do is specify their physical appearance and make an armor.

If you want to, give you NPCs custom OnHeartbeat or OnSpawn scripts to further customize their
daily routine. Some of my NPCs have fully unique daily routines, that are very complex and
involve ALOT of scripting. If you can, look up "The FRED Project," its the best AI I've seen
to date. Here's a link:

http://www.angelfire.com/mt/mandg/nwn/scripts/fredai.txt



[ 4. Making Monsters. ]

As far as looks, you can't customize them much past weapons and armor. The thing here is
changing their attributes, drops, feats, and spells. Don't make your monsters TOO strong
though, if the players are going to fight it, and its not a fixed fight (meaning something
stops it, like a conversation, or the arrival of someone), then you have to make it beatable.
Weaknesses are often used, but I don't really like the idea of a weakness...it takes away
from player's teamwork and just uses all the characters that can't hurt it as meat shields
while the main character dishes out all the damage.

A fun idea to put into your modules is a Monster Arena. If you've played Final Fantasy X you
know what I'm talking about, and know how INSANELY powerful the monsters were. I think this
kind of feature is awesome for many games. Not only is it very challenging, but its fun!!! It
requires a decent amount of scripting however.

Do what you like though. Again, its all preference.



[ 5. Scripting. ]

Scripting is BY FAR the hardest thing to do with the NWN Toolset. I have alot of trouble with it
because it is C++..but not really, so the normal commands I try to use usually don't work. This
will probably be the hardest section for me to do, but I will put as much information to help
you as I can.

Please keep in mind I'm not going to explain every bit of code I write. I hope that you can
figure out most of this on your own. If you can't figure out every line of code, don't worry.
You can just copy & paste things...not everyones a programmer (myself included +_+...meh,
kinda). Eventually, though, you will start to recognize things and catch on whether it be
through looking through other peoples code trying to emulate certain effects or by starting
from scratch and experimenting with everything yourself.

Also keep in mind many of these scripts I did not write, but many of those which I did not write
I have edited to be better used by myself and everyone who reads this guide. I have tried to
keep the credits of the original scripter, but sometimes I cannot find the name of the author,
or the person has asked not to be mentioned for privacy reasons.


---A. Making Doors/Transitions.---

Pretty simple. Make the two doors/waypoints/triggers that you want to link. If you use triggers
for the sole purpose of transporting then just make them Area Transition Triggers, not generic.
Once you have your two ends right click on one and select Properties. One of the tabs should say
Area Transition.

From there you can manually input the Destination Tag or you can set it up by clicking Setup
Area Transition. From there its pretty self explanatory. 

NOTE: If you can't click the door or waypoint you want it's most
      likely because you don't have the Target Type set to what you want.

NOTE: The arrow on doors or waypoints is the direction the PC will be facing once arriving on
      the other end.

NOTE: Some doors cannot link together. Doors that are NOT attached to a building usually do not
      link together. For Example: The rural tileset Wall 2 Gate do not work with area transitions
      unless you create a script for them.



---B. NPC Walk Waypoints.---

Quite simple. Create a series of waypoints and tag them as "WP_(NPC's tag)_0X"

It should look like this: WP_Gerard_01, WP_Gerard_02, et cetera.

You'll need at least 2 for this to work, but number them according to the way you want the
NPC to move.

If one of your waypoint tags is "POST_(NPC's Tag)" then
after any combat that monster/NPC will return to this position.

In the NPC's OnSpawn script there is a command called WalkWayPoints(); which automatically
tells them to walk waypoints with their tag in them. Another option to this comand is:

WalkWayPoints(nRun = FALSE, fPause = 1.0);

If you set nRun to true, they run instead of walk to the waypoints or posts.
The fPause is the time they pause between moving to the next waypoint.

NOTE: After talking to a NPC it will stop their walking. Fix this by putting
WalkWayPoints(); as the command is "Actions Taken" tab after every End Dialog.

I just made a script called "returntowalk" that was:

void main()
{
WalkWayPoints();
}

and used that every time one of my conversations finished.



---C. Conversations.---

Hmm...the only scripting involved here is the "Text Appears When..." and "Actions Taken." You
may also want to use the "End Conversation" tab as a means of using a script for NPCs who get
up from their chairs to talk to you, as well as those who stop walking waypoints to talk to you.

Pretty much all you have to do is set up variables so that texts only appear after the value is
set to the number you specify. The Toolset comes with a pretty good Wizard for doing so, so my
help is not needed.

I do think the "Actions Taken" tab wizard could use alot of work...I think they need to implement
a JumpToLocation choice, and many many others...not just giving items, gold, or experience to
players.

The only advice I can give you is set up your conversations and make sure you setup the
conditionals for text appearance so that important quest information or future story
information is not revealed to players accidentally.

NOTE: You can add Tokens to a conversation to define variables in your game.
	These variables include player name, race, level, et cetera.
	While in the "Add Dialog" text box right click and select Insert Token.
	All of those variables and effects listed may be used.



---D. Making a Gambling Function.---

Alright for this to work you'll need a NPC. Set up his conversation around a gambling
conversation. After one of his lines (that should be something like, "Gamble?") after the
players chooses Yes or No (or however you set it up...) use this script.


// Begin Gambling Script
// Gambling Script, used best in the "Actions Taken" of the conversation after the player
// chooses to gamble
// Read the comments next to script lines for more information

void main()
{


    int nCurrent_gold = GetGold(GetPCSpeaker());
    if (nCurrent_gold < 5)   // gold required to play
	{
ActionSpeakString("You need more gold than that to gamble! Come back later.", TALKVOLUME_TALK);
	}
    else {

        switch(Random(2))    // the number of possibilities
        {
            case 0:
                ActionSpeakString ("Sorry, you lose.", TALKVOLUME_TALK);
                TakeGoldFromCreature(5, GetPCSpeaker(), TRUE);
                break;
            case 1:
                ActionSpeakString("You are a winner!", TALKVOLUME_TALK);
                GiveGoldToCreature(GetPCSpeaker(), 10);
                PlaySound("as_pl_tavclap1");   //claps if you win
                break;
        }
     }
}
//End Gambling Script



Customizing this script:
-Change the values of rewards, losses, and antes (make it a 1/100 chance to get an item :D ).
-Change the sounds played on Loss or Win, you can also make a sound for not having enough gold.
-Change what the NPC says after win, loss, not enough money to play.
-Add more outcomes (duh!)




---E. Objects you can sit in/on.---

Script 1:

Works for chair, stool, bench, throne evil, throne good, footstool, couch. You don't have
to change any oChair tags for it to work on any other object. I think this script is funny,
once you get up you walk in a half sitting, half standing animation until you come to a stop.


// Use in OnUsed of the object
void main()
{
object oChair = OBJECT_SELF;

if(!GetIsObjectValid(GetSittingCreature(oChair)))
  {
  AssignCommand(GetLastUsedBy(), ActionSit(oChair));
  }
}



Script 2:

Works for rugs or bedrolls. Most of the time the player will not sit DIRECTLY on top of the
object but instead to one side of it. Oh well...you're sitting cross-legged by the way.


//Use in OnUsed of the object
void main()
{
if (GetDistanceToObject(GetLastUsedBy())>0.1f)
AssignCommand(GetLastUsedBy(),ActionForceMoveToLocation(GetLocation(OBJECT_SELF)));

AssignCommand(GetLastUsedBy(), ActionPlayAnimation(ANIMATION_LOOPING_SIT_CROSS,1.0f,300.0f));
}



Script 3:

Works for most creature types to sit in chairs. Stool, bench, throne-evil,
throne-good, footstool, couch also work (as far as I know). Just change the object tags.

(REMEMBER TO CHANGE YOUR TAGS TO THOSE OF YOUR NPC AND CHAIR!!!)


// Begin NPC Sit Script
// You can put this in OnSpawn or OnHeartbeat
// the sit command doesnt work for all monsters or npcs, though

// declare NPC objects
void main()
{

// declare chair objects

string sFrinChair = "FrinChair";
object oFrinChair = GetObjectByTag(sFrinChair);

AssignCommand(OBJECT_SELF, ActionSit(oFrinChair));

}
//End NPC Sit Script




---F. MMORPG Style Creature Generators---

//Begin MMORPG Style Creature Spawner Script
//Put this in the OnDeath script of the creature

//::********************** 
//::MMORPG Style Respawner 
//::By: Stephan Cam 
//:: Error Correcting by SPIKE 
//:: June 24, 2002 
//::********************** 
//:: Modified by Palor 
//::  - Added generic strings 
//::    to allow for use on 
//::    all respawns 
//:: June 26, 2002 
//::**********************
//::Modified by Tolerance0
//:: Slight changes 
//:: Nothing big :) 7-3-02
//::**********************

                         
#include "NW_I0_GENERIC" 
                         
void VoidCreateObject(string sTemplate, location lLoc, int bUseAppearAnimation=TRUE); 

void main() 
{
float fSeconds = 15.0;                  //monster spawn time 
string sWayPointPrefix = "WP_";         //monster "wp_monster tag"
string sTag = GetTag(OBJECT_SELF); 
string sTemplate =  GetStringLowerCase(GetTag(OBJECT_SELF)); 
string sCurrentWaypoint = sWayPointPrefix + sTag; 
location lLoca = GetLocation(GetObjectByTag(sCurrentWaypoint)); 
if(GetSpawnInCondition(NW_FLAG_DEATH_EVENT)) 
{
SignalEvent(OBJECT_SELF, EventUserDefined(1007)); 
}
{ 
SetIsDestroyable(FALSE); 
AssignCommand(OBJECT_SELF, DelayCommand(fSeconds, VoidCreateObject(sTemplate,lLoca, TRUE))); 
} 
}

void VoidCreateObject(string sTemplate, location lLoca, int bUseAppearAnimation=TRUE) 
{ 
CreateObject(OBJECT_TYPE_CREATURE, sTemplate,lLoca,TRUE); 
SetIsDestroyable(TRUE); 
} 
//End MMORPG Style Creature Spawner Script

Instructions for the MMORPG Style Creature Spawner:
1. Create a creature with the wizard, name it and then change the OnDeath to point
   to that script(above). 
2. Place the creature in the world. 
3. Create a Waypoint and name it WP_<creatures_tag> 

Thats it. Nothing else is needed  If you do it exactly like that it works just fine.

One note though, make sure to change the Templates OnDeath (what you create using wizard), not
the Placed creature. If you only edit the placed creature it will only respawn once, since the
template does not have the script

F.A.Q.                          

Question: It only respawns once, what did I do wrong? 
Answer: You changed the Placed creatures OnDeath to the spawn script. When you kill it and it
	spawns a new creature it takes it from the Template, so if your Templates
	OnDeath script is not the spawn script, when it dies nothing happens.
                         
Question: When I kill the creature and leave the area it does not respawn. 
Answer: I am going to look at an OnHeartbeat script to check for all spawned creatures.
        If I figure this one out I will post it. 
                         
Question: How do I make it spawn with more loot? 
Answer: This has nothing to do with OnDeath  But you can edit the Template and add items to
	the Inventory and make them dropable. Make sure to have more than just gold though, as
	there seems to be a problem with a creature dropping only just gold. I would give it a
	weapon, potion or something small PLUS the gold. You can also make a custom 
	OnSpawn script that generates random treasure using the GenerateNPCTreasure call.



---G. Healing Locations (Fountains, Wells, etc)---

A very needed factor in 99% of modules. Pc's can't be expected to play
all that time and never get healed any other way than by potions or clerics
in their party!!! Most commonly used on a well or fountain...but anything works.

//Begin healing script
//Use this in OnUsed of your object

void main()
{
object oPC;
oPC = GetLastUsedBy();

effect eHeal;
effect eHealVis = EffectVisualEffect(VFX_IMP_HEALING_S);
int nCurrentHitPoints, nMaxHitPoints, nVisualEffectId;

nMaxHitPoints = GetMaxHitPoints(oPC);
nCurrentHitPoints = GetCurrentHitPoints(oPC);
if ( nCurrentHitPoints < nMaxHitPoints )
{
eHeal = EffectHeal(nMaxHitPoints - nCurrentHitPoints);
ApplyEffectToObject( DURATION_TYPE_INSTANT, eHeal, oPC );
ApplyEffectToObject( DURATION_TYPE_INSTANT, eHealVis, oPC );

SpeakString("You have been healed.");
}
}

//End Healing Script



---H. Sundials that tell time.---

A fun little addition to your modules. Also helps PC's if certain
quests, areas, items, or NPCs are only accessible at a certain time.

Btw, Sundials indoors are stupid. Think about it. :)
Also, time doesn't change indoors...but thats not why its stupid.

// Begin Sundial Script
// Put in the OnUsed script for your sundial

void main()
{
int nTime = GetTimeHour();

if(GetIsNight())
	{
	SpeakString("Sundials don't work at night!!!");
	}
	else if (nTime == 1)
	{
	SpeakString("It is 1:00 AM");
	}
	
	else if (nTime == 2)
	{
	SpeakString("It is 2:00 AM");
	}	
 	
	else if (nTime == 3)
	{
	SpeakString("It is 3:00 AM");
	}	
	
	else if (nTime == 4)
	{
	SpeakString("It is 4:00 AM");
	}	
	
	else if (nTime == 5)
	{
	SpeakString("It is 5:00 AM");
	}
	
	else if (nTime == 6)
	{
	SpeakString("It is 6:00 AM");
	}
	
	else if (nTime == 7)
	{
	SpeakString("It is 7:00 AM");
	}
	
	else if (nTime == 8)
	{
	SpeakString("It is 8:00 AM");
	}
	
	else if (nTime == 9)
	{
	SpeakString("It is 9:00 AM");
	}
	
	else if (nTime == 10)
	{
	SpeakString("It is 10:00 AM");
	}
	
	else if (nTime == 11)
	{
	SpeakString("It is 11:00 AM");
	}
	
	else if (nTime == 12)
	{
	SpeakString("It is 12:00 PM");
	}	
	
	else if (nTime == 13)
	{
	SpeakString("It is 1:00 PM");
	}
	
	else if (nTime == 14)
	{
	SpeakString("It is 2:00 PM");
	}	
	
	else if (nTime == 15)
	{
	SpeakString("It is 3:00 PM");
	}
	
	else if (nTime == 16)
	{
	SpeakString("It is 4:00 PM");
	}
	
	else if (nTime == 17)
	{
	SpeakString("It is 5:00 PM");
	}
	
	else if (nTime == 18)
	{
	SpeakString("It is 6:00 PM");
	}

	else if (nTime == 19)
	{
	SpeakString("It is 7:00 PM");
	}

	else if (nTime == 20)
	{
	SpeakString("It is 8:00 PM");
	}

	else if (nTime == 21)
	{
	SpeakString("It is 9:00 PM");
	}

	else if (nTime == 22)
	{
	SpeakString("It is 10:00 PM");
	}

	else if (nTime == 23)
	{
	SpeakString("It is 11:00 PM");
	}

	else if (nTime == 24)
	{
	SpeakString("It is 12:00 AM");
	}
}
// End Sundial Script



---I. Wishing Fountain---

Alright, this is a decently troublesome script. I probably should put this in Advanced
Scripting, but I'm reasonably lazy. Hmm, my version is loosely based off of Dom Querom's
version, so I'd like to thank him.

Alright, you'll need to make a fountain (or whatever...) and in its OnUsed event do this:

// Begin Fountain Conversation Script
// By Tolerance0
// Put in OnUsed of your fountain

void main()
{
object oPC = GetLastUsedBy();

string sConversation = "convotag"; //Replace with your conversation tag

BeginConversation(sConversation, oPC);
}

// End Fountain Conversation Script

In that conversation you can have a few options. I chose:

1. Throw coin and make wish.
2. Look for coins in the fountain.
3. Do nothing.

You can diversify and add more options, but I'm going to use these two examples.
You'll want to put these scripts in the Actions Taken tab of the corresponding
choice. The coin search choice script runs off a PCs search skil, by the way.

My choices for wish were these:

1. Wish for power.
2. Wish for intelligence.
3. Wish for stamina.

For power I used this script which will cast Bull's Strength on the PC if the DC
of the roll is high enough. Bull's Strength adds 1d4+1 strength if you didn't know.

void main()
{
object oPC = GetLastUsedBy();

TakeGoldFromCreature(1, oPC, FALSE);
SetLocalInt(OBJECT_SELF,"iCoinsInPool",GetLocalInt(OBJECT_SELF,"iCoinsInPool")+1);

if (d20()>18)
  {
    FloatingTextStringOnCreature(GetName(GetPCSpeaker())+ " feels stronger now!",GetPCSpeaker(),FALSE);
    int cSpell =SPELL_BULLS_STRENGTH;
    int bCheat = 1;
    int bInstantSpell = 1;
    ActionCastSpellAtObject(cSpell, GetPCSpeaker(),METAMAGIC_ANY, bCheat,0,PROJECTILE_PATH_TYPE_DEFAULT, bInstantSpell);
  }

else
  {
    FloatingTextStringOnCreature("Nothing happens.",GetPCSpeaker(),FALSE);
  }
} 



For intelligence I used this script which will cast Fox's Cunning on the PC is the DC
of the roll is high enough. Fox's Cunning will add 1d4+1 intelligence.

void main()
{
object oPC = GetLastUsedBy();

TakeGoldFromCreature(1, oPC, FALSE);
SetLocalInt(OBJECT_SELF,"iCoinsInPool",GetLocalInt(OBJECT_SELF,"iCoinsInPool")+1);

if (d20()>18)
  {
    FloatingTextStringOnCreature(GetName(GetPCSpeaker())+ " feels smarter!",GetPCSpeaker(),FALSE);
    int cSpell =SPELL_FOXS_CUNNING;
    int bCheat = 1;
    int bInstantSpell = 1;
    ActionCastSpellAtObject(cSpell, GetPCSpeaker(),METAMAGIC_ANY, bCheat,0,PROJECTILE_PATH_TYPE_DEFAULT, bInstantSpell);
  }

else
  {
    FloatingTextStringOnCreature("Nothing happens.",GetPCSpeaker(),FALSE);
  }
}



For stamina I used this script which will cast Hate on the PC is the DC of the roll
is high enough. Haste will add an extra attack per round and increase movement by 50%.

void main()
{
object oPC = GetLastUsedBy();

TakeGoldFromCreature(1, oPC, FALSE);
SetLocalInt(OBJECT_SELF,"iCoinsInPool",GetLocalInt(OBJECT_SELF,"iCoinsInPool")+1);

if (d20()=20)
  {
    FloatingTextStringOnCreature(GetName(GetPCSpeaker())+ " has more stamina!",GetPCSpeaker(),FALSE);
    int cSpell =SPELL_HASTE;
    int bCheat = 1;
    int bInstantSpell = 1;
    ActionCastSpellAtObject(cSpell, GetPCSpeaker(),METAMAGIC_ANY, bCheat,0,PROJECTILE_PATH_TYPE_DEFAULT, bInstantSpell);
  }
    
else
  {
    FloatingTextStringOnCreature("Nothing happens.",GetPCSpeaker(),FALSE);
  }
}



Under "Take coins from the fountain." Actions Taken I used this.

// Begin Coin Search Script
// Runs off of the PCs search skill
// By Tolerance0

#include "nw_i0_tool"

void main()
{

int bFound = FALSE;
int iDC = 25;
   
   if (GetHasSkill(SKILL_SEARCH, GetPCSpeaker()))
   {
   int iRoll = d20()+GetSkillRank(SKILL_SEARCH,GetPCSpeaker()) ;
   int iCoins = GetLocalInt(OBJECT_SELF,"iCoinsInPool");
   bFound = (iRoll >= iDC);
   
        if (bFound && (iCoins >=1))
        {
        FloatingTextStringOnCreature("Found a shiny coin!!", GetPCSpeaker(),FALSE);
        SetLocalInt(OBJECT_SELF,"iCoinsInPool",iCoins-1);
        GiveGoldToCreature(GetPCSpeaker(),1);
        }

	  else
        {
        FloatingTextStringOnCreature("No coins found!", GetPCSpeaker(),FALSE);
        }
   }
}
// End Coin Search Script


---J. Doors that open with levers.---

Pretty basic. Use the lever to open the door.
Can be fun to play around with in a puzzle or something of that nature.
You can also add lock and unlock functions to provide even greater puzzles
for your players.

// Begin Door Lever Script
void main()
{
  object oDoor = GetObjectByTag("Door1"); // put YOUR door tag here
  if ( GetLocalInt( OBJECT_SELF, "m_bActivated" ) == TRUE )
  {
    SetLocalInt( OBJECT_SELF, "m_bActivated", FALSE );
    PlayAnimation( ANIMATION_PLACEABLE_DEACTIVATE );
    AssignCommand (oDoor, ActionCloseDoor (oDoor));
  }
  else
  {
    SetLocalInt( OBJECT_SELF, "m_bActivated", TRUE );
    PlayAnimation( ANIMATION_PLACEABLE_ACTIVATE );
    AssignCommand (oDoor, ActionOpenDoor (oDoor));
  }
}
// End Door Lever Script



---K. Using Scripts to Describe Areas.---

In a trigger, area, or module: used in the OnEnter script (or OnClientEnter for modules).
Will display itself in the text box in a yellow color.


//Begin Description Script
// Use in OnEnter of a trigger, area, or module
void main()
{
object oPC;
oPC = GetEnteringObject();

// You can also use SpeakString, but that is better for one line descriptions

SendMessageToPC(oPC, "You see a small statue of a local diety on the pedestal.");
SendMessageToPC(oPC, "The statue is illuminated by a thing beam of light seeping");
SendMessageToPC(oPC, "through a small but noticeable crack in the ceiling.");
}
//End Description Script


---L. NPCs Initiate Dialogue.---

When the NPC sees a PC, he or she will walk up to the PC and start a conversation.
This will not work if the PC starts visible to the NPC (no OnPercieve event fires).

Create an OnSpawn with: SetSpawnInCondition (NW_FLAG_PERCIEVE_EVENT); uncommented.

In your NPC's dialogue file, go to the very first line where he starts his dialogue with
the PC. If you only want him to start this with any given PC once, add the following script
into Actions Taken:

void main()
{
SetLocalInt(GetPCSpeaker(), "Dlg_Init_" + GetTag(OBJECT_SELF), TRUE);
}


This sets the variable that is used in the script you were using, so the dialogue
isn't done more than once. Now create a new script in the OnUserDefined event for your NPC.

You can put that second script in here, as follows:

void main()
{
int nEvent = GetUserDefinedEventNumber();
if (nEvent == 1002) // OnPerceive event
{
object oPC = GetLastPerceived();
if(GetIsPC(oPC) && GetLocalInt(oPC, "Dlg_Init_" + GetTag(OBJECT_SELF)) == FALSE && !IsInConversation(OBJECT_SELF))
{
ClearAllActions();
AssignCommand(oPC, ClearAllActions());
ActionMoveToObject(oPC);
ActionStartConversation(oPC);
}
}
}



---M. Tavern Sound Script---

This is a great script I made for use in the tavern, works if you put this in the
OnHeartbeat of one of the people in the tavern. There's all but four sounds here --- the
other 4 suck, don't worry. It works very well if I may say so about my own script :).
The sounds often overlap for a nice effect.

You can also use all of these sounds listed in a sound object for the same results.

My personal favorite is the drunk singing:
"There once was a girl from Baldur's Gate! Hahaha HoHahaha"

// Tavern sounds script
// Tolerance0 07.05.02
// Use this in the OnHeartbeat of a NPC or Creature in the tavern, it doesn't work
// if you place it in the OnHearbeat of the Area, I don't know why.

void main()
{
	ActionWait(1.0);
	switch(Random(12))
	{
	case 0:
	PlaySound("as_pl_tavsongm3");
	break;

	case 1:
	PlaySound("as_pl_tavtoastm4");
	break;

	case 2:
	PlaySound("as_pl_tavarguem3");
	break;

	case 3:
	PlaySound("as_pl_callf1");
	break;

	case 4:
	PlaySound("as_pl_tavcallm3");
	break;

	case 5:
	PlaySound("as_pl_clap2");
	break;

	case 6:
	PlaySound("as_pl_taverngrp1");
	break;

	case 7:
	PlaySound("as_pl_taverngrp2");
	break;

	case 8:
	PlaySound("as_pl_taverngrp3");
	break;

	case 9:
	PlaySound("as_pl_taverngrp4");
	break;

	case 10:
	PlaySound("as_pl_tavlaughm3");
	break;

	case 11:
	PlaySound("as_pl_tavlaughm4");
	break;
	}
}



---N. Having NPCs Attack PCs.---

Most likely you will want the NPC to go hostile after a conversation with the PC. If so,
use the generic Bioware scripts "nw_d1_attonend", and "nw_d1_attonend02".

"nw_d1_attonend" will make all of that creature's faction turn hostile to the PC,
"nw_d1_attonend02" will make only the NPC you are talking to become hostile

Please note, if you add either of those scripts to a node the NPC speaks the NPC will become
hostile as soon as he speaks the text. To bypass this, add a blank node for the PC to speak
(should just say "1. End Dialog") and insert the script into that Actions Taken tab.


You can further modify this script by changing the GetPCSpeaker() to things like
GetEnteringObject(), GetLastUsedBy() (to protect chests in houses and such), and many
other things.

Also note, if the creature you are trying to set to hostile has any levels in commoner
their AI will force them to run away from any battles. The commoner AI is also set to
form a mob if a level 10 or higher commoner is nearby. Have fun with that :-D.

Also is their AI has levels in herbivore, they will run away from every fight.



---O. PnP Style Creature Generators. ---

//:://////////////////////////////////////////////////////
//:: PnP Random Encounters
//:://////////////////////////////////////////////////////
/*
   This Script Generates Old School Random Encounters
   like the ones from a random encounter table in a PnP
   module
*/
//:://////////////////////////////////////////////////////
//:: Created By: LuckDragon
//:: Edited by Tolerance0 (removed township of solace and
//:: road to township of solace references)
//:://////////////////////////////////////////////////////

void DoEncCheck (object oPlayer)
{

if (!GetIsPC(oPlayer) || GetIsInCombat(oPlayer))
	{
      return;
	}

location lPLoc =  GetLocation(oPlayer);
int iDirection=d8();
float fX;
float fY;

switch(iDirection)
{
case 1:  // North
fX=0.0; fY=10.0;
break;

case 2:  // South
fX=0.0; fY=-10.0;
break;

case 3:  // East
fX=10.0; fY=0.0;
break;

case 4:  // West
fX=-10.0; fY=0.0;
break;

case 5:  // Northeast
fX=10.0; fY=10.0;
break;

case 6:  // Southeast
fX=10.0; fY=-10.0;
break;

case 7:  // Southwest
fX=-10.0; fY=-10.0;
break;

case 8:  // Northwest
fX=-10.0; fY=10.0;
break;
}

vector vStart = GetPositionFromLocation(lPLoc);
vector vOffset = Vector(fX,fY);
vector vEndvector = vStart+vOffset;

int myCounter = GetLocalInt(oPlayer,"myCounter");
int nNumMons,i;
string creaturetype;
int doEncounter = 0;
object thisplayArea = GetArea(oPlayer);
int numRounds = 1;
location lLoc = Location(thisplayArea,vEndvector,GetFacing(oPlayer));

if (myCounter > numRounds)
	{
      myCounter = 0;
      }

myCounter = myCounter + 1;
SetLocalInt(oPlayer,"myCounter",myCounter);

if (numRounds == myCounter)
	{
      myCounter=1;
      SetLocalInt(OBJECT_SELF,"myCounter",myCounter);

// The following line uses the Tagname of the Area, not the ResRef

if (thisplayArea == GetArea(GetObjectByTag("Road_To_Solace_Township")))
	{
      int nIsEncounter = d10(1);
      
	if (nIsEncounter == 1)
		{
            doEncounter = 1;
            myCounter=0;
            int nWhichMon = d3(1);
            switch (nWhichMon)
			{
			case 1:
			nNumMons = d3(1);
// creaturetype uses the blueprintresref of the creature, not the Tag
                  creaturetype="genericgoblin";
                  break;
                 
                  case 2:
                  nNumMons = 1;
                  creaturetype="elfmerchant";
                  break;

                  case 3:
                  nNumMons = d2(1)+1;
                  creaturetype="NW_PANTHER";
                  break;
			}
		}
	}

      // Example Area Script
	else
	if (thisplayArea == GetArea(GetObjectByTag("Township_Of_Solace")))
		{
            int nIsEncounter = d4(1);
            if (nIsEncounter == 1)
			{
			doEncounter = 1;
			myCounter=0;
			int nWhichMon = d4(1);
			switch (nWhichMon)
				{
				case 1:
				nNumMons = d2(1);
				creaturetype="nw_panther";
				break;

				case 2:
				nNumMons = d3(1)+1;
				creaturetype="nw_dog";
				break;

				case 3:
				nNumMons = d4(1);
				creaturetype="nw_goblina";
				break;

				case 4:
				nNumMons = d2(2)+1;
				creaturetype="nw_orca";
				break;
				}
			}
		}
// End Example Area Script

if (doEncounter == 1)
	{
	for (i=0;i<nNumMons;i++)
	{
object oCreated = CreateObject( OBJECT_TYPE_CREATURE, creaturetype, lLoc, FALSE);
}
}
}
}

/* OnHeartbeat main */

void main()
{
object pc = GetFirstPC();
DoEncCheck(pc);

while (GetIsObjectValid(pc))
	{
      DoEncCheck(pc);
      pc = GetNextPC();
      }
}


---P. Respawning Treasure ---

I modified the default treasure spawning script for use in Persistant Worlds and the like.
I tried to make it so that one player could not just milk it and continuously take from the
chest. It can still be gotten around by slick players but all you have to do is either check
a log of players actions and see if they continuously returned to the chest. If so then I
hope all you RESPONSIBLE DM's will ban or boot the player.

If you want this to work on Low or Medium treasure classes just change the 2 references
to GenerateMediumTreasure or GenerateLowTreasure. (I've noted their position in the script)

(and no, it's not worth changing 2 words per script to paste this two more times :-P)

////////////////////////////////
// Respawning Treasure Script
// By Tolerance0
// High Treasure Respawn
///////////////////////////////

#include "NW_o2_CONINCLUDE"

void main()
{

    if (GetLocalInt(OBJECT_SELF,"NW_DO_ONCE") != 0)
    {
       return;
    }
    object oLastOpener = GetLastOpener();
    GenerateHighTreasure(oLastOpener, OBJECT_SELF);        //CHANGE HERE
    SetLocalInt(OBJECT_SELF,"NW_DO_ONCE",1);

    if(GetLocalInt(OBJECT_SELF, "NW_DO_ONCE") == 1)
    {
    object oPlayer = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC);

        if(oPlayer == oLastOpener)
        {
        return;
        }
        ActionWait(900.0);
        GenerateHighTreasure(oLastOpener, OBJECT_SELF);   // CHANGE HERE
    }
    return;
}
//End Respawning Treasure Script



---Q. Exploding Creatures. ---

Version 1:

Great script. I'm told its pretty neat with a room full of goblins, but I haven't
much tested it myself. Allows for a saving throw as well and a chance to run away
before the monster explodes.

//Author: Albert Shih (Calidarien)
//Version: v1.0, 2002-06-25
//Usage: Caller explodes after a delay and damages nearby objects for 2d6 fire
//  damage (Reflex save DC 15)
//Notes:
// v1.0: Release version
//
void ExplodeAtLocation(location lTarget, int nDamage, int nSaveDC = 15, float fRadius = 3.)
{
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_FIREBALL), lTarget);
object oObject = GetFirstObjectInShape(SHAPE_SPHERE, fRadius, lTarget);
do
{
int nDamageAfterSave = GetReflexAdjustedDamage(nDamage, oObject, nSaveDC);
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDamageAfterSave, DAMAGE_TYPE_FIRE), oObject);
}
while ((oObject = GetNextObjectInShape(SHAPE_SPHERE, fRadius, lTarget)) != OBJECT_INVALID);
}

//
void main()
{
  location lSource = GetLocation(OBJECT_SELF);
  DelayCommand(3., ExplodeAtLocation(lSource, d6(2)));
}


Version 2:

Another version, not necessarily exploding as version 1 implements it, but I
decided it was well worth including. Limitless possibilites is nice, you know.

///////////////////////////////////////////
// Creature "explodes" into another Creature
// By FlashKnight
// Used in OnDeath of the creature

/*
On death, Enemy explodes with a fireball graphic, and another enemy is placed. This
causes an effect which makes it seem as if the enemy literally exploded into
something else, the something else being the object type and creature model. All due
credit goes to Calidarien for his "NPC explodes" script. Basically, I just added a
line to make a baddie appear. Another interesting use for this: Change / remove the
fireball effect, and you can make a defeated enemy 'transform' into an NPC.

BE WARNED: In this example, the resref for our creature is coming from a custom pallete.
So you're going to have to change it.
*/

#include "NW_O2_CONINCLUDE"
void main()
{
location lSource = GetLocation(OBJECT_SELF);
ApplyEffectAtLocation( DURATION_TYPE_INSTANT,
EffectVisualEffect( VFX_FNF_FIREBALL), lSource);
CreateObject(OBJECT_TYPE_CREATURE, "shfiend002", lSource, FALSE);
object oObject = GetFirstObjectInShape(SHAPE_SPHERE, 2., lSource);
do
{
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(d10(2), DAMAGE_TYPE_FIRE), oObject);
}
while ((oObject = GetNextObjectInShape(SHAPE_SPHERE, 2., lSource)) != OBJECT_INVALID);
}



---R. Repulsion Fields. ---

Practical uses, secret area uses, etc etc. Great script.


Version 1:

I'm currently gonna try to modify this script a but so that I can use it for a boss in a dungeon.
Oooh yes it'll screw with my PCs soooo very much. Read about it in the Daily Routine/AI section.

I'm gonna include Solias's full documentation
here because this script is so bad ass.

Name: Force Field v2

Function: This script creates an impassable wall of force that will 
knock the player back if they get too close. It can be used to 
repulsion fields, force walls, and other similar effects.

Notes: To use this script create a waypoint with the tag 
"force_bouncer", you may have as many bouncers as you
wish, the closest one to the player will be used. Place the bouncer 
in the center of the force field and draw a trigger around it. Place 
the script in the trigger's onEnter event. If you are using a non 
circular field, such as for a force wall you will want to place 
multiple bouncers inside the field to ensure the player bounces away 
properly. Be careful when placing multiple seperate force fields 
near each other as the may interfear with each other. You will 
probably want to use a placeable such as a beam of light or a portal 
to show the player where the field is, although invisable fields 
work fine too. Also, be sure you knock the player back far enough 
that they are outside the trigger.

Note for v2: The only way to pass through a force field now is to be 
jumped through it, however this means that bouncing off of a field 
can send you safely through another one if they are too close to 
each other. I'm going to look at adding this functionality for the 
next version so you can bounce from field to field. 

void bounce_player(location loc)
{
ClearAllActions();
JumpToLocation(loc);
ActionDoCommand( SetCommandable(TRUE) );
SetCommandable(FALSE);
}

void main()
{
// obtain the player and his nearest bouncer
object player = GetEnteringObject();
object bouncer = GetNearestObjectByTag( "force_bouncer", player );

// find the location of player and bouncer
location player_location = GetLocation(player);
location bouncer_location = GetLocation(bouncer);

// extract position vectors
vector player_position = GetPositionFromLocation( player_location );
vector bouncer_position = GetPositionFromLocation( bouncer_location );

// extract other location components
object player_area = GetAreaFromLocation( player_location );
float player_ori   = GetFacingFromLocation( player_location );

// calculate vector away from bouncer through player_point
vector displacement = player_position - bouncer_position;

// ensure that the magnitude of the vector is greater than 0
// otherwise use the inverse of the player's orientation as the vector
if( VectorMagnitude( displacement ) <= 0.0 )
{
displacement = -1.0 * AngleToVector( player_ori );
}

// normalize the displacement vector
displacement = VectorNormalize( displacement );

// multiply displacement by force strength
float bounce_strength = 3.5;
displacement = displacement * bounce_strength;

// calculate new player position by adding displacement to current position
player_position = displacement + player_position;
player_location = Location( player_area, player_position, player_ori );

// Play a neat visual effect
effect bounce_flash = EffectVisualEffect( VFX_IMP_SUNSTRIKE );
ApplyEffectAtLocation( DURATION_TYPE_INSTANT, bounce_flash, bouncer_location);

// Jump the player there
AssignCommand(player, bounce_player(player_location));
    
// Apply a knockdown effect (doesnt work, will crash module)
//effect knock_down = EffectKnockdown();
//ApplyEffectToObject( DURATION_TYPE_TEMPORARY, knock_down, player, 3.0);
//AssignCommand(player, ApplyEffectToObject( DURATION_TYPE_TEMPORARY, knock_down, player, 3.0));
}



Version 2:

Pushes a PC back cased on Alignment. Evil towns harbor evil people.
This script is by Deadphyre and is based off of the above script.

void bounce_player(location loc)
{
ClearAllActions();
JumpToLocation(loc);
ActionDoCommand( SetCommandable(TRUE) );
SetCommandable(FALSE);
}
void main()
{
// obtain the player and his nearest bouncer
object player = GetEnteringObject();
object bouncer = GetNearestObjectByTag( "force_bouncer", player );
int nAlign = GetAlignmentGoodEvil(player);
if (nAlign == ALIGNMENT_GOOD)
{
// find the location of player and bouncer
location player_location = GetLocation(player);
location bouncer_location = GetLocation(bouncer);

// extract position vectors
vector player_position = GetPositionFromLocation( player_location );
vector bouncer_position = GetPositionFromLocation( bouncer_location );

// extract other location components
object player_area = GetAreaFromLocation( player_location );
float player_ori = GetFacingFromLocation( player_location );

// calculate vector away from bouncer through player_point
vector displacement = player_position - bouncer_position;

// ensure that the magnitude of the vector is greater than 0
// otherwise use the inverse of the player's orientation as the vector
if( VectorMagnitude( displacement ) <= 0.0 )
{
displacement = -1.0 * AngleToVector( player_ori );
}

// normalize the displacement vector
displacement = VectorNormalize( displacement );

// multiply displacement by force strength
float bounce_strength = 3.5;
displacement = displacement * bounce_strength;

// calculate new player position by adding displacement to current position
player_position = displacement + player_position;
player_location = Location( player_area, player_position, player_ori );

// Play a neat visual effect
effect bounce_flash = EffectVisualEffect( VFX_IMP_SUNSTRIKE );
ApplyEffectAtLocation( DURATION_TYPE_INSTANT, bounce_flash, bouncer_location);

// Jump the player there
AssignCommand(player, bounce_player(player_location));

// Apply a knockdown effect
//effect knock_down = EffectKnockdown();
//ApplyEffectToObject( DURATION_TYPE_TEMPORARY, knock_down, player, 3.0);
//AssignCommand(player, ApplyEffectToObject( DURATION_TYPE_TEMPORARY, knock_down, player, 3.0));
}
else
if (nAlign == ALIGNMENT_NEUTRAL)
{
// find the location of player and bouncer
location player_location = GetLocation(player);
location bouncer_location = GetLocation(bouncer);

// extract position vectors
vector player_position = GetPositionFromLocation( player_location );
vector bouncer_position = GetPositionFromLocation( bouncer_location );

// extract other location components
object player_area = GetAreaFromLocation( player_location );
float player_ori = GetFacingFromLocation( player_location );

// calculate vector away from bouncer through player_point
vector displacement = player_position - bouncer_position;

// ensure that the magnitude of the vector is greater than 0
// otherwise use the inverse of the player's orientation as the vector
if( VectorMagnitude( displacement ) <= 0.0 )
{
displacement = -1.0 * AngleToVector( player_ori );
}

// normalize the displacement vector
displacement = VectorNormalize( displacement );

// multiply displacement by force strength
float bounce_strength = 3.5;
displacement = displacement * bounce_strength;

// calculate new player position by adding displacement to current position
player_position = displacement + player_position;
player_location = Location( player_area, player_position, player_ori );

// Play a neat visual effect
effect bounce_flash = EffectVisualEffect( VFX_IMP_SUNSTRIKE );
ApplyEffectAtLocation( DURATION_TYPE_INSTANT, bounce_flash, bouncer_location);

// Jump the player there
AssignCommand(player, bounce_player(player_location));

// Apply a knockdown effect
//effect knock_down = EffectKnockdown();
//ApplyEffectToObject( DURATION_TYPE_TEMPORARY, knock_down, player, 3.0);
//AssignCommand(player, ApplyEffectToObject( DURATION_TYPE_TEMPORARY, knock_down, player, 3.0));
}
}



---S. Level Restricted Areas. ---

A pair of scripts. Put the first script in the OnAreaTransitionClick of your door, or OnEnter
of your trigger. Will keep a low level char out of a high level area, or keep a player who's
too high out of a low level area.

/////////////////////////////
//Script: "area_restrict"
/*
To change level restrictions simply change nDesiredLevel and/or change the < or > symbol
in the (nPlayerLevel < DesiredLevel) conditional. You've all taken 5th grade math and know
which symbol is which...right?
Hmm...since I have little faith in my readers:

less than:    <
greater than: >

also change the #include statement if you change the 2nd script name
*/

#include "area_restrict2"
void main()
{
    int nDesiredLevel = 10;

    object oClicker = GetClickingObject();
    object oTarget = GetTransitionTarget( OBJECT_SELF );
    location lLoc = GetLocation( oTarget );
    int nPlayerLevel = fnGetPCLevel( oClicker );
    if ( nPlayerLevel < nDesiredLevel )
    {
    AssignCommand(oClicker, JumpToLocation(lLoc));
    }
    else
    {
    SpeakString("You must be below level " + IntToString(nDesiredLevel) + " to enter.");
    }
}


/////////////////////////////
// Script: area_restrict2
/*
Will give you an error upon compiling. Don't worry about it,everything will still work fine.
It give the error because there's no main() function in this script, but IF you add one it
will give you an error for having 2 (area_restrict runs area_restrict2) main() functions,
and won't work AT ALL.
*/

// returns player level as an int
// oPlayer is the player whose level you want to get
int fnGetPCLevel( object oPlayer );
int fnGetPCLevel( object oPlayer )
{
    int nPlayerLevel;
    int nPlayerXp = GetXP( oPlayer );
    // establish exp needed for levels (PHB, page 22)
    SetLocalInt( oPlayer, "nLevel_1", 0 );
    SetLocalInt( oPlayer, "nLevel_2", 1000 );
    SetLocalInt( oPlayer, "nLevel_3", 3000 );
    SetLocalInt( oPlayer, "nLevel_4", 6000 );
    SetLocalInt( oPlayer, "nLevel_5", 10000 );
    SetLocalInt( oPlayer, "nLevel_6", 15000 );
    SetLocalInt( oPlayer, "nLevel_7", 21000 );
    SetLocalInt( oPlayer, "nLevel_8", 28000 );
    SetLocalInt( oPlayer, "nLevel_9", 36000 );
    SetLocalInt( oPlayer, "nLevel_10", 45000 );
    SetLocalInt( oPlayer, "nLevel_11", 55000 );
    SetLocalInt( oPlayer, "nLevel_12", 66000 );
    SetLocalInt( oPlayer, "nLevel_13", 78000 );
    SetLocalInt( oPlayer, "nLevel_14", 91000 );
    SetLocalInt( oPlayer, "nLevel_15", 105000 );
    SetLocalInt( oPlayer, "nLevel_16", 120000 );
    SetLocalInt( oPlayer, "nLevel_17", 136000 );
    SetLocalInt( oPlayer, "nLevel_18", 153000 );
    SetLocalInt( oPlayer, "nLevel_19", 171000 );
    SetLocalInt( oPlayer, "nLevel_20", 190000 );
    // so our for loop doesn't spit out an error
    SetLocalInt( oPlayer, "nLevel_21", 1000000 );
    int i;
    for ( i = 1; i <= 20; i++ )
    {
        string sCurrent = IntToString(i);
        string sNext = IntToString(i + 1);
        int nCurrent = GetLocalInt( oPlayer, "nLevel_" + sCurrent );
        int nNext = GetLocalInt( oPlayer, "nLevel_" + sNext );
        if ( ( nPlayerXp >= nCurrent ) && ( nPlayerXp < nNext ) )
        {
        nPlayerLevel = i;
        }
    }
    return nPlayerLevel;
}



---T. Applying Effects.---

You can apply effects to both locations and objects. Both are very useful for special effect
sequences, trap sequences, "movie" sequences, and much more. Both are actually alot alike.
There is a full list of all visual effects and what they look like in Section: III.9.A.

Duration:
Three choices here. DURATION_TYPE_TEMPORARY, DURATION_TYPE_PERMANENT, DURATION_TYPE_INSTANT.
I think they are all self explanatory...

Apply effects to objects:
void main()
{
effect eEffect = EffectSleep();

// for visual effect use:
// effect eEffect = EffectVisualEffect(VFX_NAME);

object oMan = GetObjectByTag("MAN_ONE"));

ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eEffect, oMan, 5.0);
}

Applying effects to locations:
void main()
{
// I dont think sleep-like effects will work on locations
effect eEffect = EffectVisualEffect(VFX_SUMMON_MONSTER_2);

//i use this on triggers alot, but for waypoints:
//location lLoca = GetLocation(GetWaypointByTag("WP_MANONE"));

//if its not on the trigger iself but fired from something else
// define the trigger name/tag by using a string
// location lLoca = GetLocation(sTRIGGER_TAG));

location lLoca = GetLocation(OBJECT_SELF);

ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eEffect, lLoca, 1.0);
}




[ 6. Advanced Scripting. ]

---A. Bounty Hunters. ---

Alright a really big script. 9 files total*, all made by Dom Querom. As far as I know this
works practically flawlessly in single player, but the bounty hunter goes somewhat "rampant"
in multiplayer**.

* I've named the scripts as they appear in the sample module located at:

  http://www.gulbsoft.de/modules.php?name=Downloads&d_op=getit&lid=9

  I've also edited some of them for space reasons. For example, I removed all commented material
  in the OnSpawn script. I figure if anyone is editing the Bounty Hunter further, they will know
  what they are doing and not need the commented portions.

**This is the Public BETA Version. Once Dom releases newer, better-working verions I will update
  this guide and make a note of the changes in Version History (I.3).

The sample module includes a pre-made bounty hunter, but you can make any NPC a hunter by just
adding the conversation to him, setting his OnSpawn and OnUserDefined scripts in his Scripts tab,
and setting him to faction: Bounty Hunter.


Conversation: gz_c_bountyh (I simplified the text here, but not in the module)

+(BH): You need my help?                                            (Appears When: gzcc_bountyh_03)
| +(PC): Yes, I do.
| | +(BH): I can only do this is you have a writ of your attacker.
| |   +(PC): I have such a writ <StartAction>[show it]</Start>      (Appears When: gzcc_bountyh_02)
| |     +(BH): Ah, a valid writ. So you want the removal of <CUSTOM10>?
| |       +(PC): Yes, <CUSTOM10>.
| |         +(BH): My price for the job is <CUSTOM11>, alright?
| |           +(PC): Deal!        (Appears When: gzcc_bountyh_p01, Actions Taken: gzcs_bountyh_p03)
| |             +(BH):Alright. You will know when the deed is done, but no promises.
| |               |(PC): Bye.
| |           |(PC): No deal.
| |       |(PC): Nevermind...
| |   |(PC): I dont have one, sorry.
| |(PC): No, I don't.
|
|(BH): I have a job to do. Get lost.                                (Appears When: gzcc_bountyh_04)
|(BH): No work today, I'm on my way home.                           (Appears When: gzcc_bountyh_05)



/////////////////////////////////////////////////////
// Script: gz_bountyh_spawn
// Put this in the OnSpawn of your Bounty Hunter NPC

#include "NW_O2_CONINCLUDE"
#include "NW_I0_GENERIC"

void main()
{
SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT); //Fire User Defined Event 1001
SetSpawnInCondition(NW_FLAG_ATTACK_EVENT);    //Fire User Defined Event 1005
SetSpawnInCondition(NW_FLAG_DEATH_EVENT);     //Fire User Defined Event 1007

SetListeningPatterns();
WalkWayPoints();
GenerateNPCTreasure();
SetLocalLocation(OBJECT_SELF,"T1_NPC_SPAWNLOCATION",GetLocation(OBJECT_SELF));
}



/////////////////////////////////////////////////
// Script: gz_bountyh_usrdf
// Put this in the OnUserDefined of your Bounty Hunter NPC
//::///////////////////////////////////////////////
//:: Bountyhunter Script by Dom Queron
//:: Dom@gulbsoft.de
//:://////////////////////////////////////////////
/*
    Determines the course of action to be taken
    on a user defined event.
*/
//:://////////////////////////////////////////////
//:: Created By: Dom Queron
//:: Created On: April 28, 2002
//:://////////////////////////////////////////////


void main()
{
// enter desired behaviour here


if (GetUserDefinedEventNumber() == 1001)
{
 if (GetLocalInt(OBJECT_SELF,"T1_NPC_ONJOB") == TRUE)
 {
  if (!IsInConversation(OBJECT_SELF))
  {
   if (!GetIsInCombat())
   {
   object oTarget;
    if (GetLocalObject(OBJECT_SELF,"T1_NPC_BOUNTYTARGET") == OBJECT_INVALID)
    {
    oTarget = GetObjectByTag(GetLocalString(OBJECT_SELF,"T1_NPC_BOUNTYTAG"));
     if (oTarget == OBJECT_INVALID)
     {
//looks like he is dead or logged off so move home ...
      if (GetLocalInt(OBJECT_SELF,"T1_NPC_BOUNTYSPOKEN") == 1)
      {
      ActionSpeakString("I think my job is done...");
      SetLocalInt(OBJECT_SELF, "T1_NPC_MOVING_HOME",1);
      DeleteLocalInt(OBJECT_SELF,"T1_NPC_ONJOB");
      }
      else
      {
       if (d100() < 5)
       {
       ActionSpeakString("Hmm... must be around here ... somewhere");
// set onjob here to false if you want
       }
      }

return;
     }
    else
    {
     if (GetArea(OBJECT_SELF) != GetArea(oTarget))
     {
     ActionJumpToObject(oTarget, FALSE);
     return;
     }
     else
     {
      if (GetDistanceToObject(oTarget)< 5.0f)
      {
       if (GetLocalInt(OBJECT_SELF,"T1_NPC_BOUNTYSPOKEN") != 1)
       {
       ActionSpeakString("Ah its you " + GetName(oTarget) + " ... I've been looking for you! ...die!");
       SetLocalInt(OBJECT_SELF,"T1_NPC_BOUNTYSPOKEN",1);
//Take this out if you dont like the Debug feedback
       SendMessageToPC(GetLocalObject(OBJECT_SELF,"T1_NPC_EMPLOYER"),GetName(OBJECT_SELF) + " has found " +GetName(oTarget) + " and will do him now!");
       }
      else
      {
      ActionAttack(oTarget);
      }
     }
    else
    {
    ActionMoveToObject(oTarget, TRUE);
    }
   }
  }
 }
}
// get is combat
else
{
//we have talked to the victim and he is dead now
if (GetIsDead(GetLocalObject(OBJECT_SELF,"T1_NPC_BOUNTYTARGET")) == TRUE && GetLocalInt(OBJECT_SELF,"T1_NPC_BOUNTYSPOKEN")==1)
{
ActionSpeakString("You earned me good money, now rot here to death!");
SendMessageToPC(GetLocalObject(OBJECT_SELF,"T1_NPC_EMPLOYER"),GetName(OBJECT_SELF) + " has killed " +GetName(GetLocalObject(OBJECT_SELF,"T1_NPC_BOUNTYTARGET")));
SetLocalInt(OBJECT_SELF, "T1_NPC_MOVING_HOME",1);
DeleteLocalInt(OBJECT_SELF,"T1_NPC_ONJOB");
}
else
{
 if (GetAttackTarget() == GetLocalObject(OBJECT_SELF,"T1_NPC_BOUNTYTARGET"))
  if (GetLocalInt(OBJECT_SELF,"T1_NPC_BOUNTYSPOKEN") != 1)
  {
  ActionSpeakString("Ah it's you ... I've been looking for you! ...die!");
  SetLocalInt(OBJECT_SELF,"T1_NPC_BOUNTYSPOKEN",1);
//Take this out if you dont like the Debug feedback
  SendMessageToPC(GetLocalObject(OBJECT_SELF,"T1_NPC_EMPLOYER"),GetName(OBJECT_SELF) + " has found target and will do him now!");
  }
 }
}

}
// objectvalid
}
else // ON_JOB
{
 if  (GetLocalInt(OBJECT_SELF, "T1_NPC_MOVING_HOME") == 1)
 {
  if (d100()<15)
  ActionSpeakString("Its always nice to go home after a hard days work");

   if (GetAreaFromLocation(GetLocalLocation(OBJECT_SELF,"T1_NPC_SPAWNLOCATION")) != GetArea(OBJECT_SELF))
    ActionJumpToLocation(GetLocalLocation(OBJECT_SELF,"T1_NPC_SPAWNLOCATION"));
   else
    ActionMoveToLocation(GetLocalLocation(OBJECT_SELF,"T1_NPC_SPAWNLOCATION"));


  if (GetDistanceBetweenLocations(GetLocation(OBJECT_SELF),GetLocalLocation(OBJECT_SELF,"T1_NPC_SPAWNLOCATION"))<2.5f)
  {
  ActionSpeakString("Home, sweet home!");
  ActionRest();
  ActionSpeakString("Ahh, now I'm back in working condition");

  DeleteLocalObject(OBJECT_SELF,"T1_NPC_EMPLOYER");
  DeleteLocalObject(OBJECT_SELF,"T1_NPCBOUNTYTARGET");
  DeleteLocalString(OBJECT_SELF,"T1_NPC_BOUNTYTAG");
  DeleteLocalInt(OBJECT_SELF,"T1_NPC_BOUNTYSPOKEN");
  DeleteLocalInt(OBJECT_SELF, "T1_NPC_MOVING_HOME");
  }
 }
}
}
else
{
 if (GetUserDefinedEventNumber() ==1005) // hunter got attacked
 {
  if (GetLastAttacker(OBJECT_SELF) == GetLocalObject(OBJECT_SELF,"T1_NPC_BOUNTYTARGET"))
  {
   if (GetLocalInt(OBJECT_SELF,"T1_NPC_BOUNTYSPOKEN") != 1)
   {
   SpeakString("So you awaited me? No matter, you will die!");
   SetLocalInt(OBJECT_SELF,"T1_NPC_BOUNTYSPOKEN",1);
   }
  }
 }
else

if (GetUserDefinedEventNumber() ==1007) // hunter died
{
SendMessageToPC(GetLocalObject(OBJECT_SELF,"T1_NPC_EMPLOYER"),GetName(OBJECT_SELF) + " got killed and failed his job" );

/*

Im working on this   ..
SetHP
ActionJumpToLocation(GetLocalLocation(OBJECT_SELF,"T1_NPC_SPAWNLOCATION"));
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),OBJECT_SELF);
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(OBJECT_SELF))
*/
}
}
}



//////////////////////////////////////////////////
// Script: gz_pdeath_bounty
// Put This in OnPlayerDeath of Module Properties
//////////////////////////////////////////////////
/*
    This script handles the default behavior
    that occurs when a player dies.
*/
//:://////////////////////////////////////////////
//:: Created By: Dom Queron
//:: Created On: June 2002
//:://////////////////////////////////////////////


void Raise(object oPlayer)
{
effect eVisual = EffectVisualEffect(VFX_IMP_RESTORATION);
effect eBad = GetFirstEffect(oPlayer);
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oPlayer);
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oPlayer)), oPlayer);

//Search for negative effects
while(GetIsEffectValid(eBad))
{
 if (GetEffectType(eBad) == EFFECT_TYPE_ABILITY_DECREASE ||
 GetEffectType(eBad) == EFFECT_TYPE_AC_DECREASE ||
 GetEffectType(eBad) == EFFECT_TYPE_ATTACK_DECREASE ||
 GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_DECREASE ||
 GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE ||
 GetEffectType(eBad) == EFFECT_TYPE_SAVING_THROW_DECREASE ||
 GetEffectType(eBad) == EFFECT_TYPE_SPELL_RESISTANCE_DECREASE ||
 GetEffectType(eBad) == EFFECT_TYPE_SKILL_DECREASE ||
 GetEffectType(eBad) == EFFECT_TYPE_BLINDNESS ||
 GetEffectType(eBad) == EFFECT_TYPE_DEAF ||
 GetEffectType(eBad) == EFFECT_TYPE_PARALYZE ||
 GetEffectType(eBad) == EFFECT_TYPE_NEGATIVELEVEL)
 {
//Remove effect if it is negative.
 RemoveEffect(oPlayer, eBad);
 }
eBad = GetNextEffect(oPlayer);
}

//Fire cast spell at event for the specified target
SignalEvent(oPlayer, EventSpellCastAt(OBJECT_SELF, SPELL_RESTORATION, FALSE));
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisual, oPlayer);
}

// Dom: Customized Part starts here...

void CreateBountyWrit(object oPC)
{
/*
  I use GetLastHostileActor  as a workaround since GetLastKiller() mysteriously does not work
  for player characters. It COULD be that the wrong person gets a bounty writ on his head....
*/
object oKiller = GetLastHostileActor(oPC);

if (oKiller == OBJECT_INVALID || GetObjectType(oKiller) != OBJECT_TYPE_CREATURE)
{
SendMessageToPC(oPC," Could not identify killer " + GetTag(oKiller) + " : " + GetName(oKiller));
}
else
{
//We only create writs if the enemy is evil or a pc
if (GetIsPC(oKiller) || GetStandardFactionReputation(STANDARD_FACTION_DEFENDER,oKiller)<11)
{
object oWrit =  GetItemPossessedBy(oPC,"GZ_IT_BOUNTYWRIT");
 if (oWrit != OBJECT_INVALID)
 {
 SendMessageToPC(oPC,"You already have a bounty writ in your inventory");
 }
else
 {
//Spawn a bountywrit on the victim
 oWrit = CreateItemOnObject("gz_it_bountywrit",oPC);
// Stamp the name of the killer on the bounty item
  if (oWrit != OBJECT_INVALID)
  {
  SetLocalString(oWrit,"T1_OBJECT_BOUNTYTAG",GetTag(oKiller));
  SetLocalString(oWrit,"T1_OBJECT_BOUNTYNAME",GetName(oKiller));
  }
 }
}
}
}

void main()
{
object oPlayer = GetLastPlayerDied();

// * Handle Spirit of the Wood Death

string sArea = GetTag(GetArea(oPlayer));
CreateBountyWrit(oPlayer)  ;

// Dom: Here we create the bounty item

// * make friendly to Each of the 3 common factions
AssignCommand(oPlayer, ClearAllActions());

// * Note: waiting for Sophia to make SetStandardFactionReptuation to clear all personal reputation
if (GetStandardFactionReputation(STANDARD_FACTION_COMMONER, oPlayer) <= 10)
{
SetLocalInt(oPlayer, "NW_G_Playerhasbeenbad", 10); // * Player bad
SetStandardFactionReputation(STANDARD_FACTION_COMMONER, 80, oPlayer);
}

if (GetStandardFactionReputation(STANDARD_FACTION_MERCHANT, oPlayer) <= 10)
{
SetLocalInt(oPlayer, "NW_G_Playerhasbeenbad", 10); // * Player bad
SetStandardFactionReputation(STANDARD_FACTION_MERCHANT, 80, oPlayer);
}

if (GetStandardFactionReputation(STANDARD_FACTION_DEFENDER, oPlayer) <= 10)
{
SetLocalInt(oPlayer, "NW_G_Playerhasbeenbad", 10); // * Player bad
SetStandardFactionReputation(STANDARD_FACTION_DEFENDER, 80, oPlayer);
}
DelayCommand(2.5, PopUpGUIPanel(oPlayer,GUI_PANEL_PLAYER_DEATH));
}



//////////////////////////////////////////////////
// Script: gzcc_bountyh_02
// See Conversation above for placement
//:://////////////////////////////////////////////
//:: Created By: Dom Queron
//:: Created On: 6/27/2002 5:45:07 PM
//:://////////////////////////////////////////////
#include "nw_i0_tool"

int StartingConditional()
{
int iRet;
// Make sure the PC speaker has these items in their inventory
if(!CheckPartyForItem(GetPCSpeaker(), "GZ_IT_BOUNTYWRIT"))
{
iRet = FALSE;
}
else
{
object oItm = GetItemPossessedBy(GetPCSpeaker(),"GZ_IT_BOUNTYWRIT");
string sKiller = GetLocalString(oItm,"T1_OBJECT_BOUNTYNAME");
SetCustomToken(10,sKiller);
// store the bounty item here for later checkup
SetLocalObject(GetPCSpeaker(),"T1_PLAYER_ACTIVEBOUNTITEM",oItm);
iRet = TRUE;
}
return iRet;
}



/////////////////////////////////////////////////
// Script: gzcc_bountyh_03
// See Conversation above for placement

int StartingConditional()
{
int iResult;
iResult = (GetLocalInt(OBJECT_SELF,"T1_NPC_ONJOB")==FALSE && (GetLocalInt(OBJECT_SELF,"T1_NPC_MOVING_HOME")==FALSE));
return iResult;
}



/////////////////////////////////////////////////
// Script: gzcc_bountyh_04
// See Conversation above for placement

int StartingConditional()
{
int iResult;
iResult = (GetLocalInt(OBJECT_SELF,"T1_NPC_ONJOB")==TRUE);
return iResult;
}



/////////////////////////////////////////////////
// Script: gzcc_bountyh_05
// See Conversation above for placement

int StartingConditional()
{
int iResult;
iResult = (GetLocalInt(OBJECT_SELF,"T1_NPC_MOVING_HOME")==TRUE);
return iResult;
}



/////////////////////////////////////////////////
// Script: gzcs_bountyh_p01
// See Conversation above for placement

int StartingConditional()
{
int iResult;
// Default Price = CR* 100
//
int nPrice = FloatToInt((GetChallengeRating(GetPCSpeaker())*100)*(0.1*(100 - (GetAbilityModifier(ABILITY_CHARISMA, GetPCSpeaker())*5))));

object oItm = GetLocalObject(GetPCSpeaker(),"T1_PLAYER_ACTIVEBOUNTITEM");
object oTarget = GetObjectByTag(GetLocalString(oItm,"T1_OBJECT_BOUNTYTAG"));

if (oTarget != OBJECT_INVALID)
nPrice = FloatToInt((GetChallengeRating(oTarget)*100)*(0.1*(100 - (GetAbilityModifier(ABILITY_CHARISMA, GetPCSpeaker())*5))));
SetCustomToken(11,IntToString(nPrice));

iResult = (GetGold(GetPCSpeaker())>=nPrice);
return iResult;
}



/////////////////////////////////////////////////
// Script: gzcs_bountyh_p03
// See Conversation above for placement

void main()
{
SetLocalInt(OBJECT_SELF,"T1_NPC_ONJOB",TRUE);
object oPC = GetPCSpeaker();
object oItm = GetLocalObject(oPC,"T1_PLAYER_ACTIVEBOUNTITEM");
string sTag = GetLocalString(oItm,"T1_OBJECT_BOUNTYTAG");

SetLocalString(OBJECT_SELF,"T1_NPC_BOUNTYTAG",sTag);
SetLocalObject(OBJECT_SELF,"T1_NPC_EMPLOYER",GetPCSpeaker());

DestroyObject(oItm);
DeleteLocalObject(oPC,"T1_PLAYER_ACTIVEBOUNTITEM");
int nPrice =FloatToInt((GetChallengeRating(GetPCSpeaker())*100)*(0.1*(100 - (GetAbilityModifier(ABILITY_CHARISMA, GetPCSpeaker())*5))));

object oTarget = GetObjectByTag(sTag);

if (oTarget != OBJECT_INVALID)
nPrice = FloatToInt((GetChallengeRating(oTarget)*100)*(0.1*(100 - (GetAbilityModifier(ABILITY_CHARISMA, GetPCSpeaker())*5))));
TakeGoldFromCreature(nPrice,GetPCSpeaker());
}



---B. PvP Arenas. ---

WILL BE IN LATER VERSION OF GUIDE.



---C. Secret Doors. ---
      
Theres ALOT of ways to do this so I'll add them all when I get the time.

For now, I'm just putting one.

Now, if you are going by traditional PnP rules, secret doors aren't just random spots that
teleport you to secret areas. When you walk over an area, open object, and use objects the DM could
check your search skill and roll some dice to see if you could discover the secret. I'm glad to see
the NWN community applies the same rules. However, I have a complaint. It's always about search skill!
I prefer (in my modules at least...) to use other skill checks like Strength to move boulders or rocks
and other such things. It allows for more diversity and somewhat teamwork to find secret areas.
If you are checking abilities (like Strength and Charisma) you will need to use GetAbilityScore or
GetAbilityModifier, skill checks are done by GetSkillRank.

First off, here's a list of all Skill Check-able things.

ABILITY_STRENGTH
ABILITY_DEXTERITY
ABILITY_CONSTITUTION
ABILITY_INTELLIGENCE
ABILITY_WISDOM
ABILITY_CHARISMA

SKILL_ANIMAL_EMPATHY
SKILL_CONCENTRATION
SKILL_DISABLE_TRAP
SKILL_DISCIPLINE
SKILL_HEAL
SKILL_HIDE
SKILL_LISTEN
SKILL_LORE
SKILL_MOVE_SILENTLY
SKILL_OPEN_LOCK
SKILL_PARRY
SKILL_PERFORM
SKILL_PERSUADE
SKILL_PICK_POCKET
SKILL_SEARCH
SKILL_SET_TRAP
SKILL_SPELLCRAFT
SKILL_SPOT
SKILL_TAUNT
SKILL_USE_MAGIC_DEVICE


Version 1:

Checks a PCs skill rank and sets a variable. This was used in a trigger that was in front of a
bookshelf. In the complete version of this script the object would fire off a conversation once
used and once the variable was set. Very simple and practical secret door. Oh and PCs, no DM is
slick enough to never use a secret door in a bookshelf. Mark my words.

void main()
{
//Grab the secret doors object.
string sSecretDoor = "SC_BOOKSHELF";
object oDoor = GetObjectByTag(sSecretDoor);

//Set the difficulty of finding the door here.
int iDoorDC = 18;

//Grab the PC.
object oPC = GetEnteringObject();

//Run the test
//If the entering object is a PC.
if (GetIsPC(oPC))
    {
    //Grab the PC's Search Skill rank
    int iPCSearchRank = GetSkillRank(SKILL_SEARCH,oPC);
    //If the PC is untrained in search it returns a -1
    //Zero this number.
    if (iPCSearchRank < 0)
        {
        iPCSearchRank = 0;
        }

    //Roll your d20
    int roll = Random(20);
    roll = roll + 1;

    //Check if the Roll plus your rank is greater than the Difficulty of
    //the door.
    if ((iPCSearchRank + roll) > iDoorDC)
        {
        //Make the Door GLOBALLY detected
        SetLocalInt(oDoor, "detected" , 1);
        }
    }
}



---D. Glowing Objects/People. ---

Description says it all. Another kick ass script from Albert Shih.


//Script: cal_glow
//Author: Albert Shih (Calidarien)
//Version: v0.9, 2002-06-27
//Description: When a creature wields a item with a certain tag in its hands,
//it will "glow" when near an object of a specific tag.
//Usage: Attach to OnHeartbeat
//Notes:
//  v0.9: Pretty cool
//
/*
Edited by Tolerance0 (July 26, 02)

The starting lines of functions were included in comments, I fixed that.

You forgot to define TRIGGER_GLOW_TAG (line 68), and it prevented the script
from compiling. I figured this was on purpose, for people to insert the tag
there, but I added string TRIGGER_GLOW_TAG at the top so people don't have
to scroll down so far. Also was a pain, I couldn't figure out why it didn't
compile for the longest time :)

*/

string ITEM_GLOW_TAG = "CAL_SWORD";  //Item that will cause glowing string
string TRIGGER_GLOW_TAG = "GLOW_TRIGGER"; //Trigger tag
float PROXIMITY_DISTANCE = 4.;       //Distance to check within
int VFX_EFFECT = VFX_DUR_PARALYZED;  //Which VFX to use
int CAL_DEBUG = FALSE;               //Useful debugging messages

//Sends a message to all connected people if CAL_DEBUG == TRUE


void Alert(string szMessage)
{
if(CAL_DEBUG)
  {
  object oPC = GetFirstPC();
  SendMessageToAllDMs(szMessage);
  while(GetIsObjectValid(oPC))
    {
    SendMessageToPC(oPC, szMessage);
    oPC = GetNextPC();
    }
  }
}

//Checks whether any objects with tag sTag are within fDist of oCenter

int Proximity(object oCenter, string sTag, float fDist)
{
int nCounter = 0;
object oThing;
Alert("Proximity(): Checking proximity");
while(GetIsObjectValid(oThing = GetNearestObjectByTag(sTag, oCenter, ++nCounter)))
  {
  if((GetArea(oCenter) == GetArea(oThing)) && ((GetDistanceBetween(oCenter, oThing)) < fDist))
    {
    Alert("Proximity(): Found one thing with tag " + sTag + " in distance " + FloatToString(fDist));
    return TRUE;
    }
  }
Alert("Proximity(): Found " + IntToString(nCounter-1) + " things with tag " + sTag + " outside of distance " + FloatToString(fDist));
return FALSE;
}

//"Glowing" function, checks for inventory conditions (in this case, in hands)

void Glow(object oItem)
{
object oOwner = GetItemPossessor(oItem);
Alert("Glow(): Item is being carried");
if((GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oOwner) == oItem) || (GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oOwner) == oItem))
  {
  if(Proximity(oOwner, TRIGGER_GLOW_TAG, PROXIMITY_DISTANCE))
    {
    Alert("Glow(): Starting/continuing glow");
    effect eVis = EffectVisualEffect(VFX_EFFECT);
    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVis, oOwner, 7.);
    }
  }
}

//Search for through all instances of sTag and run Glow() on only those which
//are currently in a creature's inventory

void SearchAndGlow(string sTag)
{
int nCounter = -1;
object oOwner, oItem;
while(GetIsObjectValid(oItem = GetObjectByTag(sTag, ++nCounter)))
{
oOwner = GetItemPossessor(oItem);
  if(GetIsObjectValid(oOwner))
  {
  Glow(oItem);
  }
}
Alert("SearchAndGlow(): Found " + IntToString(nCounter) + " item(s) with tag " + sTag); }

//Main function
void main()
{
SearchAndGlow(ITEM_GLOW_TAG);
}



---E. Barmaids/Bartenders. ---

Alright, this script is now functioning! For it to work you must NOT change the default scripts on the NPC.
If you change them and take away the part that tells these events to fire, your bartender or barmaid will
just stand there lifeless.

In the OnSpawn default of the creature uncomment these two lines, and save as a new filename.

SetSpawnInCondition (NW_FLAG_HEARTBEAT_EVENT);
SetSpawnInCondition (NW_FLAG_ON_DIALOGUE_EVENT);


In OnUserDefined use this script:

////////////////////////////////////////////////////////////
// OnUserDefined
// Barmaid NPC

// Barmaid NWScript based on David Gaider of BioWare's script

void main()
{
int nUser = GetUserDefinedEventNumber();

//This number should be approx number of NPC patrons
int nRandom = Random(4);

object oCustomer = GetLocalObject(OBJECT_SELF, "CUSTOMER");
object oBar = GetWaypointByTag("WP_Bar");     //This waypoint is where she gets drinks from
object oBar2 = GetWaypointByTag("WP_Bar2");   //This waypoint she returns to rest after delivering drinks

if (nUser == 1001) // This is a heartbeat event, every 6 sec
{

//SendMessageToAllDMs("Barmaid Heartbeat");   <-- I use this for debugging sometimes

if(!GetIsObjectValid(oCustomer) && (GetLocalInt(OBJECT_SELF, "BARMAID_STATE") < 1))
{
// Randomly seek out up to the nRandom-nearest non-PC
oCustomer = GetNearestCreature (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_NOT_PC, OBJECT_SELF, nRandom);

//Make sure she's not going to ask the Barkeeper if he wants a drink
if (oCustomer != GetObjectByTag("Barkeeper") && oCustomer != OBJECT_SELF && GetIsObjectValid(oCustomer) )
{

// Move to Customer and ask what he/she wants
SetLocalInt (OBJECT_SELF, "BARMAID_STATE", 1);
SetLocalObject (OBJECT_SELF, "CUSTOMER", oCustomer);
ActionMoveToObject(oCustomer);

switch(Random(4))
{
case 0:
ActionSpeakString ("Can I get you something?");
break;

case 1:
ActionSpeakString ("What'll it be?");
break;

case 2:
ActionSpeakString ("Some refreshment for you and your friends?");
break;

case 3:
ActionSpeakString ("Another round?");
break;
}

ActionWait(5.0); //Wait 5 secs.

// Move to the Bar to get the Drinks
ActionDoCommand (SetLocalInt(OBJECT_SELF, "BARMAID_STATE", 2));
ActionMoveToObject(oBar);

switch(Random(4))
{
case 0:
ActionSpeakString ("I need two Dragon Breath Ales and a Ilipur Bitter.");
break;

case 1:
ActionSpeakString ("A Mindflayer with a twist and two bottles of Prespur Rum.");
break;

case 2:
ActionSpeakString ("They want a basket of Crispy Ogre Ears");
break;

case 3:
ActionSpeakString ("Three ales and a pony keg for theHalf-Orc.");
break;
}

ActionWait(8.0);//Wait 8 secs.

// Move back to the customer and give him/her the drinks
ActionDoCommand (SetLocalInt(OBJECT_SELF, "BARMAID_STATE", 3));
ActionMoveToObject (oCustomer);

switch(Random(4))
{
case 0:
ActionSpeakString ("Enjoy.");
break;

case 1:
ActionSpeakString ("That'll be 5 platinum. I'm just kidding. 15 copper, please.");
break;

case 2:
ActionSpeakString ("You look like you could use this.");
break;

case 3:
ActionSpeakString ("Ice brewed in Icewind Dale, friend. Enjoy.");
break;
}

ActionWait(3.0);//Wait 3 secs.
ActionDoCommand (SetLocalObject(OBJECT_SELF, "CUSTOMER", OBJECT_INVALID));

// Move back to the other side of the bar to take a needed break
ActionMoveToObject(oBar2);
ActionWait(5.0);//Wait 5 secs.

switch(Random(4))
{
case 0:
ActionSpeakString ("Slow night tonight, eh Charlie?");
break;

case 1:
ActionSpeakString ("My feet are killing me.");
break;

case 2:
ActionSpeakString ("I can't live on these tips. Two copper?");
break;

case 3:
ActionSpeakString ("He's kind of cute.");
break;
}

ActionWait(5.0);//Wait 5 secs.
ActionDoCommand (SetLocalInt(OBJECT_SELF, "BARMAID_STATE", 0));
}
}

if (nUser == 1004) // this is the OnDialogue event
{
// This is just in here so you can interrupt her if you want to talk to her
SetLocalObject (OBJECT_SELF, "CUSTOMER", OBJECT_INVALID);
SetLocalInt (OBJECT_SELF, "BARMAID_STATE", 0);
}
}



---F. Commanding NPC's Manually. ---

Alright this can be used for ALOT of fun. Can you say secrets? Well I'm sure you can
(yeah I know, "Tolerance, stop wasting my time.") Okay, basically when a PC types a defined
command when they are around the NPC the NPC will perform an action. You can have the NPC do
basically ANYTHING that can be done with scripting.

All credit goes to gsmithcat.
And if you were wondering, Dom Querom's Bulletin Board system is based off this.

//////////////////////////
// OnSpawn of the NPC

void main()
{
  //Here is a method to set up an NPC to recognize integers.
  //WARNING: be careful not to over do it, I tried putting the
  //full range of a signed 32-bit int here and it really slowed
  //the performance of the module.
  int i;
  for(i=0; i<10; i++)
  {
    SetListenPattern(OBJECT_SELF, IntToString(i), i);
  }

  //You can set the NPC to recognize any text command you want
  //The numbers are arbitrary, but be sure not to use the same
  //number twice.
  SetListenPattern(OBJECT_SELF, "away", 1000);   //command to move away
  SetListenPattern(OBJECT_SELF, "follow", 2000); //command to follow
  SetListenPattern(OBJECT_SELF, "stop", 3000);   //command to stop
  SetListening(OBJECT_SELF, TRUE);               //be sure NPC is listening
  SetCommandable(TRUE);                          //and commandable
}


/////////////////////////////
// OnConversation of the NPC

void main()
{
  int iListen = GetListenPatternNumber();

  //This is the defined set of numbers recognized by the NPC
  if(iListen > -1 && iListen < 10) // -1 < iListen < 10
  {
    //You could save the number to a LocalInt on the PC or OBJECT_SELF
    SpeakString("You said " + IntToString(iListen));
    return;
  }

//figure out which who spoke, Note: GetPCSpeaker() does not work here
  object oPC = GetLastSpeaker();

  switch(iListen) //figure out which command was issued
  {
    case -1:   //Dialogue Tree
      //Allows your NPC to create a dialogue tree (aka conversation script)
      //Be careful not to define -1 as something else if you need this
      ClearAllActions();
      BeginConversation();
      break;
    case 1000: //move away
      SpeakString("Yes, master, I'll move away.");
      ActionMoveAwayFromObject(oPC);
      break;
    case 2000: //Follow
      SpeakString("Yes, master, I'll follow you");
      ActionForceFollowObject(oPC);
      break;
    case 3000: //Stop
      ClearAllActions();
      SpeakString("Sorry, master.");
      break;
    default:   //Unknown
      SpeakString("I don't understand, master.");
  }
}



---G. Giving NPCs Daily Routines / Custom AI. ---

AI (Artifical Intelligence):

Umm. I don't know how to describe this at 3:11 AM. Conan's on too so I'll fix this later.


///////////////////////////////////////////////
// Janitor AI (by Tychon):

/*
Used with Old Man character model. This is VERY basic, not necessarily a 'daily' routine but
good enough to put in. Also really funny when you see careless players throwing items all over.
*/

void main()
{
 ClearAllActions();
 object oNearest = GetNearestObject(OBJECT_TYPE_ITEM, OBJECT_SELF);
 if (GetIsObjectValid(oNearest))
 {
  ActionMoveToObject(oNearest, TRUE, 1.0f);
  int nSay0 = Random(4);
  if (nSay0 == 1)
  {
   SpeakString("Ooo, stuff!");
  }
  else if (nSay0 == 2)
  {
   SpeakString("It's -MINE-");
  }
  else if (nSay0 == 3)
  {
   SpeakString("Old guy comin' through!");
  }
  else if (nSay0 == 0)
  {
   SpeakString("Ahahaha, gold for the old!");
  }
  ActionPickUpItem(oNearest);
 }
 else
 {
  int nRand = Random(3);
  if (nRand == 1)
  {
   ActionRandomWalk();
   int nSay1 = Random(4);
   if (nSay1 == 1)
   {
    SpeakString("*sigh*");
   }
   else if (nSay1 == 2)
   {
    SpeakString("Walk, walk, walk. It's all I do!");
   }
   else if (nSay1 == 3)
   {
    SpeakString("Must.. find.. stuff!");
   }
   else if (nSay1 == 0)
   {
    SpeakString("*cough*");
   }
  }
  else if (nRand == 2)
  {
   object oFollow = GetNearestCreature(CREATURE_TYPE_CLASS, CLASS_TYPE_COMMONER);
   ActionForceFollowObject(oFollow);
   int nSay2 = Random(4);
   if (nSay2 == 1)
   {
    SpeakString("Here I come!");
   }
   else if (nSay2 == 2)
   {
    SpeakString("Bum rush!");
   }
   else if (nSay2 == 3)
   {
    SpeakString("Hahaha!");
   }
   else if (nSay2 == 0)
   {
    SpeakString("<This model powered by Energizer. Do you have the Bunny inside?>");
   }
  }
  else if (nRand == 0)
  {
   int nSay3 = Random(4);
   if (nSay3 == 1)
   {
    SpeakString("Uh, what?");
   }
   else if (nSay3 == 2)
   {
    SpeakString("You lookin' at me punk?");
   }
   else if (nSay3 == 3)
   {
    SpeakString("Leave me be!");
   }
   else if (nSay3 == 0)
   {
    SpeakString("Default text goes here. Uhh... huh?");
   }
  }
 }
}

More AI's to come.
If they ever fix RemoveEffect I'll give you my drunk AI...if not he will sleep forever.


Daily Routines:

Well...theres no real defined skeleton for something as complex as this. But I can give you some
examples that you can use to work your own routines out.

No examples yet. The only one I have is the FRED Project. I don't know if I want to add it
though...we'll see what happens.


---H. Blacksmiths that hammer their anvils. ---

Alright, this is a great set of scripts. The Blacksmith NPC will randomly either hit
his hammer, or will speak a few different phrases. Read the top comments of each script
to determine the placement.

//////////////////////////////////
// Blacksmith User-Defined Script
// By Anonymous

void main()
{
int nUser = GetUserDefinedEventNumber();
switch(nUser)
{
case 100:
int random = d20(1);
switch(random)
{
case 1:
ActionSpeakString( "Now dat looks good !");
break;
case 2:
ActionSpeakString( "Work, work, work!");
break;
case 3:
ActionPlayAnimation( ANIMATION_LOOPING_PAUSE_TIRED);
break;
case 4:
ActionSpeakString( "Now dat looks good !");
break;
case 5:
ActionAttack( GetObjectByTag( "anvil" ));
break;
case 6:
ActionAttack( GetObjectByTag( "anvil" ));
break;
case 7:
ActionAttack( GetObjectByTag( "anvil" ));
break;
case 8:
ActionAttack( GetObjectByTag( "anvil" ));
break;
case 9:
ActionAttack( GetObjectByTag( "anvil" ));
break;
case 10:
ActionAttack( GetObjectByTag( "anvil" ));
break;
case 11:
ActionAttack( GetObjectByTag( "anvil" ));
break;
case 12:
ActionAttack( GetObjectByTag( "anvil" ));
break;case 13:
ActionAttack( GetObjectByTag( "anvil" ));
break;
case 14:
ActionAttack( GetObjectByTag( "anvil" ));
break;
case 15:
ActionAttack( GetObjectByTag( "anvil" ));
break;
case 16:
ActionAttack( GetObjectByTag( "anvil" ));
break;
case 17:
ActionAttack( GetObjectByTag( "anvil" ));
break;
case 18:
ActionAttack( GetObjectByTag( "anvil" ));
break;
case 19:
ActionAttack( GetObjectByTag( "anvil" ));
break;
case 20:
ActionAttack( GetObjectByTag( "anvil" ));
break;
}
}
}

////////////////////////////////////
// Blacksmith OnHeartbeat Script
// By Anonymous

void main()
{
object oPC = GetFirstPC();
if (GetLocalInt (oPC, "smith") == 0)
{
SignalEvent(OBJECT_SELF, EventUserDefined(100));
}
}
// End script


Now make a trigger on the floor that goes all around the blacksmith.
These scripts are used so the Smith stops hammering if a PC is nearby so
that a conversation can be initiated.

/////////////////////////////////
// OnEnter of the Floor Trigger
// By Anonymous

void main()
{
object oPC = GetEnteringObject();
if (GetIsPC(oPC))
{
SetLocalInt(oPC, "smith", 1);
}
}

////////////////////////////////
// OnExit of the Floor Trigger
// By Anonymous

void main()
{
object oPC = GetExitingObject();
if (GetIsPC(oPC))
{
SetLocalInt(oPC, "smith", 0);
}
}

Now you are either using the 1x2 "Smithy" tile with a non-usable anvil, or
you placed an anvil somewhere. If you are using the Smithy tile, make a invisible
object on top of the anvil. Make either the invisible object or the anvil flagged
for Plot, 5 hardness, and maximum life (10,000).

/////////////////////////////////////////
// OnDamaged of Anvil or Invisible Object
// By Anonymous

void main()
{
object oTarget = OBJECT_SELF;
effect eVisual = EffectVisualEffect(VFX_COM_BLOOD_SPARK_SMALL);

ApplyEffectToObject(DURATION_TYPE_INSTANT , eVisual, oTarget);
}



---I. Having NPCs Follow PCs. ---

Alright, great script. The player will escort the NPC to a waypoint. Once there the
NPC will start up their conversation (the one in their conversation box in Creature Properties).
In that conversation you will want to use conditionals that check for NW_L_MADEITTOEXIT's value
to determine whether the NPC thanks the PC for getting them to the WP or not.

//::///////////////////////////////////////////////
//:: Escort by player
//:: NW_C3_Escort1.nss
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
//:: Follows player.  If gets close to a waypoint
//:: named NW_WAY_<MyTag> then says thank you text
//:: and escapes area.
//:://////////////////////////////////////////////
//:: Created By: Brent
//:: Created On: May 16, 2001
//:://////////////////////////////////////////////
#include "NW_I0_PLOT"
void main()
{
ClearAllActions();

//SpeakString(IntToString(GetLocalInt(OBJECT_SELF,"NW_L_MADEITTOEXIT")));

// * made it to waypoint in time
if (GetIsObjectValid(GetNearestPC()) == TRUE)
{
if ((GetDistanceToObject(GetNearestObjectByTag("NW_WAY_"+GetTag(OBJECT_SELF))) < 7.0)&& (GetLocalInt(OBJECT_SELF,"NW_L_MADEITTOEXIT") == 10))
{
SetLocalInt(OBJECT_SELF,"NW_L_MADEITTOEXIT",30);
ActionStartConversation(GetNearestPC());
SetLocalInt(OBJECT_SELF,"NW_L_MADEITTOEXIT",40);
}
else

// * follow, if players accepted
if((GetLocalInt(OBJECT_SELF,"NW_L_MADEITTOEXIT") == 10) && (GetDistanceToObject(GetNearestPC()) > 4.0))
{
ActionMoveToObject(GetNearestPC(),TRUE);
}
else

// * timer expired
if (FALSE)
{
SetLocalInt(OBJECT_SELF,"NW_L_MADEITTOEXIT",20);
ActionStartConversation(GetNearestPC());
}
}
// PC object is valid
else
{
SpeakString("TEMP NO PC");
}
}



---J. Training Dojos. ---

Alright, pretty basic. You just put this in the OnDamaged script for the placeable
you want to use. The usuals are an Archery Target or a Combat Dummy. I wish I knew
how to find out what type attack the PC used so that archery targets can only be
"trained on" by attacking it with a bow/xbow. Anyone?

Remember to make your targets/dummies useable and hostile so they can be attacked.

void main()
{
//////////////////////////////////////////////////////
//Combat Training
//by Shaun Yoder
//06/26/02
//
//Modified by Tolerance0 7/18/02
//
/* Changed so that the object heals after being damaged
   instead of respawning the object when it died
   I found it better since you don't have to make a new
   waypoint for each object you wanted placed in the
   training area. (as well as only having one script)
*/
//////////////////////////////////////////////////////


//get crap into variables.
object oTrainer = GetLastDamager();
int nCurrent = GetCurrentHitPoints(OBJECT_SELF);
int nAmount = 0;
int nMax = GetLocalInt(OBJECT_SELF, "nNewMax");
//if the local int is 0, then make it 1000, for new HP.
if (nMax == 0)
    {
    SetLocalInt(OBJECT_SELF, "nNewMax", 1000);
    }
//make sure its a PC doing the damage.
    if (GetIsPC(oTrainer) == TRUE)
        {
//find out how much damage was done, and to make sure you don't put the PCs into negatives.
        int nAmount = nMax - nCurrent;
        int nGold = GetGold(oTrainer);
            if (nGold >= 1)
            {
//take away 1/4 of the damage in gold, and give the XP.
            int nGoldTake = nAmount / 4;
            TakeGoldFromCreature(nGoldTake, oTrainer, TRUE);
            GiveXPToCreature(oTrainer, nAmount);
            };
//Reset the "NewMax" Variable.
        SetLocalInt(OBJECT_SELF, "nNewMax", nCurrent);
        }
// Heal the object
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(10000), OBJECT_SELF, 0.1);
}



---K. DM: Level Handler. ---

Primarily useful in situations where your module or Persistant World crashes and you
want to give PCs back any/all levels they lost due to the crash.

///////////////////////////////
// DM Level Handler
// By: J.S. Labuschagne
/*
Allows you to figure out what level a PC is, give them enough experience for an
arbitrary level, or calculate the min/max xp possible at any given level.
*/

int min_xp_at_level(int L)
{
if (L < 1) return 0;
return (L - 1)*1000 + min_xp_at_level(L - 1);
}
int max_xp_at_level(int L)
{
return min_xp_at_level(L + 1) - 1;
}
int get_player_level(object pc, int L=1)
{
if(GetXP(pc) > max_xp_at_level(L))
return get_player_level(pc, L+1);
return L;
}

void set_player_level(object pc, int L)
{
SetXP(pc, min_xp_at_level(L));
}
void main()
{
}



---L. DM: PC Info Handler. ---

GREAT tool. Will send to the DM and the logfile ALL PC info. Great for
use in Persistant Worlds, and to make sure no ones cheating in every module. To be
used in the OnEnter of an area or OnClientEnter of a module.

///////////////////////////////////
// Fabulous PC Info Getter Thingy
// By: Jhenne

void main()
{
object oCreature = GetEnteringObject();
int nDruid = CLASS_TYPE_DRUID;
int nMonk = CLASS_TYPE_MONK;
int nRogue = CLASS_TYPE_ROGUE;
int nWizard = CLASS_TYPE_WIZARD;
int nSorcerer = CLASS_TYPE_SORCERER;
int nFighter = CLASS_TYPE_FIGHTER;
int nBarbarian = CLASS_TYPE_BARBARIAN;
int nBard = CLASS_TYPE_BARD;
int nCleric = CLASS_TYPE_CLERIC;
int nPaladin = CLASS_TYPE_PALADIN;
int nRanger = CLASS_TYPE_RANGER;
int iStr = GetAbilityScore(oCreature, ABILITY_STRENGTH);
int iDex = GetAbilityScore(oCreature, ABILITY_DEXTERITY);
int iWis = GetAbilityScore(oCreature, ABILITY_WISDOM);
int iInt = GetAbilityScore(oCreature, ABILITY_INTELLIGENCE);
int iCon = GetAbilityScore(oCreature, ABILITY_CONSTITUTION);
int iCha = GetAbilityScore(oCreature, ABILITY_CHARISMA);

object oArmorChest = GetItemInSlot(INVENTORY_SLOT_CHEST, oCreature);
object oBelt = GetItemInSlot(INVENTORY_SLOT_BELT, oCreature);
object oCarmor = GetItemInSlot(INVENTORY_SLOT_CARMOUR, oCreature);
object oCloak = GetItemInSlot(INVENTORY_SLOT_CLOAK, oCreature);
object oHead = GetItemInSlot(INVENTORY_SLOT_HEAD, oCreature);
object oLeftRing = GetItemInSlot(INVENTORY_SLOT_LEFTRING, oCreature);
object oRightRing = GetItemInSlot(INVENTORY_SLOT_RIGHTRING, oCreature);
object oAmulet = GetItemInSlot(INVENTORY_SLOT_NECK, oCreature);
object oBoots = GetItemInSlot(INVENTORY_SLOT_BOOTS, oCreature);
object oGloves = GetItemInSlot(INVENTORY_SLOT_ARMS, oCreature);
object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oCreature);
object oOffhand = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oCreature);
string sArmorChest = GetName(oArmorChest);
string sBelt = GetName(oBelt);
string sCarmor = GetName(oCarmor);
string sCloak = GetName(oCloak);
string sHead = GetName(oHead);
string sLeftRing = GetName(oLeftRing);
string sRightRing = GetName(oRightRing);
string sAmulet = GetName(oAmulet);
string sBoots = GetName(oBoots);
string sGloves = GetName(oGloves);
string sWeapon = GetName(oWeapon);
string sOffhand = GetName(oOffhand);
string sStr = IntToString(iStr);
string sDex = IntToString(iDex);
string sWis = IntToString(iWis);
string sInt = IntToString(iInt);
string sCon = IntToString(iCon);
string sCha = IntToString(iCha);
int nPrintDruid = GetLevelByClass(nDruid, oCreature);
int nPrintMonk = GetLevelByClass(nMonk, oCreature);
int nPrintRogue = GetLevelByClass(nRogue, oCreature);
int nPrintWizard = GetLevelByClass(nWizard, oCreature);
int nPrintSorcerer = GetLevelByClass(nWizard, oCreature);
int nPrintFighter = GetLevelByClass(nFighter, oCreature);
int nPrintBarbarian = GetLevelByClass(nBarbarian, oCreature);
int nPrintBard = GetLevelByClass(nBard, oCreature);
int nPrintCleric = GetLevelByClass(nCleric, oCreature);
int nPrintPaladin = GetLevelByClass(nPaladin, oCreature);
int nPrintRanger = GetLevelByClass(nRanger, oCreature);
string sDruid = IntToString(nPrintDruid);
string sMonk = IntToString(nPrintMonk);
string sRogue = IntToString(nPrintRogue);
string sWizard = IntToString(nPrintWizard);
string sSorcerer = IntToString(nPrintSorcerer);
string sFighter = IntToString(nPrintFighter);
string sBarbarian = IntToString(nPrintBarbarian);
string sBard = IntToString(nPrintBard);
string sCleric = IntToString(nPrintCleric);
string sPaladin = IntToString(nPrintPaladin);
string sRanger = IntToString(nPrintRanger);
string sName=GetName(oCreature);

SendMessageToAllDMs(sName+"'s Chest: "+sArmorChest+", Belt: "+sBelt+", Cloak: "+sCloak+", Helm: "+sHead+", LRing: "+sLeftRing+", RRing: "+sRightRing+", Amulet: "+sAmulet+", Boots: "+sBoots+", Gloves: "+sGloves+", Weapon: "+sWeapon+", Offhand: "+sOffhand);

WriteTimestampedLogEntry(sName+"'s Chest: "+sArmorChest+", Belt: "+sBelt+", Cloak: "+sCloak+", Helm: "+sHead+", LRing: "+sLeftRing+", RRing: "+sRightRing+", Amulet: "+sAmulet+", Boots: "+sBoots+", Gloves: "+sGloves+", Weapon: "+sWeapon+", Offhand: "+sOffhand);

SendMessageToAllDMs(sName+"'s Stats: Str:"+sStr+" Dex:"+sDex+" Con:"+sCon+" Int:"+sInt+" Wis:"+sWis+" Cha: "+sCha);

WriteTimestampedLogEntry(sName+"'s Stats: Str:"+sStr+" Dex:"+sDex+" Con:"+sCon+" Int:"+sInt+" Wis:"+sWis+" Cha: "+sCha);

 if  (nPrintDruid>0)
{
SendMessageToAllDMs(sName+"'s Druid Level: "+sDruid);
WriteTimestampedLogEntry(sName+"'s Druid Level: "+sDruid);
}
 if (nPrintMonk>0)
{
SendMessageToAllDMs(sName+"'s Monk Level: "+sMonk);
WriteTimestampedLogEntry(sName+"'s Monk Level: "+sMonk);
}
 if (nPrintRogue>0)
{
SendMessageToAllDMs(sName+"'s Rogue Level: "+sRogue);
WriteTimestampedLogEntry(sName+"'s Rogue Level: "+sRogue);
}
 if (nPrintWizard>0)
{
 SendMessageToAllDMs(sName+"'s Wizard Level: "+sWizard);
 WriteTimestampedLogEntry(sName+"'s Wizard Level: "+sWizard);
 }
 if (nPrintSorcerer>0)
{
 SendMessageToAllDMs(sName+"'s Sorcerer Level: "+sSorcerer);
 WriteTimestampedLogEntry(sName+"'s Sorcerer Level: "+sSorcerer);
 }
 if (nPrintFighter>0)
{
 SendMessageToAllDMs(sName+"'s Fighter Level: "+sFighter);
 WriteTimestampedLogEntry(sName+"'s Fighter Level: "+sFighter);
 }
 if (nPrintBarbarian>0)
{
 SendMessageToAllDMs(sName+"'s Barbarian Level: "+sBarbarian);
 WriteTimestampedLogEntry(sName+"'s Barbarian Level: "+sBarbarian);
 }
 if (nPrintBard>0)
{
 SendMessageToAllDMs(sName+"'s Bard Level: "+sBard);
 WriteTimestampedLogEntry(sName+"'s Bard Level: "+sBard);
 }
 if (nPrintCleric>0)
{
 SendMessageToAllDMs(sName+"'s Cleric Level: "+sCleric);
 WriteTimestampedLogEntry(sName+"'s Cleric Level: "+sCleric);
 }
 if (nPrintPaladin>0)
{
 SendMessageToAllDMs(sName+"'s Paladin Level: "+sPaladin);
 WriteTimestampedLogEntry("Paladin Level: "+sPaladin);
 }
 if (nPrintRanger>0)
{
 SendMessageToAllDMs(sName+"'s Ranger Level: "+sRanger);
 WriteTimestampedLogEntry(sName+"'s Ranger Level: "+sRanger);
 }
}



---M. Waypoint Systems. ---

Alright, I'm going to give a few examples and uses for this. First off is a respawn system.

Respawn System:

Create an object and make it the usual: usable, plot, 5 hardness, max hp.
In it's on used script put:

void main()
{
object oPC = GetLastUsedBy();
SetLocalInt (GetModule(), "Respawn", 1);
FloatingTextStringOnCreature("TownOne Waypoint Activated.", oPC, FALSE);
}

Create as many waypoints as you want but make sure each has a unique tag and different
"respawn" value so that later the game will check the value and determine where to respawn
the player.

Now, goto your OnRespawn script (Module Properties - Scripts) and put:
(i've commented next to lines that you should change)

void main()
{
// TownOne Respawn
if(GetLocalInt(GetModule(), "Respawn") == 1)
  {
  object oRespawner = GetLastRespawnButtonPresser ();
  ApplyEffectToObject (DURATION_TYPE_INSTANT, EffectResurrection(), oRespawner);

// Change location name (optional) and object tag
  location lrespawnone = GetLocation(GetObjectByTag("TownOneWaypoint"));

//Change Location name if you changed it on above line
  AssignCommand(oRespawner, JumpToLocation (lrespawnone));
  }
}

Now just create a condition for each case of Respawn that exists in your module. Make sure
every Location, Tag, and respawn number is unique so nothing gets mixed up. Also add any
penatlies for respawning (gold, items, experience) in the main() of OnRespawn.



Teleport System:

Alright this is pretty basic, to be honest. Depending on HOW you want this to work will affect
how you script it. I figure you are either making a waypoint system like Diablo 2, or you want
the waypoint to teleport you to a random location.

For a D2 style waypoint system just make a base waypoint. If you want to use the Portal tile, make
an invisible object (or trigger, but I recommend the object for dialog purposes, and because triggers
look ugly but a green glow from objects isn't bad) in the center that PCs can USE. In the OnUsed of
that trigger or invisible object have it fire off a conversation.

////////////////////////
// Conversation Start

void main()
{
object oPC = GetLastUsedBy();

// If this is an object you can leave the conversation tag blank
// if you put the conversation for the object in its conversation box
// in the 'Advanced' Tab (of the Object's Properties)

BeginConversation("convo_name", oPC);
}


Another option is to make a portal NPC, but either way after the conversation starts I assume it'll
look like this:

+(NPC): Where would you like to go?
 |(PC): Destination 1 (hopefully you will be much more original)
 |(PC): Destination 2
 |(PC): Destination 3
 |(PC): Destination 4

Now you can have these only appear when the waypoint has been unlocked. Just have each waypoint
set a "useable" variable when first used. Something like this:

////////////////////////////////////////////////////////
// OnUsed of your waypoint trigger/npc/invisible object

object oPC = GetLastUsedBy();

if(GetLocalInt(GetModule(), "townoneon") == 0);
 {
 SetLocalInt (GetModule(), "townoneon", 1);
 FloatingTextStringOnCreature("TownOne Waypoint Activated.", oPC, FALSE);
 }
else
 {
 return;
 }

// In any case you still want the transport conversation to activate
BeginConversation("portal_convo", oPC);
}


Now, under Text Appears When, just check to see if that variable is set to 1 and if it is, it
will appear as a choice for a destination of the PC. By now this should be standard to you but...

int StartingConditional()
{
object oPC = GetPCSpeaker();

 if(GetLocalInt(oPC, "townoneon") == 1)
  {
  return TRUE;
  }
  
 else
  return FALSE;
}

Just make a different conditional for each case you want. Now, you have your waypoint, conversation,
and conditionals all set up. We need to have the choices teleport the PCs now. So do this in Actions
Taken of the choice the PC makes.


void main()
{
object oPC = GetPCSpeaker();

// Put your object tag here
location lDestination = GetLocation(GetObjectByTag("TownOneWaypoint"));

//Change the location if you changed it above
AssignCommand(oPC, JumpToLocation(lDestination));
}

NOTE: I HIGHLY disagree with making your trigger waypoint conversations fire off when a PC enters it.
With my system of teleportation the PC would get stuck in an endless loop of conversations. If you
don't understand: the PC will get a transport conversation once they reach the other end because they
will be standing on top of your trigger. Get it?



---N. Playing Tag.---

Ideally done with children, but anyone can play tag...First make 5 waypoints.
Name them, "KidTagCenter", "TagArea0", "TagArea1", "TagArea2", "TagArea3".

Then name each kid/person playing tag with the tag TAGCHILD. In each of the kids
OnSpawns uncomment:

SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT);
//and add this, if you want the npc to start as the "chaser" set nChasing to 1 not 0
SetLocalInt(OBJECT_SELF, "nChasing", 0);

Then put this in the children's OnUserDefined script. MAKE SURE you do not edit the default heartbeat
script because it will not work if you remove a certain portion of it.

//tag-playing children by Ralf Schemmann
//July 17th, 2002
//
//Minor additions by Elhimac
//
//Minor object declaration changes by Tolerance0
//August 1st, 2002

void main()
{
int nUser = GetUserDefinedEventNumber();
if(nUser == 1001) //HEARTBEAT EVENT
{
int nRandom = Random(4);
object oPlayground = GetWaypointByTag("KidTagCenter");
object oTagArea = GetWaypointByTag("TagArea"+IntToString(nRandom));

//First find out if I'm within the playground area
if (GetDistanceToObject(oPlayground) > 6.0f)
{
ClearAllActions();
ActionForceMoveToObject (oTagArea, TRUE, 0.0f);
//I'm not, so move to an area within the playground
}
if (GetDistanceToObject(oPlayground) < 6.0f)
{
if (GetLocalInt(OBJECT_SELF, "nChasing") == 1)
{
//Find kid to chase
object oChased = GetNearestObjectByTag("TAGCHILD");
//Is owner close enough to tag?
if (GetDistanceToObject(oChased) < 2.0f )
{
//Tag and switch roles
SpeakString("Tag!", TALKVOLUME_TALK);
AssignCommand(oChased, ClearAllActions());
SetLocalInt(OBJECT_SELF, "nChasing", 0);
SetLocalInt(oChased, "nTagged", 1);
//RemoveEffect(OBJECT_SELF, EffectHaste());
//Since I'm not the chaser anymore, remove my haste effect.
ClearAllActions();
ActionMoveAwayFromObject(oChased, TRUE);
}
//if still too far away, move after target
else
{
ActionForceMoveToObject(oChased, TRUE, 0.0f);
}
}
//owner is being chased
else
{
//If kid has been tagged, wait a hearbeat then start chasing
if (GetLocalInt(OBJECT_SELF, "nTagged") == 1)
{
SetLocalInt(OBJECT_SELF, "nTagged", 0);
SetLocalInt(OBJECT_SELF, "nChasing", 1);
//ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHaste(), OBJECT_SELF);
//Apply haste to myself to better catch those I run after.
}
//if not been tagged, run away from chaser or move closer to other kids
else
{
//Find Nearest tag-playing child
object oChaser = GetNearestObjectByTag("TAGCHILD");
//if this is the chaser
if (GetLocalInt(oChaser, "nChasing") == 1)
//run away from chaser
ActionMoveAwayFromObject(oChaser, TRUE);
else
//run after other kid
ActionForceMoveToObject(oChaser, TRUE, 4.0f);
}
}
}
}
}



[ 7. Objects & Placeables. ]

Obviously very fun to play around with. They can be used for EVERYTHING. Dialogs, area
transitions, custom sripts, et cetera. Objects in MASS numbers do lag, however. So don't use
more than necessary. If you are just a builder than try to place objects and placeable so that
the players and DM's can use them and interact with them in a logical and RPG-ish manner.



[ 8. Keeping things interesting. ]

This is very important, obviously. Keep your areas interesting, don't make 100 hay bales when
10-15 will do. Make sure you don't put too many special effects either, as they cause lag when
in large quantities. If you are just a builder than make areas DM's can use to fire off stories.
Even make parts of areas that can be used as secrets. Remember DM's can make triggers and things
in-game to be able to use cut-off areas you may make.

Some Ideas:
Heavy blue fog for underwater-like effect.
Heavy red fog for volcano-like effect.
Heavy green fog for underneath the rainforst canopy effect.
Hell, you can make a funny desert with heavy sand color fog.



[ 9. Special Effects. ]

Special (Visual) Effects lag both your toolset and players if you put too many. Granted, 100
smoke plumes makes a really nice fog effect, but its not necessary. Use them, but not too many
that it affects gameplay or design.

Special effect placement can be used to your advantage to make many objects look alot cooler.
Use them on top of anvils and in tree hollows to make a magical looking effect. They can be used
many places but one you place it on something that is not ground, dont click it again or it
will force itself down onto the ground.

Experiment, see what you like.

Lightning can also be considered a special effect. Lightning is one of the most powerful mood
setting effects you can harness in your areas. The key here is to EXPERIMENT. Find good color
combinations that suit your liking.

Example: Use Red Ambient, Black Diffuse, and Red Fog on a rural tilset surrounded by a layer of
raised terrain. BAM, volcano-ish setting. If you can handle the lag set in alot of Flame's for
a nice lava effect ^_^.
(you can also use mines/caverns for this now, too)


---A. Visual Effects Listing (VFX_*). ---

I'm talking about those used in NWScript. If you don't know how to apply an effect to something
then read the scripting section for Applying Effects (III.5.T). I found this table to be VERY
useful when building my module, because I didn't know which vfx looked like what.

Hope this helps. They are in the order they appear in the CONSTANTS tab if you put VFX_ in the
filter box. Oh, and some of them I have noted to look like visual effects of Final Fantasy X.
This is because its one of the only games that rivals NWN in visual effects, and many of the
effects DO look like FFX effects. FFX rocks. Buy it if you haven't played it.

Also, I have not noted any sounds included. This is because I made an area with about 100
effects firing off at the same time and the sounds were all mixed together. All of the effects
are about the size of a PC unless I have noted them as huge, small, or large.

Btw, VFX_FNF_SUMMON_MONSTER_2 is F*CKING AWESOME.

Please tell me if my information is incorrect on any of these. I'm using triggers hearbeating
to view a area FULL of these, so I was thinking prehaps some don't work on triggers. Any help
is always appreciated. Hmm, I think next is a full sound listing...

-----------------------------------------------------------------------------------------------
VFX Name  (* = AWESOME)           | Graphic (not including sound)
-----------------------------------------------------------------------------------------------
VFX_BEAM_COLD                     | Nothing. As far as I can tell...
VFX_BEAM_EVIL                     | Nothing. As far as I can tell...
VFX_BEAM_FIRE                     | Nothing. As far as I can tell...
VFX_BEAM_FIRE_LASH                | Nothing. As far as I can tell...
VFX_BEAM_HOLY                     | Nothing. As far as I can tell...
VFX_BEAM_LIGHTNING                | Nothing. As far as I can tell...
VFX_BEAM_MIND                     | Nothing. As far as I can tell...
VFX_BEAM_ODD                      | Nothing. As far as I can tell...
VFX_COM_BLOOD_CRT_GREEN           | Green acid splash.
VFX_COM_BLOOD_CRT_RED             | Blood splash.
VFX_COM_BLOOD_CRT_WIMP            | Red circle flashes very quickly.
VFX_COM_BLOOD_CRT_YELLOW          | Green acid splash.
VFX_COM_BLOOD_LRG_GREEN           | Green acid splash.
VFX_COM_BLOOD_LRG_RED             | Blood splash.
VFX_COM_BLOOD_LRG_WIMP            | Red circle flashes very quickly.
VFX_COM_BLOOD_LRG_YELLOW          | Green acid splash.
VFX_COM_BLOOD_REG_GREEN           | Green acid splash.
VFX_COM_BLOOD_REG_RED             | Blood splash.
VFX_COM_BLOOD_REG_WIMP            | Red circle flashes very quickly.
VFX_COM_BLOOD_REG_YELLOW          | Green acid splash.
VFX_COM_BLOOD_SPARK_LARGE         | Small spark.
VFX_COM_BLOOD_SPARK_MEDIUM        | Small spark.
VFX_COM_BLOOD_SPARK_SMALL         | Small white spark.
VFX_COM_CHUNK_BONE_MEDIUM         | Dusty bones corpse explosion.
VFX_COM_CHUNK_GREEN_MEDIUM        | Small green corpse explosion of limbs.
VFX_COM_CHUNK_GREEN_SMALL         | Small green corpse explosion.
VFX_COM_CHUNK_RED_MEDIUM          | Small red corpse explosion of limbs.
VFX_COM_CHUNK_RED_SMALL           | Small red corpse explosion of bones.
VFX_COM_CHUNK_YELLOW_MEDIUM       | Small yellow corpse explosion, more blood.
VFX_COM_CHUNK_YELLOW_SMALL        | Small yellow corpse explosion.
VFX_COM_HIT_ACID                  | Small green puff.
VFX_COM_HIT_DIVINE                | Small yellow puff.
VFX_COM_HIT_ELECTRICAL            | Fast and small blue spark.
VFX_COM_HIT_FIRE                  | Small and slow fire explosion.
VFX_COM_HIT_FROST                 | Fast and small light blue spark.
VFX_COM_HIT_NEGATIVE              | Fast and small red spark.
VFX_COM_HIT_SONIC                 | Slow, small, and white explosion.
VFX_COM_SPARKS_PARRY              | Fast and small spark.
VFX_COM_SPECIAL_BLUE_RED          | Nothing. As far as I can tell...
VFX_COM_SPECIAL_PINK_ORANGE       | Nothing. As far as I can tell...
VFX_COM_SPECIAL_RED_ORANGE        | Nothing. As far as I can tell...
VFX_COM_SPECIAL_RED_WHITE         | Nothing. As far as I can tell...
VFX_COM_SPECIAL_WHITE_BLUE        | Nothing. As far as I can tell...
VFX_COM_SPECIAL_WHITE_ORANGE      | Nothing. As far as I can tell...
VFX_COM_UNLOAD_MODEL              | Nothing. As far as I can tell...
VFX_DUR_ANTI_LIGHT_10             | Light dark spot.
VFX_DUR_AURA_COLD                 | Light blue dots swirling upwards.
VFX_DUR_AURA_DISEASE              | Black dots swirling upwards.
VFX_DUR_AURA_DRAGON_FEAR          | Green dots swirling upwards.
VFX_DUR_AURA_FIRE                 | Orange dots swirling upwards.
VFX_DUR_AURA_ODD                  | Green dots swirling upwards.
VFX_DUR_AURA_POSION               | Purple/green dots swirling upwards.
VFX_DUR_AURA_SILENCE              | White dots swirling upwards.
VFX_DUR_BARD_SONG                 | Small rising blue dot.
VFX_DUR_BLACKOUT                  | Nothing. As far as I can tell...
VFX_DUR_BLIND                     | Nothing. As far as I can tell...
VFX_DUR_BLINDVISION               | Nothing. As far as I can tell...
VFX_DUR_BLUR                      | Nothing. As far as I can tell...
VFX_DUR_CESSATE_NEGATIVE          | Nothing. As far as I can tell...
VFX_DUR_CESSATE_NEUTRAL           | Nothing. As far as I can tell...
VFX_DUR_CESSATE_POSITIVE          | Nothing. As far as I can tell...
VFX_DUR_DARKNESS                  | Makes a large black spot.
VFX_DUR_DARKVISION                | Nothing. As far as I can tell...
VFX_DUR_ELEMENTAL_SHIELD          | Ring of fire on ground, blue cloud rises from it.
VFX_DUR_ENTANGLE                  | Vines grow from ground.
VFX_DUR_ETHEREAL_VISAGE           | Nothing. As far as I can tell...
VFX_DUR_FLAG_BLUE                 | Blue V sign.
VFX_DUR_FLAG_GOLD                 | Gold sign.
VFX_DUR_FLAG_PURPLE               | Purple X sign.
VFX_DUR_FLAG_RED                  | Red/white sign.
VFX_DUR_FREEDOM_OF_MOVEMENT       | Green light.
VFX_DUR_GHOSTLY_PULSE             | Nothing. As far as I can tell...
VFX_DUR_GHOSTLY_VISAGE            | Nothing. As far as I can tell...
VFX_DUR_GLOBE_INVULNERABILITY     | Neat looking rainbow sphere.
VFX_DUR_GLOBE_MINOR               | Neat looking rainbow sphere.
VFX_DUR_INVISIBILITY              | If used on a creature it makes them slightly transparent.
VFX_DUR_LIGHT                     | Nothing. As far as I can tell...
VFX_DUR_LIGHT_BLUE_10             | Nothing. As far as I can tell...
VFX_DUR_LIGHT_BLUE_15             | Nothing. As far as I can tell...
VFX_DUR_LIGHT_BLUE_20             | Nothing. As far as I can tell...
VFX_DUR_LIGHT_BLUE_5              | Nothing. As far as I can tell...
VFX_DUR_LIGHT_GREY_10             | Nothing. As far as I can tell...
VFX_DUR_LIGHT_GREY_15             | Nothing. As far as I can tell...
VFX_DUR_LIGHT_GREY_20             | Nothing. As far as I can tell...
VFX_DUR_LIGHT_GREY_5              | Nothing. As far as I can tell...
VFX_DUR_LIGHT_ORANGE_10           | Nothing. As far as I can tell...
VFX_DUR_LIGHT_ORANGE_15           | Nothing. As far as I can tell...
VFX_DUR_LIGHT_ORANGE_20           | Nothing. As far as I can tell...
VFX_DUR_LIGHT_ORANGE_5            | Nothing. As far as I can tell...
VFX_DUR_LIGHT_PURPLE_10           | Nothing. As far as I can tell...
VFX_DUR_LIGHT_PURPLE_15           | Nothing. As far as I can tell...
VFX_DUR_LIGHT_PURPLE_20           | Nothing. As far as I can tell...
VFX_DUR_LIGHT_PURPLE_5            | Nothing. As far as I can tell...
VFX_DUR_LIGHT_RED_10              | Nothing. As far as I can tell...
VFX_DUR_LIGHT_RED_15              | Nothing. As far as I can tell...
VFX_DUR_LIGHT_RED_20              | Nothing. As far as I can tell...
VFX_DUR_LIGHT_RED_5               | Nothing. As far as I can tell...
VFX_DUR_LIGHT_YELLOW_10           | Nothing. As far as I can tell...
VFX_DUR_LIGHT_YELLOW_15           | Nothing. As far as I can tell...
VFX_DUR_LIGHT_YELLOW_20           | Nothing. As far as I can tell...
VFX_DUR_LIGHT_YELLOW_5            | Nothing. As far as I can tell...
VFX_DUR_LOWLIGHTVISION            | Nothing. As far as I can tell...
VFX_DUR_MAGIC_RESISTANCE          | Nothing. As far as I can tell...
VFX_DUR_MAGICAL_SIGHT             | Very faint moving blue glyphs. Would be cooler if more visible.
VFX_DUR_MIND_AFFECTING_DISABLED   | Small blue explosion, that makes tiny blue/purple eyes on floor.
VFX_DUR_MIND_AFFECTING_DOMINATED  | Blue/white glowing orbs on ground.
VFX_DUR_MIND_AFFECTING_FEAR       | Blue/white dots on ground. REALLY UGLY.
VFX_DUR_MIND_AFFECTING_NEGATIVE   | Small volcanic explosion.
VFX_DUR_MIND_AFFECTING_POSITIVE   | Blue/white glowing orbs on floor.
VFX_DUR_MIRV_ACID                 | 5 white dots on ground (I think forms a pentagram if connected).
VFX_DUR_PARALYZE_HOLD             | Nothing. As far as I can tell...
VFX_DUR_PARALYZED                 | White shimmering dots.
VFX_DUR_PROT_BARKSIN              | Nothing. As far as I can tell...
VFX_DUR_PROT_GREATER_STONESKIN    | Rocks appear and shoot out dust plume.
VFX_DUR_PROT_PREMONITION          | 2 blue dots with white sparkles shimmering between.
VFX_DUR_PROT_SHADOW_ARMOR         | Blue/white waterfall-like stream appears.
VFX_DUR_PROT_STONESKIN            | Rocks appears and shoot out dust plume.
VFX_DUR_PROTECTION_ELEMENTS       | Many thin orange streaks.
VFX_DUR_PROTECTION_EVIL_MAJOR     | Many thin red streaks.
VFX_DUR_PROTECTION_EVIL_MINOR     | Small red dots. (almost invisible)
VFX_DUR_PROTECTION_GOOD_MAJOR     | Many thin yellow streaks.
VFX_DUR_PROTECTION_GOOD_MINOR     | Small yellow dots. (almost invisible)
VFX_DUR_SANCTUARY                 | White/blue shimmering dots.
VFX_DUR_SPELLTURNING              | White circle flashes with blue aura.
VFX_DUR_ULTRAVISION               | Nothing. As far as I can tell...
VFX_DUR_WEB                       | One small web.
VFX_DUR_WEB_MASS                  | Multiple webs from together to make 1 big one.
VFX_FNF_BLINDDEAF*                | HUGE blue/white explosion, shimmer, glow...its amazing...
VFX_FNF_DISPEL                    | Light blue gas expanding.
VFX_FNF_DISPEL_DISJUNCTION        | Blue gas expanding.
VFX_FNF_DISPEL_GREATER            | White gas expanding.
VFX_FNF_FIREBALL                  | Large red/orange explosion with expanding ring of fire.
VFX_FNF_FIRESTORM                 | HUGE orange fire explosion with expanding ring of fire.
VFX_FNF_GAS_EXPLOSION_ACID        | Small green explosion.
VFX_FNF_GAS_EXPLOSION_EVIL        | Small red explosion.
VFX_FNF_GAS_EXPLOSION_FIRE        | Small orange explosion.
VFX_FNF_GAS_EXPLOSION_GREASE      | Small black explosion.
VFX_FNF_GAS_EXPLOSION_MIND        | Small blue explosion.
VFX_FNF_GAS_EXPLOSION_NATURE      | Small dark navy green gas explosion.
VFX_FNF_HORRID_WILTING            | Huge navy green gas plume explosion.
VFX_FNF_HOWL_MIND                 | Small expanding blue ring.
VFX_FNF_HOWL_ODD                  | Small expanding purple ring.
VFX_FNF_HOWL_WAR_CRY              | Large expanding white ring.
VFX_FNF_HOWL_WAR_CRY_FEMALE       | Large expanding white ring.
VFX_FNF_ICESTORM*                 | Multiple falling ice shards and blue circles on floor.
VFX_FNF_IMPLOSION*                | Yellow/black "black hole" type look. Amazing...
VFX_FNF_LOS_EVIL_10               | Small red glyph.
VFX_FNF_LOS_EVIL_20               | Large red glyph.
VFX_FNF_LOS_EVIL_30               | HUGE red glyph.
VFX_FNF_LOS_HOLY_10               | Small yellow glyph.
VFX_FNF_LOS_HOLY_20               | Large yellow glyph.
VFX_FNF_LOS_HOLY_30               | HUGE yellow glyph.
VFX_FNF_LOS_NORMAL_10             | Small fast expanding white ring.
VFX_FNF_LOS_NORMAL_20             | Large fast expanding white ring.
VFX_FNF_LOS_NORMAL_30             | HUGE fast expanging white ring.
VFX_FNF_MASS_HEAL                 | Nothing. As far as I can tell...
VFX_FNF_MASS_MIND_AFFECTING       | Nothing. As far as I can tell...
VFX_FNF_METEOR_SWARM*             | HUGE falling meteors.
VFX_FNF_NATURES_BALANCE*          | HUGE green glyph with rising leaves and green light.
VFX_FNF_PWKILL*                   | HUGE red glyph with 4 red flames.
VFX_FNF_PWSTUN                    | Blue/white sparkles that shimmer.
VFX_FNF_SCREEN_BUMP               | Bumps screen. NS?
VFX_FNF_SCREEN_SHAKE              | Shakes screen. Well NS tolerance?
VFX_FNF_SMOKE_PUFF                | Rising steam. Kind of like from a broken pipe.
VFX_FNF_SOUND_BURST               | HUGE water ripple.
VFX_FNF_STORM                     | Nothing. As far as I can tell...
VFX_FNF_STRIKE_HOLY               | HUGE yellow light beam hits ground.
VFX_FNF_SUMMON_CELESTIAL          | HUGE blue light beam hits ground.
VFX_FNF_SUMMON_GATE               | Large lava-like fire explosion.
VFX_FNF_SUMMON_MONSTER_1          | Large white explosion that turns to smoke.
VFX_FNF_SUMMON_MONSTER_2*         | Purple glyph with white lines moving around purple spots.
VFX_FNF_SUMMON_MONSTER_3*         | Blue glyph with orange light on floor and white rising light.
VFX_FNF_SUMMON_UNDEAD             | Small white cloud.
VFX_FNF_SUNBEAM                   | HUGE yellow/orange explosion with many sticks falling after.
VFX_FNF_TIME_STOP*                | HUGE blue glyph with white circle surrounded by glyph rings.
VFX_FNF_WAIL_O_BANSHEES*          | HUGE godess rises from cloud, screams, and huge white ring expands.
VFX_FNF_WEIRD*                    | HUGE gray hydra appears. Multiple heads and crab-like legs.
VFX_FNF_WORD*                     | HUGE yellow glyph appears on floor.
VFX_IMP_AC_BONUS                  | 4 smoke lines on top of each other that move to form circles.
VFX_IMP_ACID_L                    | Bright green explosion that slowly turns to smoke.
VFX_IMP_ACID_S                    | Bright green explosion that slowly turns to smoke.
VFX_IMP_AURA_FEAR                 | 4 green dots in shape of a circle spin upwards.
VFX_IMP_AURA_HOLY                 | 4 yellow dots in shape of a circle spin upwards.
VFX_IMP_AURA_UNEARTHLY            | 4 green dots in shape of a circle spin upwards.
VFX_IMP_BLIND_DEAF_M              | White dot that forms a circle and turns to smoke.
VFX_IMP_BREACH                    | Blue smoke on ground that has blue sparkling stars above it.
VFX_IMP_CHARM                     | Blue/purple sparks shimmer in a spherical shape.
VFX_IMP_CONFUSION_S               | Small electrical explosion. Emits this beams of electricity.
VFX_IMP_DAZED_S                   | White uneven circle spins and a dot appears randomly on the sides.
VFX_IMP_DEATH                     | White smoke on ground that moves around and some rises at end.
VFX_IMP_DEATH_L                   | White smoke on ground that moves around and some rises at end.
VFX_IMP_DEATH_WARD                | Large tornado-like circle.
VFX_IMP_DESTRUCTION               | Blood red explosion with bones and limbs inside of it.
VFX_IMP_DISEASE_S                 | Dark green dust plume with black dots shooting from its base.
VFX_IMP_DISPEL                    | Blue/white light with a few sparkles in the center.
VFX_IMP_DISPEL_DISJUNCTION        | Nothing. As far as I can tell.
VFX_IMP_DIVINE_STRIKE_FIRE        | HUGE flames hit ground.
VFX_IMP_DIVINE_STRIKE_HOLY        | White and yellow sparks spin slowly.
VFX_IMP_DOMINATE_S                | White electrical ball spins on the ground emitting small sparks.
VFX_IMP_DOOM                      | Gray thunder cloud that shoots blue lightning down.
VFX_IMP_ELEMENTAL_PROTECTION      | Fire plume appears, rain drops on it and it turns green.
VFX_IMP_EVIL_HELP                 | Red glyph appears, spins and then rises.
VFX_IMP_FEAR_S                    | Nothing. As far as I can tell...
VFX_IMP_FLAME_M                   | Fire plume that turns to smoke.
VFX_IMP_FLAME_S                   | Gray dust plume.
VFX_IMP_FORTITUDE_SAVING_THROW_USE| Small purple dot that rises.
VFX_IMP_FROST_L                   | Blue blast with thin lines on floor, turns to dust.
VFX_IMP_FROST_S                   | White blast with thin lines on floor, turns to dust.
VFX_IMP_GLOBE_USE                 | White sphere appears.
VFX_IMP_GOOD_HELP                 | Yellow glyph falls to ground, spins, reverses, and dissapears.
VFX_IMP_GREASE                    | Nothing. As far as I can tell.
VFX_IMP_HARM                      | HUGE red beam falls on ground. Ground seems like its on fire.
VFX_IMP_HASTE                     | Blue circle shrinks and then shoots out 6 blue lines.
VFX_IMP_HEAD_ACID                 | 4 green light dots come together then turn to smoke.
VFX_IMP_HEAD_COLD                 | 4 blue light dots come together then turn to smoke.
VFX_IMP_HEAD_ELECTRICITY          | 4 blue/white light dots come together then turn to smoke.
VFX_IMP_HEAD_EVIL                 | 4 red light dots come together then turn to smoke.
VFX_IMP_HEAD_FIRE                 | 4 orange light dots come together then turn to smoke.
VFX_IMP_HEAD_HEAL                 | 4 yellow/blue light dots come together then turn to smoke.
VFX_IMP_HEAD_HOLY                 | 4 yellow light dots come together then turn to smoke.
VFX_IMP_HEAD_MIND                 | 4 blue/purple light dots come together then turn to smoke.
VFX_IMP_HEAD_NATURE               | 4 green light dots come together then turn to smoke.
VFX_IMP_HEAD_ODD                  | 4 purple light dots come together then turn to smoke.
VFX_IMP_HEAD_SONIC                | 4 white light dots come together then turn to smoke.
VFX_IMP_HEALING_G                 | Blue/white/yellow thin shard of light rise from ground.
VFX_IMP_HEALING_L*                | Blue/white circle spins and rises up. (Awesome water look)
VFX_IMP_HEALING_M                 | Yellow/blue/white small explosion.
VFX_IMP_HEALING_S                 | Blue/white spark form a moving circle on ground.
VFX_IMP_HEALING_X                 | HUGE blue beam falls on ground, a cloud forms at the base.
VFX_IMP_HOLY_AID                  | Growing yellow ball that's drawing in energy.
VFX_IMP_IMPROVE_ABILITY_SCORE     | Rising purple/yellow/white sparks. Kind of like bubbles.
VFX_IMP_KNOCK                     | Growing blue ball that's drawing in energy.
VFX_IMP_LIGHTNING_M               | Nothing. As far as I can tell...
VFX_IMP_LIGHTNING_S               | Small and fast white explosion with slightly blue tips.
VFX_IMP_MAGBLUE                   | White explosion that emits blue lines.
VFX_IMP_MAGIC_PROTECTION*         | Blue water spout rises then falls.
VFX_IMP_MAGIC_RESISTANCE_USE      | Small rising dust plume.
VFX_IMP_MAGICAL_VISION            | Purple/blue sparks culminate into a small circle.
VFX_IMP_MIRV                      | Nothing. As far as I can tell...
VFX_IMP_MIRV_FLAME                | Nothing. As far as I can tell...
VFX_IMP_NEGATIVE_ENERGY           | White circular flash around red dust plume.
VFX_IMP_POISON_L                  | Large green dust plume.
VFX_IMP_POISON_S                  | Small green dust plume.
VFX_IMP_POLYMORPH                 | White sparks rise from green light.
VFX_IMP_PULSE_COLD                | VERY FAST blue circle appears.
VFX_IMP_PULSE_FIRE                | VERY FAST orange circle appears.
VFX_IMP_PULSE_HOLY                | VERY FAST yellow circle appears.
VFX_IMP_PULSE_NATURE              | VERY FAST green circle appears.
VFX_IMP_PULSE_NEGATIVE            | VERY FAST red circle appears.
VFX_IMP_PULSE_WATER               | VERY FAST blue circle appears.
VFX_IMP_PULSE_WIND                | VERY FAST white circle appears.
VFX_IMP_RAISE_DEAD                | Skeleton rises from ground with white sparkles then dissapears.
VFX_IMP_REDUCE_ABILITY_SCORE      | Red light that seems to be gathering energy in its center.
VFX_IMP_RELFEX_SAVE_THROW_USE     | Small green dot the rises.
VFX_IMP_REMOVE_CONDITION          | Lightly concentrated blue/yellow sparks rise.
VFX_IMP_RESTORATION               | Medium blue/white/yellow exploding flames.
VFX_IMP_RESTORATION_GREATER       | Large exploding then rising Blue/white/yellow flames.
VFX_IMP_RESTORATION_LESSER        | Small blue/white rising flames. Like the Fayth of Final Fantasy X.
VFX_IMP_SILENCE                   | Expanding water ripple. Kind of like players walk on a streams.
VFX_IMP_SLEEP                     | White Z's that rise.
VFX_IMP_SLOW                      | Purple ring that emits 6 purple lines
VFX_IMP_SONIC                     | White circle that emits many thin white lines.
VFX_IMP_SPELL_MANTLE_USE          | Blue shield-like circle. Like the "Protect" of Final Fantasy X.
VFX_IMP_SPIKE_TRAP                | Spikes rise from the ground.
VFX_IMP_STUN                      | Small electrical burst, emits thin streams of lightning.
VFX_IMP_SUNSTRIKE                 | Small and fast explosion.
VFX_IMP_SUPER_HEROISM             | Bright white light that emits beams of light upwards.
VFX_IMP_UNSUMMON                  | Blue circle of runes, white light beams rise from it.
VFX_IMP_WILL_SAVING_THROW_USE     | Small blue dot that rises like Magical Sparks.
VFX_IMP_NONE                      | None. (Duh.)



---B. Sound Effect Listing. ---

Alright, this is F*CKING HUGE. Please use it... In all theres 7568 sound files, but 5.6
thousand of those are voice files. This DOES NOT include any of the ambient/combat music files
, by that I mean those that you select as your areas Ambient/Combat music.

If you want to add custom sounds or music to your modules, check
out the HakPak editing tutorials on doing so. (section III.11)


Some things you should know before viewing:

THIS INCLUDES ALL PLOT SOUNDS...SO SPOILERS AHEAD.

I've tried best I could to make out names, grunts, and yells. If any names are
wrong you can email me and I'll fix them, but its not one of my top priorities.

Also, I've noted what the sounds SOUNDS like, not what it is used for in the official modules.
For example: Zelieph is an undead spirit in game, but it sounds useful as a bug or a mage to me...

Since there are alot more male voice sets than female voice sets I have only noted the female
ones. They are noted with a 'F' at the end of the "Sound Filename" margin. All other are
presumably male, or in some cases "neuter."

-------------------------------
|Full list of "Speaker Voices"|
-------------------------------
(they count for both female and male, even hooker)
Barbarian
Bug
Druid
Drunk
Guard
Hooker
Mage
Nobleman
Old Man
Orc
Peasant
Ranger
Rogue
Scholar
Thief
Thug
Villian
Warrior
Witch


NOTE: If you are looking for animal sounds, just search
for the name of the animal you are looking for. Also
search for the plural of that animal, such as "bees".
When searching for "bee" the engine lists all cases of been, and
words of the same nature, with 'bee' somewhere in them.
I often list the animal sounds as bees buzzing, or lions roaring.
-------------------------------


   
USE CRTL+F TO FIND THINGS MUCH FASTER! BEST RESULTS COME FROM SEARCHING FOR A SPEAKER VOICE!
----------------------------------------------------------------------------------------------
Sound Filename             | Speaker voice / Sound text and or description / Comments
----------------------------------------------------------------------------------------------
al_an_bees1                | Bees buzzing.
al_an_bugs1                | Bugs moving around or eating./ metamorphasis
al_an_chickens1            | Chickens clucking.
al_an_crickets1            | Crickets doing that thing with their legs. (anyone?)
al_an_flies1               | Flies buzzing.
al_an_mosquitos1           | Mosquitos buzzing. (sounds like a wood saw)
al_an_toads1               | Toads ribbiting. (lol)
vs_nprostf3_050           F| Hooker/Villian (accent) "Hello there darling. Do make yourself welcome."
vs_nprostf3_051           F| Hooker/Villian (accent) "Why hello there darling. Come for a bit of fun?"
vs_nprostf3_052           F| Hooker/Villian (accent) "Well then. This is a house of refinement I remind you.
                           |                          We'll have no trouble here."
vs_nprostf3_atk1          F| Hooker/Villian (accent) grunting, "Uh!"
vs_nprostf3_atk2          F| Hooker/Villian (accent) grunting, "Uyh!"
vs_nprostf3_atk3          F| Hooker/Villian (accent) grunting, "Yah!"
vs_nprostf3_attk          F| Hooker/Villian (accent) "Attack our enemies!"
vs_nprostf3_bat1          F| Hooker/Villian (accent) "I am innocent, leave me be!"
vs_nprostf3_bat2          F| Hooker/Villian (accent) "This cannot be allowed."
vs_nprostf3_bat3          F| Hooker/Villian (accent) "Villian! Get away!"
vs_nprostf3_bye           F| Hooker/Villian (accent) "Au revoir."
vs_nprostf3_dead          F| Hooker/Villian (accent) screaming.
vs_nprostf3_haha          F| Hooker/Villian (accent) "Ohhahahha!"
vs_nprostf3_heal          F| Hooker/Villian (accent) "I have been injured."
vs_nprostf3_help          F| Hooker/Villian (accent) "Please, help me."
vs_nprostf3_hi            F| Hooker/Villian (accent) "Bonjour."
vs_nprostf3_hit1          F| Hooker/Villian (accent) grunting, "Ah!"
vs_nprostf3_hit2          F| Hooker/Villian (accent) grunting, "Erh!"
vs_nprostf3_hit3          F| Hooker/Villian (accent) grunting, "Uhh!"
vs_nprostf3_no            F| Hooker/Villian (accent) "Non."
vs_nprostf3_say           F| Hooker/Villian (accent) "We two must share words."
vs_nprostf3_vict          F| Hooker/Villian (accent) "Good has overcome."
vs_nprostf3_warn          F| Hooker/Villian (accent) "Do not force me have this place cleansed of your taint."
vs_nprostf3_yes           F| Hooker/Villian (accent) "Oui."
vs_nprostm1_050            | Hooker/Villian/Mage "I am sorry m'lord, but my company is open to the ladies alone.
                           |                      You might wish to see if Tomorrow or Lucy is available."
vs_nprostm1_051            | Hooker/Villian/Mage "I__ reeeally don't have the heart for this today.
                           |                      I don't need the criticism."
vs_nprostm1_052            | Hooker/Villian/Mage "I apologize, but I am no longer working, and my time
                           |                      is my own. I hope this doesn't inconvenience you."
vs_nprostm1_053            | Hooker/Villian/Mage "Welcome to the Moonstone Mask. I am Tawneth. What would
                           |                      the lady like for this evening? What is your pleasure?"
vs_nprostm1_054            | Hooker/Villian/Mage "Good day ma'am. I am Tawneth, I shall endevour to make
                           |                      your visit to the Moonstone Mask a pleasant one."
vs_nprostm1_055            | Hooker/Villian/Mage "Well...good day, fine lady. My name is Tawneth. I
                           |                      shall endevour to be what you need in a companion,
                           |                      with no judgement...mostly."
vs_nprostm1_atk1           | Hooker/Villian/Mage grunting, "Meh!"
vs_nprostm1_atk2           | Hooker/Villian/Mage grunting, "Yah!"
vs_nprostm1_atk3           | Hooker/Villian/Mage grunting, "Yyyah!"
vs_nprostm1_attk           | Hooker/Villian/Mage "Attack!"
vs_nprostm1_bat1           | Hooker/Villian/Mage "I've done nothing to deserve this!"
vs_nprostm1_bat2           | Hooker/Villian/Mage "You'll not find me to be easy prey!"
vs_nprostm1_bat3           | Hooker/Villian/Mage "Hugh! This'll cost you!"
vs_nprostm1_bye            | Hooker/Villian/Mage "Farewell."
vs_nprostm1_dead           | Hooker/Villian/Mage screaming.
vs_nprostm1_haha           | Hooker/Villian/Mage "Ahaha."
vs_nprostm1_heal           | Hooker/Villian/Mage "I am wounded."
vs_nprostm1_help           | Hooker/Villian/Mage "Assist me!"
vs_nprostm1_hi             | Hooker/Villian/Mage "Hello."
vs_nprostm1_hit1           | Hooker/Villian/Mage grunting, "Oh!"
vs_nprostm1_hit2           | Hooker/Villian/Mage grunting, "Ah!"
vs_nprostm1_hit3           | Hooker/Villian/Mage grunting, "Uh!"
vs_nprostm1_no             | Hooker/Villian/Mage "No."
vs_nprostm1_say            | Hooker/Villian/Mage "Speak with me, if you will."
vs_nprostm1_vict           | Hooker/Villian/Mage "Very nice indeed."
vs_nprostm1_warn           | Hooker/Villian/Mage "Leave me be or...I don't know."
vs_nprostm1_yes            | Hooker/Villian/Mage "Yes."
vs_nprostm2_atk1           | Hooker/Commoner grunting, "Unh!"
vs_nprostm2_atk2           | Hooker/Commoner grunting, "Aah!"
vs_nprostm2_atk3           | Hooker/Commoner grunting, "Ah!"
vs_nprostm2_attk           | Hooker/Commoner "Take it to them! Fight!"
vs_nprostm2_bat1           | Hooker/Commoner "Get away!"
vs_nprostm2_bat2           | Hooker/Commoner "Leave me alone! I'm no threat!"
vs_nprostm2_bat3           | Hooker/Commoner "I've had it with you."
vs_nprostm2_bye            | Hooker/Commoner "Bye bye."
vs_nprostm2_dead           | Hooker/Commoner screaming.
vs_nprostm2_haha           | Hooker/Commoner "Hhhahaha."
vs_nprostm2_heal           | Hooker/Commoner "Quickly I need healing here!"
vs_nprostm2_help           | Hooker/Commoner "Help me! Get over here!"
vs_nprostm2_hi             | Hooker/Commoner "Hi there."
vs_nprostm2_hit1           | Hooker/Commoner grunting, "Uh!"
vs_nprostm2_hit2           | Hooker/Commoner grunting, "Huh!"
vs_nprostm2_hit3           | Hooker/Commoner grunting, "Eh!"
vs_nprostm2_no             | Hooker/Commoner "Mmm...no."
vs_nprostm2_say            | Hooker/Commoner "You should come over here. I need to talk with you."
vs_nprostm2_vict           | Hooker/Commoner "Hey hey!"
vs_nprostm2_warn           | Hooker/Commoner "I sware I won't put up with this! I won't!"
vs_nprostm2_yes            | Hooker/Commoner "Why yes."
vs_nquintm_050             | Nobleman/Scholar/Cleric "Stay back dead one! I have fire to fight fire you
                           |                          know! Uhuh...fire...to fight...fire."
vs_nquintm_051             | Nobleman/Scholar/Cleric "We await your decision judge."
vs_nquintm_052             | Nobleman/Scholar/Cleric "You'll see! I'm alive, you're alive, but you can't
                           |                          change castle Jureg, and you can't change the dead!
                           |                          They NEVER, EVER listen!"
vs_nquintm_053             | Nobleman/Scholar/Cleric "Welcome to where the dead lie. Or is it lay...?
                           |                          I forget which is which when they do both.
                           |                          I am Quince...I think."
vs_nquintm_atk1            | Nobleman/Scholar/Cleric grunting, "Uh!"
vs_nquintm_atk2            | Nobleman/Scholar/Cleric grunting, "Ugh!"
vs_nquintm_atk3            | Nobleman/Scholar/Cleric grunting, "Hyah!"
vs_nquintm_attk            | Nobleman/Scholar/Cleric "Get them! Get them, get them!!!"
vs_nquintm_bat1            | Nobleman/Scholar/Cleric "Aaaaaaaaah!"
vs_nquintm_bat2            | Nobleman/Scholar/Cleric "Kill you! Kill you dead!"
vs_nquintm_bat3            | Nobleman/Scholar/Cleric "You're making me hurt you."
vs_nquintm_bye             | Nobleman/Scholar/Cleric "Bye then. Bye."
vs_nquintm_dead            | Nobleman/Scholar/Cleric screaming.
vs_nquintm_haha            | Nobleman/Scholar/Cleric "Uhuhu...huhu.
vs_nquintm_heal            | Nobleman/Scholar/Cleric "Heal me, I need healing!!!"
vs_nquintm_help            | Nobleman/Scholar/Cleric "Help me here! Now! Come on!"
vs_nquintm_hi              | Nobleman/Scholar/Cleric "Hi, yes! What!?"
vs_nquintm_hit1            | Nobleman/Scholar/Cleric grunting, "Oww!"
vs_nquintm_hit2            | Nobleman/Scholar/Cleric grunting, "Ohh!"
vs_nquintm_hit3            | Nobleman/Scholar/Cleric grunting, "Ah!"
vs_nquintm_no              | Nobleman/Scholar/Cleric "No?"
vs_nquintm_say             | Nobleman/Scholar/Cleric "Come here, come here I need to talk to you!"
vs_nquintm_vict            | Nobleman/Scholar/Cleric "Hahahah Hohohohooo!"
vs_nquintm_warn            | Nobleman/Scholar/Cleric "Don't make me hurt you! Don't make me!"
vs_nquintm_yes             | Nobleman/Scholar/Cleric "Yes. Yes!"
vs_nrangem1_050            | Ranger/Warrior/Druid "Greetings. Aubin told me to expect additional troops arriving.
                           |                       Let me tell you, you are much needed here."
vs_nrangem1_051            | Ranger/Warrior/Druid "Ah, I heard of the impact you're making in Neverwinter.
                           |                       Good to know you're on our side today."
vs_nrangem1_052            | Ranger/Warrior/Druid "Ah, you've returned to me. You need me to repeat my
                           |                       earlier information, or have you something else?"
vs_nrangem1_053            | Ranger/Warrior/Druid "Ah, you must be with that other person. Do you need
                           |                       me to repeat what they asked about?"
vs_nrangem1_054            | Ranger/Warrior/Druid "Well, I must say that whatever you did in that bloody
                           |                       graveyard, it seems our immediate troubles are over."
vs_nrangem1_055            | Ranger/Warrior/Druid "I knew we could count on you to repeat your success in
                           |                       this district. I heard good things about you."
vs_nrangem1_056            | Ranger/Warrior/Druid "Damnit recruit! Go find those Waterdhavian creatures and protect them!"
vs_nrangem1_057            | Ranger/Warrior/Druid "Get your ass over here now recruit."
vs_nrangem1_058            | Ranger/Warrior/Druid "Its about time you showed up recruit. My name is Herban, and
                           |                       as far as your worthless hide is concerned, you can call me sir."
vs_nrangem1_059            | Ranger/Warrior/Druid "Back again recruit? What do you want this time? And you
                           |                       better address me as sir, or this conversation is over."
vs_nrangem1_060            | Ranger/Warrior/Druid "You have what you want. Just leave me be."
vs_nrangem1_061            | Ranger/Warrior/Druid "Please! You must help me!"
vs_nrangem1_062            | Ranger/Warrior/Druid "Huh! It seems another fool has taken my bait.
                           |                       Kill them all my creatures."
vs_nrangem1_063            | Ranger/Warrior/Druid "I surrender."
vs_nrangem1_064            | Ranger/Warrior/Druid "You've made short work of my creatures. I would not
                           |                       be wise to let you do the same to me."
vs_nrangem1_065            | Ranger/Warrior/Druid "I've already lost a fellow ranger to the animals in
                           |                       this place. He lies just down the southern path."
vs_nrangem1_atk1           | Ranger/Warrior/Druid grunting, "Uh!"
vs_nrangem1_atk2           | Ranger/Warrior/Druid grunting, "Nyah!"
vs_nrangem1_atk3           | Ranger/Warrior/Druid grunting, "Ugh!"
vs_nrangem1_attk           | Ranger/Warrior/Druid "Attack the enemy."
vs_nrangem1_bat1           | Ranger/Warrior/Druid "Taste steel!"
vs_nrangem1_bat2           | Ranger/Warrior/Druid "Die as you must!"
vs_nrangem1_bat3           | Ranger/Warrior/Druid "Flee or fall!"
vs_nrangem1_bye            | Ranger/Warrior/Druid "Farewell."
vs_nrangem1_dead           | Ranger/Warrior/Druid screaming.
vs_nrangem1_haha           | Ranger/Warrior/Druid "Heheheh."
vs_nrangem1_heal           | Ranger/Warrior/Druid "I need healing!"
vs_nrangem1_help           | Ranger/Warrior/Druid "Assist me!"
vs_nrangem1_hi             | Ranger/Warrior/Druid "What do you want?"
vs_nrangem1_hit1           | Ranger/Warrior/Druid grunting, "Uh!"
vs_nrangem1_hit2           | Ranger/Warrior/Druid grunting, "Ugh!"
vs_nrangem1_hit3           | Ranger/Warrior/Druid grunting, "Ugh!"
vs_nrangem1_no             | Ranger/Warrior/Druid "No."
vs_nrangem1_say            | Ranger/Warrior/Druid "I must speak with you."
vs_nrangem1_vict           | Ranger/Warrior/Druid "Hurrah!"
vs_nrangem1_warn           | Ranger/Warrior/Druid "Cease your actions...or so help me I will make you regret them."
vs_nrangem1_yes            | Ranger/Warrior/Druid "Yes."
vs_nrougem1_050            | Scholar/Rogue/Nobleman "I must be on my way now."
vs_nrougem1_051            | Scholar/Rogue/Nobleman "How do you do? Have you had any luck aquiring
                           |                         the gems? Or is there something else you need?"
vs_nrougem1_052            | Scholar/Rogue/Nobleman "Greetings to you. It is rare we see new faces
                           |                         come drink with us in the Alliance Inn."
vs_nrougem1_053            | Scholar/Rogue/Nobleman "I am in the middle of a drink, but please, stay. I
                           |                         will not have it said that Eliath Crownober has become
                           |                         rude in his later years. What can I do for you?"
vs_nrougem1_atk1           | Scholar/Rogue/Nobleman grunting, "Ah!"
vs_nrougem1_atk2           | Scholar/Rogue/Nobleman grunting, "Ugh!"
vs_nrougem1_atk3           | Scholar/Rogue/Nobleman grunting, "Agh!"
vs_nrougem1_attk           | Scholar/Rogue/Nobleman "On my order...Attack!"
vs_nrougem1_bat1           | Scholar/Rogue/Nobleman "Only one way out for you!"
vs_nrougem1_bat2           | Scholar/Rogue/Nobleman "You and me! Let's go!"
vs_nrougem1_bat3           | Scholar/Rogue/Nobleman "Nobody walks away!"
vs_nrougem1_bye            | Scholar/Rogue/Nobleman "Goodbye then."
vs_nrougem1_dead           | Scholar/Rogue/Nobleman screaming.
vs_nrougem1_haha           | Scholar/Rogue/Nobleman "H--hahahaha!"
vs_nrougem1_heal           | Scholar/Rogue/Nobleman "I could use some healing here."
vs_nrougem1_help           | Scholar/Rogue/Nobleman "Give me a hand over here!...I need help!"
vs_nrougem1_hi             | Scholar/Rogue/Nobleman "Yes? Hello?"
vs_nrougem1_hit1           | Scholar/Rogue/Nobleman grunting, "Ooh!"
vs_nrougem1_hit2           | Scholar/Rogue/Nobleman grunting, "Aah!"
vs_nrougem1_hit3           | Scholar/Rogue/Nobleman grunting, "Agh!"
vs_nrougem1_no             | Scholar/Rogue/Nobleman "I'd say, no."
vs_nrougem1_say            | Scholar/Rogue/Nobleman "Come here, listen to me."
vs_nrougem1_vict           | Scholar/Rogue/Nobleman "That's the way!"
vs_nrougem1_warn           | Scholar/Rogue/Nobleman "This is the only warning you'll get."
vs_nrougem1_yes            | Scholar/Rogue/Nobleman "For certain."
vs_nshopkm1_atk1           | Warrior/Thief/Peasant grunting, "Uh!"
vs_nshopkm1_atk2           | Warrior/Thief/Peasant grunting, "Humpfh!"
vs_nshopkm1_atk3           | Warrior/Thief/Peasant grunting, "Ehh!"
vs_nshopkm1_attk           | Warrior/Thief/Peasant "Get them!"
vs_nshopkm1_bat1           | Warrior/Thief/Peasant "I won't fall to you!"
vs_nshopkm1_bye            | Warrior/Thief/Peasant "Until next time."
vs_nshopkm1_dead           | Warrior/Thief/Peasant screaming.
vs_nshopkm1_haha           | Warrior/Thief/Peasant "Hehuhuhuha."
vs_nshopkm1_heal           | Warrior/Thief/Peasant "I'm hurt!"
vs_nshopkm1_help           | Warrior/Thief/Peasant "Please help me!"
vs_nshopkm1_hi             | Warrior/Thief/Peasant "Can I help you?"
vs_nshopkm1_hit1           | Warrior/Thief/Peasant grunting, "Ugh!"
vs_nshopkm1_hit2           | Warrior/Thief/Peasant grunting, "Augh!"
vs_nshopkm1_hit3           | Warrior/Thief/Peasant grunting, "Egh!"
vs_nshopkm1_no             | Warrior/Thief/Peasant "Naw."
vs_nshopkm1_say            | Warrior/Thief/Peasant "Taalk with me friend."
vs_nshopkm1_vict           | Warrior/Thief/Peasant "As it should be!"
vs_nshopkm1_warn           | Warrior/Thief/Peasant "You best be leaving!"
vs_nshopkm1_yes            | Warrior/Thief/Peasant "Yes."
vs_nshopkm2_050            | Peasant/Barbarian "Don't worry young Ander, this will work out yet.
                           |                    Everything happens for a reason, it does."
vs_nshopkm2_051            | Peasant/Barbarian "Mind the place will you Ander...I am an old man
                           |                    grown tired...and I should go home and catch my rest!"
vs_nshopkm2_052            | Peasant/Barbarian "I am heading home for a bite to eat. Feel free to join me if you wish."
vs_nshopkm2_053            | Peasant/Barbarian "Al Halor! Port Last's only anti-lichenthropic
                           |                    merchant, at your service. Come one, come all!
                           |                    Defend yourself against the legend of the Black
                           |                    Wolf! Haha!"
vs_nshopkm2_054            | Peasant/Barbarian "You have a keen nose to have tracked me here.
                           |                    I suppose I should welcome you to my den..."
vs_nshopkm2_055            | Peasant/Barbarian "If you have come to prove the death of the Black Wolf,
                           |                    I have already lost one tooth to the cause and do not
                           |                    care to lose another."
vs_nshopkm2_056            | Peasant/Barbarian "Back again? Is there something I can do for you?"
vs_nshopkm2_057            | Peasant/Barbarian "Greetings. I am Master Ford, head archaeologist of
                           |                    Neverwinter. Lord Nasher mentioned someone might
                           |                    be coming to investigate the source stone."
vs_nshopkm2_atk1           | Peasant/Barbarian grunting, "Yuh!"
vs_nshopkm2_atk2           | Peasant/Barbarian grunting, "Nyah!"
vs_nshopkm2_atk3           | Peasant/Barbarian grunting, "Huh!"
vs_nshopkm2_attk           | Peasant/Barbarian "Give 'em hell! Attack!"
vs_nshopkm2_bat1           | Peasant/Barbarian scared, "Just leave me alone!"
vs_nshopkm2_bat2           | Peasant/Barbarian "You'll die here!"
vs_nshopkm2_bat3           | Peasant/Barbarian "Well that tears it!"
vs_nshopkm2_bye            | Peasant/Barbarian "Goodbye."
vs_nshopkm2_dead           | Peasant/Barbarian screaming.
vs_nshopkm2_haha           | Peasant/Barbarian "Huhahaha!"
vs_nshopkm2_heal           | Peasant/Barbarian "I am wounded! Heal me!"
vs_nshopkm2_help           | Peasant/Barbarian "Someone help me here! I need assistance!"
vs_nshopkm2_hi             | Peasant/Barbarian "Hello there."
vs_nshopkm2_hit1           | Peasant/Barbarian grunting, "Eee!"
vs_nshopkm2_hit2           | Peasant/Barbarian grunting, "Ooh!"
vs_nshopkm2_hit3           | Peasant/Barbarian grunting, "Oofh!"
vs_nshopkm2_no             | Peasant/Barbarian "No."
vs_nshopkm2_say            | Peasant/Barbarian "Come here. Listen to me!"
vs_nshopkm2_vict           | Peasant/Barbarian "Good! Good!"
vs_nshopkm2_warn           | Peasant/Barbarian "You don't want to get me mad! You just don't!"
vs_nshopkm2_yes            | Peasant/Barbarian "Yyyes?" 
vs_nshopkm3_050            | Peasant/Warrior "Greetings to you. I was just getting packed up in the
                           |                  hopes of leaving soon. How may I assist you?"
vs_nshopkm3_051            | Peasant/Warrior "Hello. I was just packing up in the hopes of
                           |                  leaving soon. What can I do for you?"
vs_nshopkm3_052            | Peasant/Warrior "What do you want? I was just packing up in the
                           |                  hopes of leaving soon, so don't waste my time!"
vs_nshopkm3_atk1           | Peasant/Warrior grunting, "Ehh!"
vs_nshopkm3_atk2           | Peasant/Warrior grunting, "Ugh!"
vs_nshopkm3_atk3           | Peasant/Warrior grunting, "Agh!"
vs_nshopkm3_attk           | Peasant/Warrior "Attack the enemy!"
vs_nshopkm3_bat1           | Peasant/Warrior "I'll have your head for this!"
vs_nshopkm3_bat2           | Peasant/Warrior "You've no cause to attack me!"
vs_nshopkm3_bat3           | Peasant/Warrior "I'll see you pay!"
vs_nshopkm3_bye            | Peasant/Warrior "Good travels."
vs_nshopkm3_dead           | Peasant/Warrior screaming.
vs_nshopkm3_haha           | Peasant/Warrior "Heheheha."
vs_nshopkm3_heal           | Peasant/Warrior "Healing! Please!"
vs_nshopkm3_help           | Peasant/Warrior "A little help?"
vs_nshopkm3_hi             | Peasant/Warrior "What can I do for you?"
vs_nshopkm3_hit1           | Peasant/Warrior grunting, "Ehh!"
vs_nshopkm3_hit2           | Peasant/Warrior grunting, "Ugh!"
vs_nshopkm3_hit3           | Peasant/Warrior grunting, "Uh!"
vs_nshopkm3_no             | Peasant/Warrior "No."
vs_nshopkm3_say            | Peasant/Warrior "Come, and talk a while."
vs_nshopkm3_vict           | Peasant/Warrior "Good! Good!"
vs_nshopkm3_warn           | Peasant/Warrior "Watch your step with me friend! You've been warned!"
vs_nshopkm3_yes            | Peasant/Warrior "Yes."
vs_nsuccf_050             F| Hooker/Peasant (female) "You have done well. Maugrim will be shegrinned (?) to know
                           |                          that some adventures stumbled in the rescue me from his spell."
vs_nsuccf_051             F| Hooker/Peasant (female) "I am eager to be off in search of Arglem. It will be difficult
                           |                          to say where he might have hidden himself in his...condition.
                           |                          Regardless, the tower will be ours again in time."
vs_nsuccf_052             F| Hooker/Peasant (female) "As for you, you did your part. You freed me. And the
                           |                          reward is yours by right. Take this item and go."
vs_nsuccf_053             F| Hooker/Peasant (female) "I suggest you still not be present in the host tower when I return."
vs_nsuccf_054             F| Hooker/Peasant (female) "I will not be questioned any further. I am sure you know
                           |                          more than enough. Now destroy the brazier before I grow
                           |                          impatient."
vs_nsuccf_055             F| Hooker/Peasant (female) "What is the delay? Surely you cannot tell me you are
                           |                          having difficulty destroying the brazier."
vs_nsuccf_056             F| Hooker/Peasant (female) "Mmm. A rather delicious looking mortal is it? What a
                           |                          treat... Please don't tell me you're one of the fools
                           |                          toadying after Maugrim."
vs_nsuccf_057             F| Hooker/Peasant (female) "Hmm. You can't be one of Maugrim's fools. You
                           |                          haven't the look of fanatic desperation to you."
vs_nsuccf_058             F| Hooker/Peasant (female) "Who are you? A better question perhaps is, what
                           |                          are you doing in the tower? You don't seem like
                           |                          one of Maugrim's toadies."
vs_nsuccf_atk1            F| Hooker/Peasant (female) grunting, "Hyah!"
vs_nsuccf_atk2            F| Hooker/Peasant (female) grunting, "Huh!"
vs_nsuccf_atk3            F| Hooker/Peasant (female) grunting, "Hyeeah!"
vs_nsuccf_attk            F| Hooker/Peasant (female) "Rend their flesh, they will not need it!"
vs_nsuccf_bat1            F| Hooker/Peasant (female) "On your knees!"
vs_nsuccf_bat2            F| Hooker/Peasant (female) "You are mine!"
vs_nsuccf_bat3            F| Hooker/Peasant (female) "Raahhh!"
vs_nsuccf_bye             F| Hooker/Peasant (female) "Farewell, for now."
vs_nsuccf_dead            F| Hooker/Peasant (female) screaming.
vs_nsuccf_haha            F| Hooker/Peasant (female) "Ahahahah."
vs_nsuccf_heal            F| Hooker/Peasant (female) "You want to heal me! You must!"
vs_nsuccf_help            F| Hooker/Peasant (female) yelling, "Come to my side! Help me here!"
vs_nsuccf_hi              F| Hooker/Peasant (female) "Well hello there."
vs_nsuccf_hit1            F| Hooker/Peasant (female) grunting, "Uhh!"
vs_nsuccf_hit2            F| Hooker/Peasant (female) grunting, "Uh!"
vs_nsuccf_hit3            F| Hooker/Peasant (female) grunting, "Ugh!"
vs_nsuccf_no              F| Hooker/Peasant (female) "No...no."
vs_nsuccf_say             F| Hooker/Peasant (female) "I need to speak with you."
vs_nsuccf_vict            F| Hooker/Peasant (female) "Ooh! That is very nice!"
vs_nsuccf_warn            F| Hooker/Peasant (female) "You tempt pain that you have never dreamed of!"
vs_nsuccf_yes             F| Hooker/Peasant (female) "Oh yes."
vs_nteenm_050              | Warrior/Peasant (young) "Its finally over. Nurek said Alhalar is dead,
                           |                          but I know I'll still have trouble falling asleep
                           |                          at night. Did you want me for something?"
vs_nteenm_051              | Warrior/Peasant (young) "If your looking for Alhalar, he went home to get
                           |                          some rest. Maybe I can answer a question for you."
vs_nteenm_052              | Warrior/Peasant (young) "Hello there. Is there something the matter?
                           |                          Did you have something to ask of me?"
vs_nteenm_053              | Warrior/Peasant (young) "Thanks so much for helping me Alhalar."
vs_nteenm_atk1             | Warrior/Peasant (young) grunting, "Yah!"
vs_nteenm_atk2             | Warrior/Peasant (young) grunting, "Yuh!"
vs_nteenm_atk3             | Warrior/Peasant (young) grunting, "Hyah!"
vs_nteenm_attk             | Warrior/Peasant (young) "Hhh...get them! Attack!"
vs_nteenm_bat1             | Warrior/Peasant (young) "No! HELP!"
vs_nteenm_bat2             | Warrior/Peasant (young) "Get away from me!"
vs_nteenm_bat3             | Warrior/Peasant (young) "You...y-you won't get away!"
vs_nteenm_bye              | Warrior/Peasant (young) "Bye then."
vs_nteenm_dead             | Warrior/Peasant (young) screaming.
vs_nteenm_haha             | Warrior/Peasant (young) "Hahahahah haha."
vs_nteenm_heal             | Warrior/Peasant (young) "Please heal me! I'm hurt bad!"
vs_nteenm_help             | Warrior/Peasant (young) "Help...huh...uh, Help me here!"
vs_nteenm_hi               | Warrior/Peasant (young) "Hey there."
vs_nteenm_hit1             | Warrior/Peasant (young) grunting, "Uh!"
vs_nteenm_hit2             | Warrior/Peasant (young) grunting, "Ugh!"
vs_nteenm_hit3             | Warrior/Peasant (young) grunting, "Thuugh!"
vs_nteenm_no               | Warrior/Peasant (young) "No."
vs_nteenm_say              | Warrior/Peasant (young) "I've got something you should hear."
vs_nteenm_vict             | Warrior/Peasant (young) "Haaalright!"
vs_nteenm_warn             | Warrior/Peasant (young) "You just watch it. I sware I'll...!"
vs_nteenm_yes              | Warrior/Peasant (young) "Yes."
vs_nthugxf1_atk1          F| Witch/Thug (female) grunting, "Hhhr!"
vs_nthugxf1_atk2          F| Witch/Thug (female) grunting, "Hugh!"
vs_nthugxf1_atk3          F| Witch/Thug (female) grunting, "Hrrrr!"
vs_nthugxf1_attk          F| Witch/Thug (female) "Kill 'em all!"
vs_nthugxf1_bat1          F| Witch/Thug (female) "Raaaaah!"
vs_nthugxf1_bat2          F| Witch/Thug (female) "I'll have your head!"
vs_nthugxf1_bat3          F| Witch/Thug (female) "Die!"
vs_nthugxf1_bye           F| Witch/Thug (female) "Bye."
vs_nthugxf1_dead          F| Witch/Thug (female) screaming.
vs_nthugxf1_haha          F| Witch/Thug (female) "Heheehhehee"
vs_nthugxf1_heal          F| Witch/Thug (female) "Heal me! Heal me!"
vs_nthugxf1_help          F| Witch/Thug (female) "I need help!" (slowly)
vs_nthugxf1_hi            F| Witch/Thug (female) "What?"
vs_nthugxf1_hit1          F| Witch/Thug (female) grunting, "Uh!"
vs_nthugxf1_hit2          F| Witch/Thug (female) grunting, "Aaaah!"
vs_nthugxf1_hit3          F| Witch/Thug (female) grunting, "Huh!"
vs_nthugxf1_no            F| Witch/Thug (female) "No."
vs_nthugxf1_say           F| Witch/Thug (female) "I need to talk to you." (slowly)
vs_nthugxf1_vict          F| Witch/Thug (female) "Thats what I like..." (slowly) 
vs_nthugxf1_warn          F| Witch/Thug (female) "You keep it up! I'll put you down like a dog!"
vs_nthugxf1_yes           F| Witch/Thug (female) "Yes."
vs_nthugxm1_050            | Warrior/Thief/Thug (young) "Who the devil are you!?"
vs_nthugxm1_051            | Warrior/Thief/Thug (young) "What is this Vengal? More of your old guard? Loyalists?"
vs_nthugxm1_052            | Warrior/Thief/Thug (young) "I don't care who they are! Your foolish rule is over tonight!"
vs_nthugxm1_053            | Warrior/Thief/Thug (young) "Don't start with that, old man! This is just about business!"
vs_nthugxm1_054            | Warrior/Thief/Thug (young) "I won't let you squander this oportunity!
                           |                             That thing is worth a fortune!"
vs_nthugxm1_055            | Warrior/Thief/Thug (young) "What's the big problem? You were going
                           |                             to auction the thing yourself!"
vs_nthugxm1_058            | Warrior/Thief/Thug (young) "Master Margrem don't like meddlers. But Vardon take care-a-dat."
vs_nthugxm1_atk1           | Warrior/Thief/Thug (young) grunting, "Ooph!"
vs_nthugxm1_atk2           | Warrior/Thief/Thug (young) grunting, "Uhh!"
vs_nthugxm1_atk3           | Warrior/Thief/Thug (young) grunting, "Ugh!"
vs_nthugxm1_attk           | Warrior/Thief/Thug (young) "Destroy the enemy."
vs_nthugxm1_bat1           | Warrior/Thief/Thug (young) "I'll slit your throat!"
vs_nthugxm1_bat2           | Warrior/Thief/Thug (young) "I'll carve you up."
vs_nthugxm1_bat3           | Warrior/Thief/Thug (young) "Die!"
vs_nthugxm1_bye            | Warrior/Thief/Thug (young) "Farewell then."
vs_nthugxm1_dead           | Warrior/Thief/Thug (young) screaming.
vs_nthugxm1_haha           | Warrior/Thief/Thug (young) "Huhahaha!"
vs_nthugxm1_heal           | Warrior/Thief/Thug (young) "Heal me! Heal me!"
vs_nthugxm1_help           | Warrior/Thief/Thug (young) "I need heeelp!"
vs_nthugxm1_hi             | Warrior/Thief/Thug (young) "Hello there."
vs_nthugxm1_hit1           | Warrior/Thief/Thug (young) grunting, "Hugh!"
vs_nthugxm1_hit2           | Warrior/Thief/Thug (young) grunting, "Ugh!"
vs_nthugxm1_hit3           | Warrior/Thief/Thug (young) grunting, "Huugh-ahh!"
vs_nthugxm1_no             | Warrior/Thief/Thug (young) "No."
vs_nthugxm1_say            | Warrior/Thief/Thug (young) "I need to talk to you."
vs_nthugxm1_vict           | Warrior/Thief/Thug (young) "Hahaha! Yes!"
vs_nthugxm1_warn           | Warrior/Thief/Thug (young) "You don't wanna be messing with me!"
vs_nthugxm1_yes            | Warrior/Thief/Thug (young) "Yes."
vs_nthugxm2_050            | Warrior/Thief/Thug "I'll be seeing you."
vs_nthugxm2_051            | Warrior/Thief/Thug "Oh! They told me you were ugly, but *laugh* oh,
                           |                     no matter. You're the hero of Neverwinter I suspect.
vs_nthugxm2_052            | Warrior/Thief/Thug "They said you was plain looking alright, but
                           |                     you're the hero of Neverwinter. That much is sure."
vs_nthugxm2_053            | Warrior/Thief/Thug "Wow! They told me you had a fine face, but...gosh,
                           |                     you're the hero of Neverwinter, that much is sure!"
vs_nthugxm2_054            | Warrior/Thief/Thug "I warned you! But you just wouldn't listen."
vs_nthugxm2_055            | Warrior/Thief/Thug "Hey ugly! I think you'd beter stop
                           |                     looking into this cult business!"
vs_nthugxm2_056            | Warrior/Thief/Thug "Look I think you'd better stop looking into this cult business."
vs_nthugxm2_057            | Warrior/Thief/Thug "Hey friend, I think you'd better stop
                           |                     looking into this cult business..."
vs_nthugxm2_058            | Warrior/Thief/Thug "Back again? You need to buy some equipment? Or
                           |                     is there something else I can do for you?"
vs_nthugxm2_059            | Warrior/Thief/Thug "Well if it isn't too damn stuck up to give me
                           |                     their name. Whad'ya need this time?"
vs_nthugxm2_060            | Warrior/Thief/Thug "Hmm. I don't recognize you, and I thought I knew all
                           |                     the new recruits who've joined the Lord's Alliance.
vs_nthugxm2_atk1           | Warrior/Thief/Thug grunting, "Yah!"
vs_nthugxm2_atk2           | Warrior/Thief/Thug grunting, "Rrrrah!"
vs_nthugxm2_atk3           | Warrior/Thief/Thug grunting, "Yuh!"
vs_nthugxm2_attk           | Warrior/Thief/Thug "Attack the enemy!"
vs_nthugxm2_bat1           | Warrior/Thief/Thug "Die!!!"
vs_nthugxm2_bat2           | Warrior/Thief/Thug "I'll cut you down!"
vs_nthugxm2_bat3           | Warrior/Thief/Thug "Eat steel!"
vs_nthugxm2_bye            | Warrior/Thief/Thug "Farewell."
vs_nthugxm2_dead           | Warrior/Thief/Thug screaming.
vs_nthugxm2_haha           | Warrior/Thief/Thug "Hehehehehe."
vs_nthugxm2_heal           | Warrior/Thief/Thug "I need healing!"
vs_nthugxm2_help           | Warrior/Thief/Thug yelling, "Assist me!"
vs_nthugxm2_hi             | Warrior/Thief/Thug "Greetings."
vs_nthugxm2_hit1           | Warrior/Thief/Thug grunting, "Ooh!"
vs_nthugxm2_hit2           | Warrior/Thief/Thug grunting, "Ugh!"
vs_nthugxm2_hit3           | Warrior/Thief/Thug grunting, "Rugh!"
vs_nthugxm2_no             | Warrior/Thief/Thug "No."
vs_nthugxm2_say            | Warrior/Thief/Thug "Talk a while, if you will."
vs_nthugxm2_vict           | Warrior/Thief/Thug "Now I like that!"
vs_nthugxm2_warn           | Warrior/Thief/Thug "You tread on dangerous grounds!"
vs_nthugxm2_yes            | Warrior/Thief/Thug "Yes."
vs_nthugxm3_atk1           | Warrior/Thief/Thug grunting, "Err!"
vs_nthugxm3_atk2           | Warrior/Thief/Thug grunting, "Ugh!"
vs_nthugxm3_atk3           | Warrior/Thief/Thug grunting, "Raaah!"
vs_nthugxm3_attk           | Warrior/Thief/Thug "Kill em all. Let the gods sort them out."
vs_nthugxm3_bat1           | Warrior/Thief/Thug "I'll spill your guts!"
vs_nthugxm3_bat2           | Warrior/Thief/Thug "Skull cleaver!"
vs_nthugxm3_bat3           | Warrior/Thief/Thug "Ye die this day!"
vs_nthugxm3_bye            | Warrior/Thief/Thug "Fare thee well."
vs_nthugxm3_dead           | Warrior/Thief/Thug screaming.
vs_nthugxm3_haha           | Warrior/Thief/Thug "Hhhhuhuhu."
vs_nthugxm3_heal           | Warrior/Thief/Thug yelling, "I need healing."
vs_nthugxm3_help           | Warrior/Thief/Thug yelling, "To my aid!"
vs_nthugxm3_hi             | Warrior/Thief/Thug "Well met."
vs_nthugxm3_hit1           | Warrior/Thief/Thug grunting, "Ooh!"
vs_nthugxm3_hit2           | Warrior/Thief/Thug grunting, "Arrrh!"
vs_nthugxm3_hit3           | Warrior/Thief/Thug grunting, "Ooph!"
vs_nthugxm3_no             | Warrior/Thief/Thug "Nay."
vs_nthugxm3_say            | Warrior/Thief/Thug "Let me speak over here."
vs_nthugxm3_vict           | Warrior/Thief/Thug "Yes! Good!"
vs_nthugxm3_warn           | Warrior/Thief/Thug "Ya be not but a worm."
vs_nthugxm3_yes            | Warrior/Thief/Thug "Ay?"
vs_nwizarf1_050           F| Mage/Warrior (female) "Who is it now? More people to threaten me? I
                           |                        shouldn't have said anything. I just hoped someone
                           |                        would help. But I can't trust anyone with Vengul gone."
vs_nwizarf1_051           F| Mage/Warrior (female) "Thank you for saving me. If that is indeed what
                           |                        you have done. I do not know you and your motives."
vs_nwizarf1_052           F| Mage/Warrior (female) "You have returned. What more can I tell you?
                           |                        What more do you think I know?"
vs_nwizarf1_054           F| Mage/Warrior (female) "Looks like your bait has born fruit afterall
                           |                        Jaheel. Quick, close in on them."
vs_nwizarf1_055           F| Mage/Warrior (female) "Ah, you're back. O-or is this is our first meeting?
                           |                        Temporal instability in the timestream makes
                           |                        introductions difficult, doesn't it? Is there a problem?
                           |                        Do you need me to refresh your memory of our last
                           |                        memory...or is that our next meeting?"
vs_nwizarf1_056           F| Mage/Warrior (female) "What? Who? Oh, oh pardon me. I didn't notice you
                           |                        there. I was rather engrossed in my contemplations
                           |                        of the time stream. It's easy to get lost, *laugh*
                           |                        in a paradoxical currency, if I do say so myself."
vs_nwizarf1_057           F| Mage/Warrior (female) "Oh, Hello. I didn't see you there. I was too busy
                           |                        studying this amazing tree. Remarkable, isn't it?
                           |                        Ten thousand years to produces a single fruit, and
                           |                        then it dies."
vs_nwizarf1_058           F| Mage/Warrior (female) "Greetings. Once more I must thank you for planting
                           |                        the Uth'guard seed trees for me...oor is this the
                           |                        first time I am thanking you? *laugh* No matter. I
                           |                        am grateful in any case."
vs_nwizarf1_atk1          F| Mage/Warrior (female) grunting, "Ha!"
vs_nwizarf1_atk2          F| Mage/Warrior (female) grunting, "Aagh!"
vs_nwizarf1_atk3          F| Mage/Warrior (female) grunting, "Ugh!"
vs_nwizarf1_attk          F| Mage/Warrior (female) "Attack!"
vs_nwizarf1_bat1          F| Mage/Warrior (female) "I will destroy you!"
vs_nwizarf1_bat2          F| Mage/Warrior (female) "Fall before my power!"
vs_nwizarf1_bat3          F| Mage/Warrior (female) "Come to your death!"
vs_nwizarf1_bye           F| Mage/Warrior (female) "I bid you farewell."
vs_nwizarf1_dead          F| Mage/Warrior (female) screaming.
vs_nwizarf1_haha          F| Mage/Warrior (female) "Hoho!"
vs_nwizarf1_heal          F| Mage/Warrior (female) "I am wounded, heal me!"
vs_nwizarf1_help          F| Mage/Warrior (female) "Please someone assist me!"
vs_nwizarf1_hi            F| Mage/Warrior (female) "Well met."
vs_nwizarf1_hit1          F| Mage/Warrior (female) grunting, "Oogh!"
vs_nwizarf1_hit2          F| Mage/Warrior (female) grunting, "Ugh!"
vs_nwizarf1_hit3          F| Mage/Warrior (female) grunting, "Umph!"
vs_nwizarf1_no            F| Mage/Warrior (female) "No."
vs_nwizarf1_say           F| Mage/Warrior (female) "I would have words with you."
vs_nwizarf1_vict          F| Mage/Warrior (female) "Yes! A grand thing!"
vs_nwizarf1_warn          F| Mage/Warrior (female) "Do not press me further. I will not allow it."
vs_nwizarf1_yes           F| Mage/Warrior (female) "Yes."
vs_nwizarm1_050            | Mage/Scholar "Hey?! Whats this? I don't suppose you'd mind terribly
                           |               explaining just how you managed to enter my tower, would you?"
vs_nwizarm1_051            | Mage/Scholar "Please...stop this foolishness. While we rage on
                           |               in battle greater evils go unchecked. Must we
                           |               continue this senseless feud?"
vs_nwizarm1_atk1           | Mage/Scholar grunting, "Huh!"
vs_nwizarm1_atk2           | Mage/Scholar grunting, "Hrrr!"
vs_nwizarm1_atk3           | Mage/Scholar grunting, "Rugh!"
vs_nwizarm1_attk           | Mage/Scholar "Attack thee enemy!"
vs_nwizarm1_bat1           | Mage/Scholar "Such power you have never seen!"
vs_nwizarm1_bat2           | Mage/Scholar "This battle shall not be lost!"
vs_nwizarm1_bat3           | Mage/Scholar "I will not yield, I will not faulter!"
vs_nwizarm1_bye            | Mage/Scholar "Fare thee well."
vs_nwizarm1_dead           | Mage/Scholar screaming.
vs_nwizarm1_haha           | Mage/Scholar "Ohohoho!"
vs_nwizarm1_heal           | Mage/Scholar "I must, be healed!"
vs_nwizarm1_help           | Mage/Scholar "Assist me!"
vs_nwizarm1_hi             | Mage/Scholar "Greetings."
vs_nwizarm1_hit1           | Mage/Scholar grunting, "Uh!"
vs_nwizarm1_hit2           | Mage/Scholar grunting, "Agh!"
vs_nwizarm1_hit3           | Mage/Scholar grunting, "Ugh!"
vs_nwizarm1_no             | Mage/Scholar "No."
vs_nwizarm1_say            | Mage/Scholar "I would have your attention for a moment."
vs_nwizarm1_vict           | Mage/Scholar "By thee ages!" (not sure about this one...)
vs_nwizarm1_warn           | Mage/Scholar "Continue with that and you shall be properly schooled!"
vs_nwizarm1_yes            | Mage/Scholar "Yes."
vs_nwizarm3_050            | Mage/Villian "How in the name of the gods did you get in here?
                           |               Prepare to be destroyed! At you leave!" (not sure about ending)
vs_nwizarm3_051            | Mage/Villian "Please attack no more. I am defeated."
vs_nwizarm3_052            | Mage/Villian "Perhaps I was too rash in attacking
                           |               you. Please, accept my apology."
vs_nwizarm3_053            | Mage/Villian "What do you want now? Don't be rash and attack me again."
vs_nwizarm3_054            | Mage/Villian "Greetings. Have you changed your mind
                           |               about attempting to close the portal?"
vs_nwizarm3_055            | Mage/Villian "Hello again. have you managed to
                           |               kill the imp and close the portal?"
vs_nwizarm3_atk1           | Mage/Villian grunting, "Yuh!"
vs_nwizarm3_atk2           | Mage/Villian grunting, "Yagh!"
vs_nwizarm3_atk3           | Mage/Villian grunting, "Nugh!"
vs_nwizarm3_attk           | Mage/Villian "Blast the enemy!"
vs_nwizarm3_bat1           | Mage/Villian "My power will consume you!"
vs_nwizarm3_bat2           | Mage/Villian "I'll end your pitiful existance!"
vs_nwizarm3_bat3           | Mage/Villian "Fall before the might!"
vs_nwizarm3_bye            | Mage/Villian "Goodbye."
vs_nwizarm3_dead           | Mage/Villian screaming.
vs_nwizarm3_haha           | Mage/Villian "Ah! Haha!"
vs_nwizarm3_heal           | Mage/Villian "I'm gravely wounded. Tend my wounds!"
vs_nwizarm3_help           | Mage/Villian "Help me! Help me here!"
vs_nwizarm3_hi             | Mage/Villian "Hello."
vs_nwizarm3_hit1           | Mage/Villian grunting, "Ugh"
vs_nwizarm3_hit2           | Mage/Villian grunting, "Uh!"
vs_nwizarm3_hit3           | Mage/Villian grunting, "Ooah!"
vs_nwizarm3_no             | Mage/Villian "No."
vs_nwizarm3_say            | Mage/Villian "Perhaps we should have words."
vs_nwizarm3_vict           | Mage/Villian "Spectacular!"
vs_nwizarm3_warn           | Mage/Villian "You are an imbisul to cross me. Step back or pay the price."
vs_nwizarm3_yes            | Mage/Villian "Yes."
vs_nwncomf4_050           F| Warrior (female) "I must go. Please, let me go.
vs_nwncomf4_051           F| Warrior (female) "You...return? Have you found my children? Are they safe?"
vs_nwncomf4_052           F| Warrior (female) "You have heard my sorry tale...is that not enough?"
vs_nwncomf4_053           F| Warrior (female) "Please forgive me but I am in no mood to speak.
                           |                   I'm sure others here will accomodate you."
vs_nwncomf4_054           F| Warrior (female) "I beg you to leave me be. I have nothing to say,
                           |                   and nothing to steal. I assure you."
vs_nwncomf4_055           F| Warrior (female) "Please leave me alone. I do not wish to speak, and
                           |                   I have nothing left to steal. I assure you."
vs_nwncomf4_atk1          F| Warrior (female) grunting, "Yuh!"
vs_nwncomf4_atk2          F| Warrior (female) grunting, "H-yah!"
vs_nwncomf4_atk3          F| Warrior (female) grunting, "Yah!"
vs_nwncomf4_attk          F| Warrior (female) "Get them!"
vs_nwncomf4_bat1          F| Warrior (female) "I am cursed!"
vs_nwncomf4_bat2          F| Warrior (female) "This is an outrage!"
vs_nwncomf4_bat3          F| Warrior (female) "You'll get yours, scum!"
vs_nwncomf4_bye           F| Warrior (female) "Goodbye."
vs_nwncomf4_dead          F| Warrior (female) screaming.
vs_nwncomf4_haha          F| Warrior (female) "Hhhhuhuhu."
vs_nwncomf4_heal          F| Warrior (female) yelling, "I require healing!"
vs_nwncomf4_help          F| Warrior (female) yelling, "Please! Help me!"
vs_nwncomf4_hi            F| Warrior (female) "Hello."
vs_nwncomf4_hit1          F| Warrior (female) grunting, "Uhh!"
vs_nwncomf4_hit2          F| Warrior (female) grunting, "Uh!"
vs_nwncomf4_hit3          F| Warrior (female) grunting, "Ugh!"
vs_nwncomf4_no            F| Warrior (female) "No."
vs_nwncomf4_say           F| Warrior (female) "Speak with me, if you will."
vs_nwncomf4_vict          F| Warrior (female) "Huraah!"
vs_nwncomf4_warn          F| Warrior (female) "You push too far. Leave me! I warn you!"
vs_nwncomf4_yes           F| Warrior (female) "Yes."
vs_nwncomm3_050            | Guard/Warrior (some foreign language, its the best I could make out...)
                           |                "Un nox sa pa por. Par sarenial parsina! Fait la gole."
vs_nwncomm3_051            | Guard/Warrior "You must be careful. I will help you if I can, but if the
                           |                masters see us speaking...they will cut out my tongue!"
vs_nwncomm3_052            | Guard/Warrior "You have returned! Is there something else you wish
                           |                to know about the vault we are bulding? Or the magical
                           |                wards protecting it?"
vs_nwncomm3_atk1           | Guard/Warrior grunting, "Ah!"
vs_nwncomm3_atk2           | Guard/Warrior grunting, "Uh!"
vs_nwncomm3_atk3           | Guard/Warrior grunting, "Ugh!"
vs_nwncomm3_attk           | Guard/Warrior "Fight! Fight!"
vs_nwncomm3_bat1           | Guard/Warrior yelling, "Yyaaah!"
vs_nwncomm3_bat2           | Guard/Warrior yelling, "Huh!"
vs_nwncomm3_bat3           | Guard/Warrior yelling, "Uhh-rrrahh!"
vs_nwncomm3_bye            | Guard/Warrior "Uh huh."
vs_nwncomm3_dead           | Guard/Warrior screaming.
vs_nwncomm3_haha           | Guard/Warrior "Ehehe."
vs_nwncomm3_heal           | Guard/Warrior yelling, "I am...not well...heal me! Please!"
vs_nwncomm3_help           | Guard/Warrior yelling, "Please help me!"
vs_nwncomm3_hi             | Guard/Warrior "Huh?"
vs_nwncomm3_hit1           | Guard/Warrior grunting, "Uh!"
vs_nwncomm3_hit2           | Guard/Warrior grunting, "Ooh!"
vs_nwncomm3_hit3           | Guard/Warrior grunting, "Oh!"
vs_nwncomm3_no             | Guard/Warrior "No."
vs_nwncomm3_say            | Guard/Warrior "Hey, come here."
vs_nwncomm3_vict           | Guard/Warrior "Eeeyyy!"
vs_nwncomm3_warn           | Guard/Warrior "Best not push me any further...I have limits."
vs_nwncomm3_yes            | Guard/Warrior "Yes."
vs_nwncomm4_050            | Nobleman "What!? Who? Ruffians? Please, Get away!"
vs_nwncomm4_051            | Nobleman "No! Please! Whatever you're here for, just take it
                           |           and go! Tell Mistress Afatha I'm sorry I caused her
                           |           distress. I'm sorry!"
vs_nwncomm4_atk1           | Nobleman grunting, "Ahh!"
vs_nwncomm4_atk2           | Nobleman grunting, "Err!"
vs_nwncomm4_atk3           | Nobleman grunting, "Rah!"
vs_nwncomm4_attk           | Nobleman "Charge the foe!"
vs_nwncomm4_bat1           | Nobleman "Hurt me not!"
vs_nwncomm4_bat2           | Nobleman "I'll not fall easily!"
vs_nwncomm4_bat3           | Nobleman "My power is unleashed!"
vs_nwncomm4_bye            | Nobleman "Goodbye."
vs_nwncomm4_dead           | Nobleman screaming.
vs_nwncomm4_haha           | Nobleman "Ahahahaha!"
vs_nwncomm4_heal           | Nobleman "Heal me! Heal me!"
vs_nwncomm4_help           | Nobleman "Aaaaid!"
vs_nwncomm4_hi             | Nobleman "Hello."
vs_nwncomm4_hit1           | Nobleman grunting, "Ruh!" (slightly faster than next)
vs_nwncomm4_hit2           | Nobleman grunting, "Ruh!"
vs_nwncomm4_hit3           | Nobleman grunting, "Ahh!"
vs_nwncomm4_no             | Nobleman "No."
vs_nwncomm4_say            | Nobleman "Please take a moment and talk with me."
vs_nwncomm4_vict           | Nobleman "That is woonderful!"
vs_nwncomm4_warn           | Nobleman "Don't underestimate me."
vs_nwncomm4_yes            | Nobleman "Yes."
vs_nwncomm5_050            | Old man/drunk "I wish ye good luck. Hopefully, you'll
                           |                find what you're searching for."
vs_nwncomm5_051            | Old man/drunk "Leave me be. We have nothing to talk
                           |                about...That's the good stuff!"
vs_nwncomm5_052            | Old man/drunk "Get away from me! Some hero you are! My
                           |                Shao-Drissa lies dead because of ya."
vs_nwncomm5_053            | Old man/drunk "Shao-Drissa is safe and returned. I cannot thank you
                           |                enough. Ye truly are the hero the Lady told me of."
vs_nwncomm5_054            | Old man/drunk "What is the word? Have you found my daughter, is she safe?"
vs_nwncomm5_055            | Old man/drunk "Thank the god's, you've come! While you were gone from
                           |                Port Last, that fiend of a half-orc, Yesgar, kidnapped
                           |                my Shao-Drissa."
vs_nwncomm5_056            | Old man/drunk "Hey! I suppose you're here to sign up, ay? I've no
                           |                time for a new apprentice, however, so...off you go!"
vs_nwncomm5_057            | Old man/drunk "Hey! Something I can do for you.
                           |                Hows your business with the guild?"
vs_nwncomm5_058            | Old man/drunk "'Tis good to see you again. Have you had any
                           |                luck tracking down the bounties?"
vs_nwncomm5_059            | Old man/drunk "Greetings. (hiccup) Your one of the...heroes...Lady Aribeth
                           |                brought along with the other one i talked to. Have you had
                           |                any luck with the bouncers?"
vs_nwncomm5_atk1           | Old man/drunk grunting, "Hgh!" (faster than next)
vs_nwncomm5_atk2           | Old man/drunk grunting, "Hgh!"
vs_nwncomm5_atk3           | Old man/drunk grunting, "Uh!"
vs_nwncomm5_attk           | Old man/drunk yelling, "Get 'em!"
vs_nwncomm5_bat1           | Old man/drunk yelling, "Get away from mee!"
vs_nwncomm5_bat2           | Old man/drunk yelling, "Hah! You want some of this, do you?"
vs_nwncomm5_bat3           | Old man/drunk yelling, "Come on then!"
vs_nwncomm5_bye            | Old man/drunk "Bye."
vs_nwncomm5_dead           | Old man/drunk screaming.
vs_nwncomm5_haha           | Old man/drunk "Mmmhuhuhuha."
vs_nwncomm5_heal           | Old man/drunk "Find a healer! I'm in paain!"
vs_nwncomm5_help           | Old man/drunk "Someone help me...pleeease!"
vs_nwncomm5_hi             | Old man/drunk "(hiccup)...Yes?"
vs_nwncomm5_hit1           | Old man/drunk grunting, "Uh!" (faster than next)
vs_nwncomm5_hit2           | Old man/drunk grunting, "Uh!"
vs_nwncomm5_hit3           | Old man/drunk grunting, "Uugh!"
vs_nwncomm5_no             | Old man/drunk "No...(hiccup)"
vs_nwncomm5_say            | Old man/drunk "Do you...uh...got a moment?"
vs_nwncomm5_vict           | Old man/drunk "That's the good stuff!"
vs_nwncomm5_warn           | Old man/drunk "Mind or say, on your way! Leave me be!" (mind or say? any ideas?)
vs_nwncomm5_yes            | Old man/drunk "Yes."
vs_nxxgrdm1_050            | Warrior yelling, "We're under attack! Protect the Water-d'havian creatures!"
vs_nxxgrdm1_051            | Warrior (snobby) "Sorry recruit. The assembly chamber is reserved for academy
                           |                   students who have completed their training. Lady Aribeth is
                           |                   in there granting blessings to all the graduates."
vs_nxxgrdm1_052            | Warrior (snobby) "Now that you've finished your training, you can go on
                           |                   into the south assembly hall, if you want. Lady Aribeth
                           |                   is still granting blessings to all the academy graduates."
vs_nxxgrdm1_053            | Warrior (snobby) "You are free to enter the tower if you wish. Remember,
                           |                   do not venture beyond the Ambassadorial Quarters."
vs_nxxgrdm1_054            | Warrior (snobby) "Hail and well met. I will need to see you pass
                           |                   if you would be so kind."
vs_nxxgrdm1_atk1           | Warrior grunting. "Uh!" (faster than next)
vs_nxxgrdm1_atk2           | Warrior grunting. "Ugh!"
vs_nxxgrdm1_atk3           | Warrior grunting. "Yah!"
vs_nxxgrdm1_attk           | Warrior "Destroy the enemy!"
vs_nxxgrdm1_bat1           | Warrior "You, cannot win!"
vs_nxxgrdm1_bat2           | Warrior "Feel the fury!"
vs_nxxgrdm1_bat3           | Warrior "Have at me!"
vs_nxxgrdm1_bye            | Warrior "Farewell."
vs_nxxgrdm1_dead           | Warrior grunts.
vs_nxxgrdm1_haha           | Warrior "Hahahahahahaha."
vs_nxxgrdm1_heal           | Warrior "I'm hurt!"
vs_nxxgrdm1_help           | Warrior "I need help here!"
vs_nxxgrdm1_hi             | Warrior "I greet you."
vs_nxxgrdm1_hit1           | Warrior grunting, "Uh!" (slower than next)
vs_nxxgrdm1_hit2           | Warrior grunting, "Ugh!"
vs_nxxgrdm1_hit3           | Warrior grunting, "Yaah!"
vs_nxxgrdm1_no             | Warrior "No."
vs_nxxgrdm1_say            | Warrior "Let us talk."
vs_nxxgrdm1_vict           | Warrior "Ha Za!" (did they steal this from Excalibur? :-P)
vs_nxxgrdm1_warn           | Warrior "Let blades be drawn if you wish. You have been warned."
vs_nxxgrdm1_yes            | Warrior "Yes."
vs_nxxgrdm2_050            | Warrior (accent) "I, under hard foot, greet you. As cheiftan of this tribe,
                           |                   I offer you our hospitality, despite the current tensions
                           |                   between the Uth'guard and the Lord's Alliance.
vs_nxxgrdm2_051            | Warrior (accent) "I, under hard foot, greet you. Your name is vell known among
                           |                   us. For it vas you who stood forth to defend Rorgon at his
                           |                   trial. You bring honor to yourself, and your ancestors!"
vs_nxxgrdm2_052            | Warrior (accent) "You are not welcome among this tribe! You promise to defend
                           |                   Rorgon! Yet, he is dead! You have broken your vow! You have
                           |                   dishonored yourself, and your ancestors!"
vs_nxxgrdm2_053            | Warrior (accent) "You are good person to defend Rorgon. I,
                           |                   under hard foot, greet you with honor."
vs_nxxgrdm2_atk1           | Warrior (accent) grunting. "Nah!" (faster than next)
vs_nxxgrdm2_atk2           | Warrior (accent) grunting. "Nnah!"
vs_nxxgrdm2_atk3           | Warrior (accent) grunting. "Rrrah!"
vs_nxxgrdm2_attk           | Warrior (accent) "Kill zem"
vs_nxxgrdm2_bat1           | Warrior (accent) "Fear my wrath!"
vs_nxxgrdm2_bat2           | Warrior (accent) "You shall be quick to die!"
vs_nxxgrdm2_bat3           | Warrior (accent) "None can stand before me!"
vs_nxxgrdm2_bye            | Warrior (accent) "Farewell."
vs_nxxgrdm2_dead           | Warrior (accent) screaming.
vs_nxxgrdm2_haha           | Warrior (accent) laughing. "Mmmahahaha"
vs_nxxgrdm2_heal           | Warrior (accent) yelling, "I need healing!"
vs_nxxgrdm2_help           | Warrior (accent) yelling, "Assist me!"
vs_nxxgrdm2_hi             | Warrior (accent) "I greet you."
vs_nxxgrdm2_hit1           | Warrior (accent) grunting, "Ahh!"
vs_nxxgrdm2_hit2           | Warrior (accent) grunting, "Muh!"
vs_nxxgrdm2_hit3           | Warrior (accent) grunting, "Ooh!"
vs_nxxgrdm2_no             | Warrior (accent) "No."
vs_nxxgrdm2_say            | Warrior (accent) "Speeak with me"
vs_nxxgrdm2_vict           | Warrior (accent) "Raa-haha!"
vs_nxxgrdm2_warn           | Warrior (accent) "You are filth! Pester me no more!"
vs_nxxgrdm2_yes            | Warrior (accent) "Yes."
vs_nzeliepm_050            | Bug/Mage "I sent him! Drawl! Brother! YOU took everything!
                           |           I will not allow it! Your master will not have everything"
vs_nzeliepm_051            | Bug/Mage "Brother Drawl! You will pay! Vengeance for my eyes, my life.
                           |           If i could see! If I could find! I-I could follow my former life!"
vs_nzeliepm_052            | Bug/Mage "I...cannot see. Where is Chris'tal? Walters? I will not
                           |           follow you. You have nothing of mine to lead me. Lead
                           |           to Drawl and vengeance!"
vs_nzeliepm_053            | Bug/Mage "You! You have something of mine? You know what
                           |           was done? Drawl must pay! Brother Drawl!"
vs_nzeliepm_054            | Bug/Mage "Get awaysss! You leaveess now!"
vs_nzeliepm_055            | Bug/Mage "Haves you the amulet? Did you finds it? Flesh?"
vs_nzeliepm_056            | Bug/Mage "Flesh comesss back! Will listen now?
                           |           Me so needsss amulet! Me does!"
vs_nzeliepm_057            | Bug/Mage "Flesh comes back! What flesh wants? Will listen now!"
vs_nzeliepm_058            | Bug/Mage (frantic) "No hurts! No hurts! Me needsss to speak
                           |                     to the living flesh...needsss to speak!"
vs_nzeliepm_atk1           | Bug/Mage yelling, "H'yah!" (very fast)
vs_nzeliepm_atk2           | Bug/Mage yelling, "Hhh-yah!" (very fast)
vs_nzeliepm_atk3           | Bug/Mage yelling, "Yah!" (very fast)
vs_nzeliepm_attk           | Bug/Mage "Strike at my enemy, Attack!"
vs_nzeliepm_bat1           | Bug/Mage "You will know agony!"
vs_nzeliepm_bat2           | Bug/Mage "Join me in death!"
vs_nzeliepm_bat3           | Bug/Mage yelling, "Uuah!"
vs_nzeliepm_bye            | Bug/Mage "Farewell."
vs_nzeliepm_dead           | Bug/Mage screaming.
vs_nzeliepm_haha           | Bug/Mage laughing evil-ishly.
vs_nzeliepm_heal           | Bug/Mage "I must be repleni-shed! Heeal me!"
vs_nzeliepm_help           | Bug/Mage "Help me! You must! Help me!"
vs_nzeliepm_hi             | Bug/Mage "I welllcome you.
vs_nzeliepm_hit1           | Bug/Mage grunting, "Oooah." (fast)
vs_nzeliepm_hit2           | Bug/Mage grunting, "Uggh!"
vs_nzeliepm_hit3           | Bug/Mage grunting, "Uh!". (fast)
vs_nzeliepm_no             | Bug/Mage "No."
vs_nzeliepm_say            | Bug/Mage "Hear me. You must, hear me."
vs_nzeliepm_vict           | Bug/Mage yelling, "I am pleased."
vs_nzeliepm_warn           | Bug/Mage yelling, "You tempt my vengeance. Be wary!"
vs_nzeliepm_yes            | Bug/Mage "Yesss."
vs_nzorxxm_050             | Orc/Barbarian yelling, "*growl* Why you break into my room? YOU be
                           |                         bounty hunter! (wait) Me end you life HERE!
vs_nzorxxm_051             | Orc/Barbarian "Wait! We stop fighting now, be safe. You,
                           |                brave warrior. Me wants talk moment,
                           |                (voice lowers) before we fights MORE!
vs_nzorxxm_052             | Orc/Barbarian "Hpmm, you, strong opponent. *breathes* Me
                           |                impressed. Me say *breathes* Name is ZOR!
                           |                Me tell you story, ya? (voice lowers) You
                           |                spreads my word...maybe before *breathes*
                           |                you kill me."
vs_nzorxxm_atk1            | Orc/Barbarian roaring, and a sword type slashing sound.
vs_nzorxxm_atk2            | Orc/Barbarian roaring, and a fast sword-type slashing sound.
vs_nzorxxm_atk3            | Orc/Barbarian roaring, and a slow sword-type slashing sound.
vs_nzorxxm_attk            | Orc/Barbarian yelling, "Attacks them you do!"
vs_nzorxxm_bat1            | Orc/Barbarian roaring, turns into a more dragon-like roar.
vs_nzorxxm_bat2            | Orc/Barbarian yelling, "Garr, you, down!" (Garr? Any other ideas?)
vs_nzorxxm_bye             | Orc/Barbarian yelling, "Fare good." Good sounds like 'goo-d'.
vs_nzorxxm_dead            | Orc/Barbarian roaring, almost like a dragon.
vs_nzorxxm_haha            | Orc/Barbarian laughing cheerfully.
vs_nzorxxm_heal            | Orc/Barbarian growling, then, "Healing of me! Do it!"
vs_nzorxxm_help            | Orc/Barbarian yelling, "Helping here!"
vs_nzorxxm_hi              | Orc/Barbarian growling, then, "Greet you."
vs_nzorxxm_hit1            | Orc/Barbarian grunting, with a dragon-like breath.
vs_nzorxxm_hit2            | Orc/Barbarian grunting, with a dragon-like growl.
vs_nzorxxm_hit3            | Orc/Barbarian yelling, with a dragon-like roar.
vs_nzorxxm_no              | Orc/Barbarian grunting, with a dragon-like growl.
vs_nzorxxm_say             | Orc/Barbarian yelling, "You, come here to speak!"
vs_nzorxxm_vict            | Orc/Barbarian warcry, with a dragon-like roar.
vs_nzorxxm_warn            | Orc/Barbarian yelling, "You careful, or you die!"
vs_nzorxxm_yes             | Orc/Barbarian yelling, "Yes!"
whinny                     | Horse whining.



[ 10. Think outside the box. ]

You do not need to use a city tileset to make a city area. During Beta Toolset days, many of
us found ways to get around the 2 tileset limitation. We made city rooms using the crpyt walls
as our house walls, and it worked very well. Lighting is also very important to change the
feeling of the area. I saw a crypt tileset screenshot (during Beta) that was an outdoor swamp
setting. Needless to say, it was VERY nice.

-Try to use different tilesets to create different effects.
-Use lighting to create a whole new feeling.



[ 11. Hak Pak Editing and Custom Content. ]

--- i. About Hak Paks. ---

HakPaks are basically zips with a fancy name. Hakpaks are the keys to unlock the shiny gates which
we call custom content. As of right now, it is hard to do, and many people have very large hakpaks.
Hopefully I can explain them to you, and set you off on your own custom content adventures.

To play a module that uses a hakpak, whether it be online or offline, you will need that exact
hakpak (same name, as well) in your /hak subfolder of your /nwn folder. Without it, you simply
cannot join that server, or start that module.




---ii. HakPak FAQ. ---

This section is pretty self-explanatory. I've tried to include all the common questions about hakpaks.
If you feel anything should be added to this section, email/im/pm me. Please read the top of this guide
for information and rules on contacting me.

FAQ Contents: (in order they appear)

-Why are they called HakPaks?
-What is the difference between hakpaks and the /override directory?
-What are the risks of HakPak content?
-Can you change ___________ with hakpaks?





Question: Why are they called HAK paks?
Answer: I don't know if they have any super secret meaning of the abbreviation
        hak, but that doesn't really matter. They are not in any way considered
        HACKING the game, it is just what Bioware decided to name them.

        Basically (as said above) HakPaks are just zips with fancy names that can
        be read by the Neverwinter Nights engine to add or customize game content.


Question: What is the difference between hakpaks and the /override directory?
Answer: To my understanding, whatever you override in the /override directory of your /nwn folder will
        permanently affect the game. If you have overridden a file and also have another version of it
        in a module utilizing a hakpak, the game will disregard the override directory and use the hakpak
        associated with that module instead.


Question: What are the risks of HakPak content?
Answer: The only "true" risk of hakpak content is corrupting your dialog.tlk file.
        Always have a backup unedited copy of this file...just in case.


Question: How much can you fit into one hakpak?
Answer: As much as you can stand to cram into it, and as much as your players feel like downloading.
        Remember, a zipped hakpak reduces in size ALOT and can potentially reduce the original
        size to 1/4 its size.


Question: Can you change ________ with hakpaks?
Answer(s): Here's what CAN and CAN'T be done with hakpaks. (in no particular order :-P)
           Some things are HARD to do and others are very simple.
           Anything that says "change" means both adding to or editing existing material.
           (Consider the Generel Section as MISC as well, and yes, I know that defeats
            the purpose of calling it the "General" section...)

EVENTUALLY I HOPE TO EXPLAIN THE PROCESS(ES) IN CHANGING ALL OF THESE THINGS.
 _________________________________________________________________________
|Changes                         |Can be done?   |Difficulty              |
|--------------------------------|---------------|------------------------|
| Tilesets                       |               |                        |
| -Brand New Tilsets             | YES           | VERY HARD              |
| -Retexture (existing) Tilesets | YES           | Easy-Medium            |
| -Change (existing) Tilesets    | YES           | Medium-Hard            |
| -Change loading screens        | YES           | Easy-Medium            |
| -Change Walkmeshes             | YES           | Hard-VERY HARD         |
|                                |               |                        |
| Portraits                      |               |                        |
| -Add New Portraits             | YES           | Easy                   |
| -Edit (existing) Portraits     | YES           | Easy                   |
|                                |               |                        |
| Creatures                      |               |                        |
| -Add New Creatures             | NO            | Cannot be done.        |
| -Edit (existing) Creatures     | YES           | Medium-Hard            |
| -Retexture (existing) Creatures| YES           | Medium-Hard            |
| -Edit/Create Creature Animation| NO            | Cannot be done.        |
|                                |               |                        |
| Placeables/Models              |               |                        |
| -Add New Placeables/Models     | YES           | Medium                 |
| -Edit (existing) models        | YES           | Medium-Hard            |
| -Edit (existing) placeables    | YES           | Easy-Medium            |
| -Change Activation Sounds      | YES           | Easy                   |
|                                |               |                        |
| General                        |               |                        |
| -Change Combat Mechanics       | NO            | Cannot be done.        |
| -Change Game Mechanics         | NO            | Cannot be done.        |
| -Change Game Messages          | YES           | Easy                   |
| -Create/Change Ailment Icons   | YES           | Easy                   |
| -Create New Status Ailments    | YES           | Medium-Hard            |
| -Change Difficulty Differences | YES           | Medium-Hard            |
| -Create/Edit Creature Speeds   | YES           | Easy                   |
| -Create/Edit Mouse Pointers    | YES           | Easy                   |
| -Change EXP/Lvl Gains          | YES           | Easy-Medium            |
| -Change Swear Filter           | YES           | Easy                   |
| -Create New Traps              | YES           | Medium-Hard            |
| -Edit (existing) Traps         | YES           | Medium                 |
| -Change Loading Hints          | YES           | Easy                   |
|                                |               |                        |
| PCs/NPCs                       |               |                        |
| -Add a New Class               | YES           | Medium-Hard            |
| -Disable (existing) classes    | YES           | Easy                   |
| -Add a New Race                | YES           | Medium-Hard            |
| -Change Racial Bonuses         | YES           | Easy-Medium            |
| -Add New Feats                 | YES           | Easy-Medium            |
| -Change Reputation Changes     | YES           | Easy                   |
| -Add New Factions              | YES           | Medium                 |
| -Edit Factions                 | YES           | Medium                 |
| -Change Resting Time Values    | YES           | Easy                   |
| -Add New Skills                | YES           | Medium                 |
| -Change (existing) Skills      | YES           | Medium                 |
| -Add New Spells                | YES           | VERY HARD              |
| -Edit (existing) Spells        | YES           | VERY HARD              |
| -Add New Spell Schools         | YES           | Medium                 |
|                                |               |                        |
| Sounds                         |               |                        |
| -Add Placeable Sounds          | YES           | Easy                   |
| -Change Inventory Sounds       | YES           | Easy                   |
| -Change Ambient Music          | YES           | Easy-Medium            |
| -Change Ambient Sound          | YES           | Easy-Medium            |
| -Change Footstep Sounds        | YES           | Easy                   |
| -Change Weapon Sounds          | YES           | Easy                   |
| -Change Spell Sounds           | YES           | Easy                   |
|                                |               |                        |
| Items                          |               |                        |
| -Create Weapons                | YES           | Medium-Hard            |
| -Edit (existing) Weapons       | YES           | Easy-Medium            |
| -Create Items                  | YES           | Medium                 |
| -Create/Edit Inventory Icons   | YES           | Medium                 |
|                                |               |                        |
| Toolset                        |               |                        |
| -Change Filters                | YES           | Easy                   |
| -Change Environment Settings   | YES           | Medium                 |
| -Change Waypoint Look          | YES           | Medium                 |
| -Add Waypoints                 | YES           | Easy-Medium            |
| -Add Custom Tabs               | YES           | Easy                   |
|_________________________________________________________________________|


Question: Can you combine hakpaks?
Answer: YES, there is a program that does this. No, I do not know what it is
        called. However, I would be willing to bet its located for download at:
        http://nwvault.ign.com



Question: Are hakpaks automatically downloaded by clients?
Answer: Not really...There IS a program called HakPak Updater (by Revinor) which
        will identify any files that the client does not have and download them,
        but it is somewhat tricky (in my experience). Find it at:
        http://nwvault.ign.com



Question: I have the hakpak, but the module won't run?
Answer: There are a couple of problems that may manifest themselves here. You either:
        (a) Have the hakpak, but with a different name than the module is looking for.
            To fix this open the module in the toolset, and look for the hakpak name
            its looking for.
        (b) Have not placed the hak pak into your /hak directory.
        Thats all I can really tell you.



Question: My hakpak is HUGE! How can I make it smaller for download/upload?
Answer: Programs like WinZip, WinRar, WinAce(this is a program right?), and any compression utility
        will GREATLY reduce the size of a hakpak. An example I was given was a 400 MB hakpak
        was reduced to 138 MB. I do not know what program my friend used to do so, but I believe
        it is highly possible. The same compression reduction goes for modules as well, so a
        30 MB module could potentially be reduced to something as small as 5 MB.



***********************************************************************
Some Tools you will need/may want:

General (download ALL of these, you WILL need them):

NWN Viewer by Zoligato
Found at: http://nwvault.ign.com/Files/other/data/1026158289673.shtml
Used to: View/preview/edit all filetypes hakpaks may contain.

TlkEdit by Nerwen
Found at: http://nwvault.ign.com/Files/other/data/1026158289672.shtml
Used to: Edit dialog.tlk

nwhak by Bioware
Found at: the /utils subfolder of your /nwn folder
(it is installed with NWN, everyone has it)
Used to: Create hakpaks! Duh!


Tileset Creation:

NWN Tileset Duplicator by Labtek
Found at: http://www.hypedcubed.com/games/nwn/ (mid-bottom of page)
Used to: Duplicate and retexture tilesets.

Wokman by Hlublocky
Found at: ?
Used to: Edit walkmesh nodes on .mdl files and export .wok files
         (will also need file mdl2ascii.exe found below)

mdl2ascii.exe by Revinor (this program is part of c-tools package)
Found at: ?
Used to: Convert .mdl files to ascii format .mdl files to view aabb trees.
         (custom tilesets only, not retextures)


Modeling:

GMAX by Discreet Software (FREEWARE!!!)
Found at: http://www.discreet.com
Used to: Create tileset, monster, placeable, item, and etc .mdl files.
         (will also need gmax to .mdl converter below)

".gmax -> .mdl coverter" by Wayland
Found at: http://nwvault.ign.com/Files/other/data/1029721132840.shtml
Used to: Plugin to GMAX to convert .gmax files to useable .mdl files.


Misc:

Any graphic editor that can save/view/edit .tga files.
Found at: http://www.download.com
Recommended: Photoshop, InfranView (freeware)
Used to: Create/edit character/monster portraits, texture files
         for tilesets/armor/weapons/etc, img map placeable.
         (FIND ONE, chances are you'll need it)

Any video editor that can save .bik files.
Found at: http://www.radgametools.com/bnkdown.htm
Recommended: Bink! (Freeware)
Used to: Creating opening/closing movie sequences in .bik format.

***********************************************************************



NOTE: Parts of this guide to HakPaks I intended for people who have some knowledge of computers,
graphics, and other things. There's no way I can teach anyone how to use programs like GMax, Photoshop,
and things like that. So be warned. I have tried to make things as easy to understand as possible.

MAJOR NOTE: BACKUP dialog.tlk, it is the only file that poses potiential risks by being overridden.



--- A. Custom Character/Monster Portraits. ---

You will need: NWN Viewer, TlkEdit, Any .tga Editor

All portraits have 5 files that are different based on size, seeing as how in different windows portraits are smaller/larger. To view/edit/save these files you will need a .tga (Truevision Image) viewer. Photoshop works,
but if you can't afford it there is a freeware program called InfranView. (found at download.com)

ALL portrait filenames follow this uniform.

(picturename is all you can change, keep the uniform, and make sure size is exactly what is noted)

po_picturename_h   = 256x512
po_picturename_l   = 128x256
po_picturename_m   = 64x128
po_picturename_s   = 32x64
po_picturename_t   = 16x32


1. Edit your .tga files to fit the size and name uniform.

2. Use NWN Viewer and extract portraits.2da.

3. Open portraits.2da (notepad works, on my machine) and add a new entry to the bottom:


The order is:

#          BaseResRef    Sex   Race   InanimateType   Plot   LowGore   

Example:

565        Rakshasa_f_   4     20     ****            0      ****


----------------What the tabs do:--------------------------

#: The next number in the series, never use an existing one.

BaseResRef: The name of your files without po_ or the _h/l/m/s/t ending.
            Example: 'po_pic1_h' would be 'pic1' instead.

Sex: For filter purposes obviously.
     0 = Male
     1 = Female
     4 = None
     (anyone know if 2 or 3 do anything?)

Race: For filter purposes, based on racialtypes.2da information.
      Place the number of the desired filter type here.

0       Dwarf
1       Elf
2       Gnome
3       Halfling
4       HalfElf
5       HalfOrc
6       Human
7       Aberration
8       Animal
9       Beast
10      Construct
11      Dragon
12      Humanoid_Goblinoid
13      Humanoid_Monstrous
14      Humanoid_Orc
15      Humanoid_Reptillian
16      Elemental
17      Fey
18      Giant
19      Magical_Beast
20      Outsider
21      DELETED
22      DELETED
23      Shapechanger
24      Undead
25      Vermin
26      DELETED
27      DELETED

InanimateType: Leave as **** I'm unsure of its uses, but am open to information.

Plot: For filter purposes. I believe 0 denotes it IS a plot
      portrait, and **** is by default NOT a plot.

LowGore: I believe this has something to do with the violence setting, and if it
         is lowered to a certain degree, some pictures use less violent/gory photos.
         Place the BaseResRef (filename without po_ and _x) of the picture here.
         Example: 'po_pic1_h' would be 'pic1' instead.
------------------------------------------------------------

4) Place portraits.2da and all the picture files in a hakpak.



--- B. Custom Ambient Music Files. ---

You will need: NWN Viewer, TlkEdit, Any sound recorder (for making your own sounds, not required)

Alright this is pretty cool. The NWN engine runs .bmu files instead of MP3's or wavs, but
you can rename any mp3 file to bmu and later import it with no problem.

1. Use NWN Viewer and open the Neverwinter Nights BIF file, extract ambientmusic.2da to the folder of your choice.

2. Use TlkEdit to open dialog.tlk (/nwn folder) and create a NEW Id for your music file.
   ALWAYS CREATE A NEW NUMBER, NEVER EDIT AN EXISTING ONE UNLESS YOU KNOW WHAT YOU ARE DOING.
   The "Text" box is what the Area Properties will look at as the name. So don't put the actual
   filename unless you want to see musicX.bmu as your music name.

3. Open the extracted ambientmusic.2da (notepad works, on my machine) and add to the bottom.

The order is:

Music #    TLK Id        Filename         Stinger 1         Stinger 2   Stinger 3

Example:

56         67545         mus_tavern4        ****               ****       ****  


Always create the next music #, and make sure your tlk id's are the same, and
correctly linked to the ID's you have added in dialog.tlk.

I DO NOT know what the stinger tabs do, but the only default ones used are for battle music.
If someone could tell me what they do, it'd be appreciated.


4. Place the edited ambientmusic.2da into a hak file and place it into your /hak directory.

5. Rename (if not done so already) all your MP3's that you want to go into the module
   to .bmu file extensions and place them in your /music subdirectory of your /NWN directory.

6. Add the hakpak to your module and the Area Ambient Music Day/Night will now show the files you added.


To create custom ambient sounds (different than music):

(almost the same, but replace these 3 parts of the above  instructions)

1) Practically the exact same process, but instead edit ambientsound.2da.
5) File types must be named .wav instead of .bmu this time.
5) You will also need to place the files into the /ambient folder, instead of /music.

Like before with the Stinger tabs, I do not know what the
PresentInstance1-9 tabs do. Bioware doesn't even make use of them!



--- C. Custom Sound Files. ---

You will need: Any sound recording utility (only if you are making your OWN sounds).

This is actually REALLY simple, if not the simplest of all custom content.
Just place a wav file in your hak pak and it will show up on the placeable sound list.

For easy viewing chose view Hak Pak Resources Only, instead of viewing
all the 7568 bioware sound files as well.



--- D. Custom Tilesets. ---

You will need: NWN Tileset Duplicator, TGA viewer/editor, mdl2ascii.exe and Wokman

For the complete and definitive guide on duplicating, retexturing, and creating tilesets.
Please visit Labtek's site located at:

http://www.hypedcubed.com/games/nwn/

One problem you may run into with his Tileset Duplicator .exe file(s) is that the computer won't
recognize the required system .dll's have already been installed after you update them with the
full version. If this happens, try downloading the .exe only version and installing.


In the next version I'll try to make a tutorial about editing walkmeshes, creating new models, and etc.



--- E. Custom Creatures/NPCs. ---

Reskinning a Balor (can be applied to any creature though):
You will need: NWN Viewer, mdl2ascii.exe, Any TGA Editor

1. Open NWN Viewer and select the Neverwinter Nights bif.

2. Go to models_01.bif (contains most creature mdls, 02 has pc mdls) and extract the model of you choice.
   For intensive purposes I'm using a Balor for an example. The balor file is c_demon. Extract it to the
   folder of your  choice.

3. Go to textures_01.bif and extract the tga file c_demon (the balor's texture file).
   To also modify the flame animation on the balor, extract fxpa_flame00.tga.

4. Go to 2da.bif and extract appearance.2da

TO BE INCLUDED IN NEXT VERSION OF GUIDE



--- F. Custom Image Maps. ---

You will need: mdl2ascii.exe

I must say, this is really cool. You can make world maps PCs can walk around on (like Chrono Chross, not 3D ones),   This section is all thanks to a member of the NWN community named
Zaddix, so all thanks and praise must go to him.

First off, I'm just copying Zaddix's mdl and pwk file. I DO NOT know how to change the way he set
it to display 12 pictures in a 1024x768 total frame. The way the pictures fit together are:

1  2  3  4
5  6  7  8
9 10 11 12

Each picture by itself is 256x256.



--- G. Custom Classes. ---

You will need: TLK Edit, NWN Viewer.

TO BE INCLUDED IN NEXT VERSION OF GUIDE.


--- H. Custom Items. ---

Weapons:

As in weapons, etc. This is quite a doozie. First let me try to explain why.
As you probably already know, the toolset creates weapons with a top, a middle and a bottom.
To you the adventurous builder, this means you need 3 seperate .mdl files.

-TO BE INCLUDED IN NEXT VERSION OF GUIDE-



Armor:

-Rextexturing an Armor-
You will need: NWN Viewer, Tlk Edit, mdl to ascii.

1. Open Neverwinter Nights Bif in NWN Viewer. Goto models_02.bif

2. Export all model files for the part you want to add. There are 24 models total for once armor.
   The name uniform is like this: p(gender)(race)_chestxxx.mdl. See below.

   p(f/m)(a/d/e/g/h/o)(0/2)_chestxxx.mdl

3. Open textures_02.bif and export the 2 inventory plts ipf_chestxxx.plt and ipm_chestxxx.plt 
   export the 2 texture plts p(f/m)h0_chestxxx.plt

4. Open 2da.bif and export parts_chest.2da

5. Open parts_chest.2da (notepad works) and add a new line to the bottom. Lines look like:

ID    COST MODIFIER     AC BONUS
53         0              8.00

These should be self explanatory so I'm not gonna explain the tabs. The only tab I am unsure
of is cost modifier. I don't know if it multiplies or adds or what, all bioware default files
are set to 0, so I would advise you leave it at that.

Remember to ALWAYS use the next number in the file, in parts_chest.2da the next id would be 54.

6. Rename all you mdl and texture files to point to the number you placed in parts_chest.2da.
   (Remeber its a 3 digit number so if you are using a number below 100, use a 0 in front of it)

7. Now get mdl2ascii.exe and change the .mdl files into viewable ascii.
   To convert a .mdl file simply run mdl2ascii through dos, and use this:
   
   mdl2ascii [input file]

   A new file will be created in the same folder as the .mdl file.
   That file can now be opened in wordpad, without all the jibberish.

8. Open them and edit the lines that say the old ID number.
   (several instances in every file, I suggest using find to get them all)
   Change them to the new ID number you used.

9. Put _ALL_ the files into your hakpak and add it to your module!



Inventory:

To edit inventory pictures, open textures_01.bif, or textures_02.bif.

ALL of the graphics are located here.

They are also all labeled with an 'i' in front of them,
which I believe denotes that they are inventory graphics.



--- I. Custom Placeables. ---

You will need: NWN Viewer, TlkEdit. (GMAX and the .mdl converter if you make your own).


1. Use NWN Viewer to extract placeables.2da in the folder of your choice.

2. Use TlkEdit to create a new ID for the placeable. Use a new id number, NEVER an existing one.
   The text field will be the name that appears in the toolset.

3. Open the extracted placeables.2da (notepad works, on my machine) and add to the bottom.

Just follow suit on the organization of the .2da file. For further customization read what each tab does:
(sorry but the text line is too long to put into the guide as an example.)

----------------------------What the tabs do:--------------------------------

The first column is not labeled but it is the number listing. When adding
to placeables.2da just add the next number to the bottom.

Label: The default tag used when placed in the toolset.

StrRef: The number of the ID you created in dialog.tlk (step 2)

ModelName: The filename of .mdl used. This does not include the .mdl extenstion.
           Example: PLC_A01.mdl should be PLC_A01 instead.

LightColor: I'll work on a listing of colors. For right now leave this
            is **** unless you know what colors are what.

LightOffsetX: The point in the X dimension where light is offset.
              If you do not know what this means, do not worry.

LightOffsetY: The point in the Y dimension where light is offset.
              If you do not know what this means, do not worry.

LightOffsetZ: The point in the Z dimension where light is offset.
              If you do not know what this means, do not worry.

SoundAppType: The sound that is played when picked up or activated.

ShadowSize: The size of the placeable's shadow. Leave as 1.

BodyBag: What type of bag the item uses. (I recommend not using this)

LowGore: The .mdl that is instead used when the game settings violence slider is on Low Gore.

---------------------------------------------------------------------------------

4. Once you are done editing it, place placeables.2da,
   your .mdl and .tga files into a HakPak.

The appearance will be available in the appearances list of placeable objects.
(You can also use spell models as placeable objects for some neat effects)





**********************************************
                  THE END!
             Thanks for reading!

                   i'm just a sample of a soul
made to look just like a human being
**********************************************

Disclaimer: written by Tolerance0, sourced from http://www.gamefaqs.com/pc/188666-neverwinter-nights/faqs/22932

 

First Release: 
  • up
    100%
  • down
    0%
jefita13

Like this guide very much.  I love the scripts listed to help you how it explains what the script does and gives you a list of some of the things you'd like to do in your mod.  I still haven't finished reading it, but I spent a lot of time putting it into a word file that is easier on my eyes, then fixing it so that it wasn't jumbled from the copy paste. 

I'd love to read any of the updates as well.  Thank you!!!  cheeky

  • up
    50%
  • down
    50%
Werelynx

At the very bottom there is txt file :)

  • up
    50%
  • down
    50%