A game server that supports the RuneTek 3 game client used in the popular MMORPG RuneScape around 2005, written in Elixir.
Find a file
2026-05-07 16:54:45 -04:00
.gitlab/merge_request_templates feat: Game.Types shared module 2026-03-29 15:54:19 -04:00
cache fix: all that shit that somehow broke before 2026-03-07 14:47:44 -05:00
config refactor: replace profile-insert triggers with Ecto.Multi cascade 2026-05-04 19:33:20 -04:00
lib fix: line of sight checks on npc combat, fix draynor banker facing 2026-05-07 16:54:45 -04:00
priv fix: line of sight checks on npc combat, fix draynor banker facing 2026-05-07 16:54:45 -04:00
rel fix: remove invalid vm args 2026-05-07 13:55:11 -04:00
scripts feat: custom xpmode, fally mine/smelt loop 2026-05-05 22:41:17 -04:00
test fix: line of sight checks on npc combat, fix draynor banker facing 2026-05-07 16:54:45 -04:00
.credo.exs feat: contracts, fix credo violations 2026-03-30 00:41:03 -04:00
.dialyzer_ignore.exs refactor: replace profile-insert triggers with Ecto.Multi cascade 2026-05-04 19:33:20 -04:00
.dockerignore feat: ActionQueue refactor, RS317 removal, system isolation 2026-03-03 11:53:26 -05:00
.envrc fix: benchmark testing, add decoders 2026-02-27 15:50:54 -05:00
.gitignore feat: create an rsa yaml file 2026-05-07 14:35:45 -04:00
.gitlab-ci.yml refactor: replace profile-insert triggers with Ecto.Multi cascade 2026-05-04 19:33:20 -04:00
devenv.nix fix: benchmark testing, add decoders 2026-02-27 15:50:54 -05:00
docker-compose.yml feat: add RSA login block encryption support 2026-04-03 11:21:30 -04:00
Dockerfile Remove hardcoded loadout fallbacks, DB as single source of truth 2026-04-02 09:54:15 -04:00
flake.lock chore: set up flake-based devenv 2026-02-25 12:28:42 -05:00
flake.nix chore: set up flake-based devenv 2026-02-25 12:28:42 -05:00
mix.exs refactor: replace profile-insert triggers with Ecto.Multi cascade 2026-05-04 19:33:20 -04:00
mix.lock refactor: replace profile-insert triggers with Ecto.Multi cascade 2026-05-04 19:33:20 -04:00
README.md feat: add RSA login block encryption support 2026-04-03 11:21:30 -04:00
test_cache.exs fix: benchmark testing, add decoders 2026-02-27 15:50:54 -05:00

About

High-Level Alchemy is a game server emulator compatible with the 377 game client. It makes some attempt to emulate the popular MMORPG RuneScape around 2005. The project is a heavy work in progress. Many features are not even considered with the current design(s) and I would classify this as experimental at best.

Requirements

  1. elixir >= 1.18
    • Erlang/OTP >= 28
  2. bzip2
  3. postgresql >= 14

Client

For 377, I use refactored-377 fork

Usage

Nix/devenv

Use devenv to bring up a shell that can service both the game server application and a postgresql database:

$ devenv up # Bring up the Game Server, a PostgreSQL database and run migrations against it.

Docker

You can use docker-compose to bring up a stack that includes the application along with a postgresql database:

$ docker compose up

Manual

  1. Create a config/.env.dev.exs file. Fill it in with elixir environment variables.
System.put_env("HLA_DATABASE", "hla-dev")
System.put_env("HLA_DATABASE_USER", "hla")
System.put_env("HLA_DATABASE_PASSWORD","hla")
System.put_env("HLA_DATABASE_HOST","localhost")
System.put_env("HLA_DATABASE_PORT", "5432")
System.put_env("HLA_GAME_HOST", "localhost")
System.put_env("HLA_GAME_PORT", "43594")
System.put_env("HLA_JAGGRAB_PORT", "43595")
System.put_env("HLA_HTTP_PORT", "8080")
  1. Use ecto to create the database and run migrations.
$ mix ecto.create
$ mix ecto.migrate
  1. Run the game server application
$ mix run --no-halt 

or (with iex)

$ iex -S mix

RSA Login Encryption (Optional)

RSA encrypts the login block between client and server. Disabled by default — both sides must match.

  1. Generate a keypair: mix rsa.keygen
  2. Enable on the server: export HLA_RSA_ENABLED=true
  3. Copy the printed modulus into the client's config/client-config.yaml and set rsaEnabled: true
  4. Restart both server and client

For Docker, the hla_rsa volume persists the key. Generate inside the container with docker exec hla_app mix rsa.keygen.