Main Page
From Nocturnal.insomniacgames.com
Nocturnal Initiative
Contents |
News
To check out the latest news regarding Nocturnal Initiative, go to the News page
Mission
Our goal is to facilitate and participate in the development of an open collection of libraries and utilities for addressing common challenges in game development.
Nocturnal Initiative is not a game engine. The libraries provided here are potentially very useful for developing a game engine, but we want to avoid the 'all things to all people' that so often results in overly complex and/or under-performing monolithic engines. Instead, we want to provide a useful toolbox for the professional game developer.
There are a lot of common problems that are presented during game development. These problems are often solved separately at game studios across the industry. Sometimes the same people end up writing the same solution at several companies throughout their career. This is a waste of resources that can be avoided by openly sharing useful foundation code and techniques across company boundaries. We feel that this kind of sharing will allow studios to focus more on what sets their games apart and less on the basic building blocks necessary to create a modern game. It is our hope that this will result in studios making better games in less time, and hence benefit the industry as a whole.
Community
Join our mailing lists:
Announcements - For people interested in receiving Nocturnal Initiative announcements.
User Discussion - For people who are using Nocturnal Initiative.
Developers Discussion - For people interested in contributing to Nocturnal Initiative.
Insomniac Community - For people interested in joining the Insomniac community for updates on our games.
Features
The big ticket features provided by the Nocturnal Initiative include (but are by no means limited to):
- Handy Code Snippets
- C++ Delegate/Event System
- Pointer to reference counted objects
- Pointer to heap allocated arrays
- Endian conversion code
- Insertion ordered std::set
- Reversible key and value std::map
- Interprocess Communication
- Fast non-blocking message-based design
- Works over BSD-style sockets (TCP) or Named Pipes
- Windows platform included, additional platforms are easily added
- Debugging Helpers
- PDB-based symbol information querying
- Capture stacks within your program making heap object tracking and leak debugging easier
- Give your application automatic crash reports dispatched via email that contain handy user/machine informaton, call stack, and memory page allocation stats
- Console Output Manager
- Log console output to one or more trace files
- Color code the console output based on Error/Warning/Debug print statements
- Throttle output verbosity (configured via command line arg or environment variable)
- Outline nested stages of processing performed by your application (for builders/exporters)
- Augment crash reports with the current outline state of your application (very useful for tracking down new crash bugs)
- Instrumenting Profiler
- Cross platform (Windows and PS3 currently)
- Macro-instrumented stack timer based profiler
- Concise profile report printed out at program exit
- Logs instance data out to human readable log file (Profile Analyzer is in development)
- Perforce Wrapper
- We use perforce for both code and data here at Insomniac
- This wrapper wraps the string-command based P4API with a more structured API
These features are building blocks for future releases. Imminent (post-GDC) features will include:
- C++ Reflection
- Instrument your application classes and register them with the type registry
- Can serialize object instances to XML or our (faster) custom binary format
- Flexible parsing mechanics allow you to read in old versions of your class
- Handles renaming member variables as well as changing member type (within reasonable limits)
- Supports serializing std::vector, std::set, and std::map containers with primitives or pointers to other reflect objects
- Supports serializing enum and bitfield members using string representation (supports reordering enum elements)
- Provides for automatic object comparison and cloning
- Implements introspection using a visitor interface
Licensing
Insomniac Open License (IOL)
- Full source available
- BSD-style, use the code for whatever you want, no strings attached
Downloads
Each individual package has its own download section, but if you are just interested in grabbing the files, the Downloads page is for you.
Dependencies
Some Nocturnal Initiative packages rely on external libraries. The following libraries may be required but are also generally useful and recommended:
- Boost
- http://www.boost.org/
- You can get a built distribution from http://www.boost-consulting.com/products/free
- P4API
- http://www.perforce.com/
- Libraries to link against are at ftp://ftp.perforce.com/perforce/r07.3/bin.ntx86 (you may need to upgrade your server version to use these)
- Use the libraries in p4api_vs2005_dyn.zip for Release and p4api_vs2005_dyn_vsdebug.zip for Debug
- Make sure to use recent versions of these libraries. Older versions had serious performance issues.
- DbgHelp
- http://www.microsoft.com/whdc/devtools/debugging/default.mspx
- Included with Debugging Utilites for Windows, these libs work better than the version included with Windows XP
- You must package the DLLs (dbg*.dll) with the tools using our modules due to Windows' DLL search order
- wxWidgets
Packages
These are the currently available Nocturnal Initiative packages. Be sure to check the Road Map for a preview of upcoming additions.
- Scripts - Perl and shell scripts which are useful for development
- EShell - An 'Environment Shell' which makes working in different configurations easier
- Core - Basic support libraries for workstation and console platforms. This module can contain platform-specific libraries, but only for supporting the main line cross-platform modules.
- Common - Basic headers that provide simple features
- Windows - A support library of windows-specific convenience functionality
- Console - A color coded, verbosity throttled, remotable, outlining console printing library
- Platform - A platform abstraction layer for threading, mutex, etc...
- Profile - A basic broad-phase performance and memory profiler
- IPC - Asynchronous message-based interprocess communcation via TCP or Named Pipe
- Application - Basic services for applications running on a windows development workstation (revision control, file system, automated initialize/cleanup, and startup/shutdown integration)
Planning
- Road Map to future releases
Contact
Questions? Comments? Bug reports? Visit the Contact page.
Submitting Changes
Please read the Submitting Changes page for information about how to submit changes for the Nocturnal Initiative.
