Shadow Door

Neverwinter Nights NPC Control Interface

Copyright 2003 by Phillip Saltzman and Robert Zubek, Northwestern University

Module for the NWN Extender (NWNX), copyright 2003 by Ingmar Stieger

Licensed under the GNU General Public License



Shadow Door is an agent control interface for the game Neverwinter Nights - it lets external processes control NPCs in the game. Using Shadow Door, developers can write external AI programs, using arbitrary languages and arbitrary platforms, to play the game with human players.

Shadow Door distribution consists of:

  1. A server extension DLL that communicates with external processes through a TCP socket
  2. A set of NPC scripts that receive commands from the external process, perform them, and send back observations
  3. Sample Lisp API to connect to the game and control an agent


System Requirements and Licensing

Shadow Door has been tested under Windows 2000 and XP, and it should also work on Windows 98. It incurs almost no performance overhead, so any system capable of running Neverwinter Nights should be sufficient.

The program is a module for Ingmar Stieger's excellent NWN Extender, and is released under the terms of the GNU General Public License - see the license file for details.



To run Shadow Door, you need Neverwinter Nights (obviously ;), and the NWN Extender (NWNX). Please download and install NWNX 2.5 before proceeding.

To install Shadow Door, unpack the distribution into your Neverwinter Nights directory (e.g., C:\Program Files\Neverwinter Nights). This will produce the following files and folders:

  1. nwnx_sd.dll - the server extension
  2. erf\shadowdoor.erf - a library of NWScript functions for use in your module
  3. modules\Shadow Door Sample Module.mod - a sample module to demonstrate Shadow Door functionality
  4. Shadow Door\C Sources - the complete Visual C++ 7 sources for the library
  5. Shadow Door\LISP Sources - Common Lisp API and example program
  6. Shadow Door\*.html; *.txt - documentation files



System usage and implementation is described further in the following documents - please feel free to pick your favorite path through them: