Introduction
Alembic is a cross-platform GUI and CLI Asheron’s Call launcher supporting both Decal and my own minimal Decal reimplementation.
Features
- Desktop GUI written in egui
- Complete Servers and Accounts management UI
- Shows ingame chat
- Shows game client network activity
- Cross-platform support (fully works on Windows)
- CLI for launching and injecting from the command line
- Settings system for persisting configuration
- RPC system for communicating between the game client and the GUI/CLI
- Client Hooks
- Chat hooks
- Networking hooks
- NSIS-based installer
Current Status
| Component | Windows | Linux | macOS |
|---|---|---|---|
| CLI Launching | ✅ | ✅ | ✅ |
| CLI Decal | ✅ | ❌ | ❌ |
| CLI Alembic | ❌ | ❌ | ❌ |
| Desktop Launching | ✅ | ✅ | ✅ |
| Desktop Decal | ❌ | ❌ | ❌ |
| Desktop Alembic | ✅ | ❌ | ❌ |
See the Alembic Walkthrough for a video overview.
Architecture
Alembic is managed as a single Cargo Workspace with six crates:
- cli - Command-line interface (native architecture)
- desktop - Cross-platform egui desktop application (native architecture)
- tui - Terminal UI (native architecture)
- cork - DLL injector utility (32-bit Windows only)
- dll - The injectable DLL (32-bit Windows only)
- libalembic - Common and shared functionality
This section covers the architecture and design of each component.
CLI
The CLI crate provides command-line interface for launching game clients and injecting.
Features
- Launch Asheron’s Call game client
- Inject Alembic DLL
- Configure accounts and servers
- Interact with the game via command line
Usage
See the Building section for instructions on how to build and run the CLI.
Desktop
The desktop crate provides a cross-platform GUI application written in egui.
Features
- Complete Servers and Accounts management UI
- Live chat display
- Network activity monitoring
- Launching and injecting game clients
Technology
- egui - Immediate mode GUI library
- Cross-platform - Supports Windows, Linux, and macOS
Platform Status
- ✅ Windows - Fully functional
- ✅ Linux - Launching works
- ✅ macOS - Launching works
DLL
The DLL crate is the injectable DLL that hooks into the Asheron’s Call client.
Technologies
Features
- Hooks Asheron’s Call client functions
- Chat interception
- Network packet capture
- In-game UI rendering
Platform
- ⚠️ Windows only - Builds as 32-bit (i686-pc-windows-msvc)
libalembic
The libalembic crate contains common and shared functionality used across all components.
Key Components
-
RPC System - Communication between game client and GUI/CLI
- Built on tarpc
- JSON-based message transport
- TCP networking
-
Settings System - Persistent configuration management
- Accounts and servers configuration
- User preferences
-
Networking - Network packet handling
- Capture and filtering
- Message parsing (work in progress)
Architecture
The shared library abstracts common concerns so other crates can focus on their specific domain (CLI, Desktop, DLL injection).
Building
Prerequisites
This project is written in Rust.
Windows
Install the 32-bit MSVC target:
rustup target add i686-pc-windows-msvc
Linux
Install MinGW toolchain for cross-compiling Windows binaries:
# Debian/Ubuntu
sudo apt-get install gcc-mingw-w64-i686
# Add the Rust target
rustup target add i686-pc-windows-gnu
All Platforms
Install cargo-make for the build system:
cargo install cargo-make
Build Instructions
Quick Start
Use cargo-make to build everything:
# Build all components (32-bit and native)
cargo make build
# Run the desktop app
cargo run --bin desktop
The build task automatically:
- Builds cork and dll for 32-bit Windows (i686-pc-windows-msvc)
- Builds desktop and cli for your native architecture
Manual Build
If you prefer to build manually:
# Build 32-bit components first
cargo build --target i686-pc-windows-msvc -p cork -p dll
# Then build native components
cargo build -p desktop -p cli
Build Artifacts
Build artifacts are placed in the target/ directory. The layout is:
target/i686-pc-windows-msvc/- 32-bit Windows binariestarget/debug/ortarget/release/- Native platform binaries
Contributing
Contributions are welcome! Here are some great ways to get involved:
Ways to Contribute
- Help with Rust - The project was written while learning Rust. If you see improvements, please let us know
- Data Handling - Network messages aren’t yet parsed into fragments or reconstructed into game messages
- UI Improvements - The packet UI could be much better
- Bug Reports - File issues for any bugs you find
- Testing - Help test the application on different platforms
Getting Started
- Fork the repository
- Clone your fork:
git clone https://github.com/your-username/alembic.git - Create a feature branch:
git checkout -b my-feature - Make your changes
- Commit:
git commit -m "Add my feature" - Push to your branch:
git push origin my-feature - Open a Pull Request
Building Locally
See the Building section for instructions on how to set up your development environment.
Questions?
Feel free to open an issue to ask questions or start a discussion. The maintainer is happy to help!