=================================== 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 _________________________________________________________________________________________________ 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 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 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 . 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 “”’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 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 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 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_ 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 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 [show it] (Appears When: gzcc_bountyh_02) | | +(BH): Ah, a valid writ. So you want the removal of ? | | +(PC): Yes, . | | +(BH): My price for the job is , 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(""); } } 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_ 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 **********************************************