Dark Ages Automation Tool + Updater
- Dark Ages Client 7.41 (current latest)
- .NET 7.0 Runtime
- Windows arm64 - Download Link
- Windows x64 - Download Link
- Windows x86 - Download Link
- Windows 7, 10, 11 (64-bit)
- Download the latest release
- Extract all files to
C:\SleepHunter
(or your choosing) - Open
SleepHunter.exe
- Configure your DA installation path in
Settings->Game Client
(if different) - Profit!
As of version 4.8.0 and newer, SleepHunter now supports the Zolian 9.1.1+ client out of the box.
You will need to configure the Settings->Game Client
path to point to your Zolian installation.
For example C:\Zolian\Zolian 9.1.1.exe
.
Restart SleepHunter once and you should see the proper skill/spell icons displayed.
NOTE: While the client is supported, you will need custom metadata files for skills, spells, and staves.
The documentation for SleepHunter is located in the docs folder. It is written in Markdown and can be viewed in any text editor.
There is a GitHub action that will automatically build the documentation into a static website and publish it to GitHub Pages.
Starting with version 4.1.0, the long awaited auto-update functionality is now working! It pulls from the latest release section.
This means you can update from within the SleepHunter application itself by going to Settings->Updates
.
If there is a new version available, you can update to it which will download, install, and restart SleepHunter.
NOTE: Your user settings will be preserved, but all other existing data files will be overwritten.
SleepHunter relies on reverse-engineered memory addresses that point to game data within the client. These are read at runtime which allow the application to be aware of character location, stats, inventory, skills, spells, and UI state.
These are likely to change each client version and must be re-located with new offsets to continue functioning properly.
These are defined in the Versions.xml
file, and are mostly either StaticVariable
or DynamicVariable
types.
You can think of a StaticVariable
as one that is always located in the same spot in memory.
These do not change each time the client is opened or switching characters in the same client instance.
These are the most basic, but unfortunately not very common.
In the case where memory pointers change each client instance, a DynamicVariable
must be used.
You can think of these as one or more pointers that can be followed in to get the data value.
Eventually, the pointer chain should end with a static base address that can be used.
These are the most common types of variables you will encounter, though they may have a single offset or multiple pointers in a chain.
A less common type, a SearchVariable
scans a region of memory looking for a certain pattern.
These are more resilient to change but also require a bit of tweaking to get working properly.
It is not recommended you use these unless absolutely necessary.
You will need a program like CheatEngine 7.5+. This program is not very pretty, but it is very powerful.
It is recommended that you follow the tutorial and complete the first few activities to get familiar with the concepts. You will be using many of them when working to get memory offsets from the Dark Ages client.
If you are using a custom client or a client version that is not currently supported, you will need to do this to retain SleepHunter functionality.
Some examples may be getting this to work with the Korean Legends of Darkness (LoD) client or a previous client version like 7.18 or older.
Or if in the random event that a new client version is released after years of no updates, who knows!
I am always accepting of pull requests (PRs) against this repository for additional features, bug fixes, and enhancements. Now that Auto-Update is functional, it should be much easier to distribute these changes to users of the application.
It is recommended that you use Visual Studio 2022+ for developing on Windows. I am not sure of WPF support within other IDEs.
Unfortunately this repository does not have any unit tests, so you will have to test for regressions manually. Please be mindful of the users of this application, and thoroughly test any functionality for breaking changes.
To package and deploy the application and updater binaries as neat, single-file executables, use the following command:
cd SleepHunter
dotnet publish -r win-x64 -c Release -p:PublishSingleFile=true --self-contained false
You will get similar output:
MSBuild version 17.5.1+f6fdcf537 for .NET
Determining projects to restore...
Restored C:\Users\Erik\Projects\SleepHunter4\SleepHunter.Updater\SleepHunter.Updater.csproj (in 230 ms).
Restored C:\Users\Erik\Projects\SleepHunter4\SleepHunter\SleepHunter.csproj (in 230 ms).
SleepHunter.Updater -> C:\Users\Erik\Projects\SleepHunter4\SleepHunter.Updater\bin\Release\net7.0-windows\win-x64\Upd
ater.dll
SleepHunter.Updater -> C:\Users\Erik\Projects\SleepHunter4\SleepHunter.Updater\bin\Release\net7.0-windows\win-x64\pub
lish\
SleepHunter -> C:\Users\Erik\Projects\SleepHunter4\SleepHunter\bin\Release\net7.0-windows\win-x64\SleepHunter.dll
SleepHunter -> C:\Users\Erik\Projects\SleepHunter4\SleepHunter\bin\Release\net7.0-windows\win-x64\publish\
You should then see the binaries in $PROJECT_ROOT/bin/Release/.net7.0-windows/win-x64/publish
.
Unfortunately, it seems publishing through VS 2022 does not respect the PublishSingleFile
property, even when specified in the .csproj
file.