An independent private server project aimed to reimagine a wizard adventure, written entirely in C#.
The "Imlight" project began as a learning exercise to explore the mechanics and architecture of MMORPG server design. We have the utmost respect for the original developers and have taken steps to ensure our project does not infringe on their intellectual property.
That being said, Imlight has a BYOD (bring-your-own-data) philosophy and does not distribute any copyrighted game files. Users must obtain the original client and any necessary assets independently.
Imlight is a framework for building a private server. Do not expect a full game experience OOTB.
The game client does not ship with all of the data required to run a true server, and thus some of it must be recollected manually. You can find the data we've managed to collect in the spiraldb repository.
If you care to contribute to the data recollection effort, you may use Imview. Imview is Imlight's one-stop tool for managing Imlight, as well as data recollection.
- Character management
- Moving through the world *
- Zone objects
- Mobs
- Inventory and equipment
- Multiplayer
- Chat
- Friends
- Shops *
- Dye Shop
- Mounts
- Multi-person Mounts
- Spell Training *
- Most parts of combat
- Reagents
- Minigames
- Creating spell decks
- Dungeons (exist, but entrance sigils are not yet implemented)
- Cantrips
- In-game commands
- Potions
- NPC interactions
- Bazaar
- Realms
- Pets (partial)
- Pet minigames
- Crafting
- Housing
- Quests *
- Drop tables *
- Engine is fully implemented. However, actual content depends on SpiralDB data, which may not be available in all places.
The only true requirement is the patch server. The rest of the components are optional, but are recommended.
You may use our open source option, Aurorium, to host one yourself. Both Imlight and your game client may be pointed to an Aurorium instance to serve game patches and data.
Aurorium's first boot will take time.
Imlight uses RavenDB for player-generated data such as accounts, characters, chat logs, and friendships. If you do not provide a remote URL in the configuration, Imlight will spool up an embedded instance. If you do provide one, a certificate path must be provided as well.
World data — NPC inventories, zone transfers, quest templates, drop tables, and other static content the game client does not ship with — is served by SpiralDB. On boot, Imlight fetches the latest data from the spiraldb GitHub repository (or uses a local cache) and loads it directly into memory. No RavenDB instance is needed for world data.
You may control the SpiralDB behaviors in the configuration file, such as changing the remote and cache paths, and whether to fetch the latest data on boot.
Imlight's configuration is stored in Imlight.ini. It is recommended to review the configuration file and adjust it to your needs before booting the server. Additionally, an admin account is always created and the details for this account can be found in the configuration file as well. You should change these details before booting the server.
You can start the game client with a launch argument to connect to your server. -L 127.0.0.1 12000 will work fine.
Imcodec is imported as a submodule and provides tooling required by Imlight for handling proprietary game data.
Imcodec relies on compile-time source generation to produce C# classes from game data definitions.
- Obtain a type dump JSON file using wiztype. This file should be saved in
/submodule/Imcodec/src/Imcodec.ObjectProperty/GeneratorInput/ - Unpack the root archive using Imcodec itself (via
imcodec wad unpack). Inside, locate the message definition files which can be matched with a wildcard of*Messages*.xml. Place these files in:/submodule/Imcodec/src/Imcodec.MessageLayer/GeneratorInput/
- The Kronos teams' Grimoire.
- Our Documentation book.
Contributions are welcome from anyone.
For Semver purposes, we ask that all commits abide by conventions.
