More than a visual refresh
Vyrda began with the familiar Metin2 foundation. Since then, its client and server stack have been rebuilt system by system: the platform, renderer, vegetation, world simulation, audio, backend engines, data layer, performance architecture, and release pipeline have all moved forward.
This page documents the major engineering upgrades already present in the project. It is a technical overview rather than a list of gameplay features.
- Renderer
- Native DirectX 11
- Architecture
- 64-bit client & server
- Vegetation
- SpeedTreeRT 4.1
- World
- Dynamic & server-timed
- Server platform
- FreeBSD 15.1 / Clang 19
- Data layer
- MariaDB 12.3
A modern foundation
The oldest constraints were removed first, creating a safer base for every upgrade that followed.
Core platform
64-bit client & modern toolchain
The Windows client moved to a native x64 build, removing the old 32-bit address-space ceiling and making room for larger worlds, richer assets, and more robust runtime systems. The codebase now builds with Visual Studio 2022, Premake, and C++17.
- Native x86-64 executable and libraries
- Modern compiler, project generation, and static runtime
- 64-bit-safe resource and pointer handling
Vegetation
SpeedTreeRT 4.1
The original binary-only vegetation dependency was replaced with a statically integrated SpeedTreeRT 4.1 runtime. The source was hardened for legacy content, then tested against every shipped tree asset.
- 278 tree assets validated across LODs and camera angles
- Stable GPU wind, leaf cards, and billboard transitions
- Safe handling for malformed legacy branch and atlas data
Runtime
Modern engine libraries
Critical subsystems now use purpose-built modern components: mimalloc for allocation, enkiTS for task scheduling, LZ4 for fast pack compression, and STB/FreeType for asset and font handling.
The renderer, rebuilt
The graphics path evolved from the legacy fixed-function foundation into a native, shader-driven DirectX 11 renderer.
Graphics API
Fully native DirectX 11
The current client renders and presents through an authoritative Direct3D 11 path, with native textures, buffers, shaders, render targets, UI submission, and GPU skinning. A DXGI flip-model presentation path adds modern frame pacing, low-latency buffering, resize recovery, and optional tearing support.
- Direct3D feature level 11.1 on supported hardware
- Native world, characters, effects, terrain, trees, and interface
- Shader cache compiled for the DX11 pipeline
Materials
Shader-based world materials
Terrain, dungeons, objects, grass, and trees use authored normals with coherent direct light and sky fill. Normal, specular, and displacement detail replace the flat lighting of the original path, with up to 16× anisotropic filtering preserving distant texture clarity.
Shadows
Stable cascaded shadows
Characters, terrain, objects, dungeons, grass, and SpeedTree share a multi-pass shadow system with cascade-aware filtering, real texel-size kernels, stable light-space snapping, and extended caster coverage.
Image quality
Modern post-processing
The world pass now supports restrained filmic tone mapping, adaptive exposure, bloom, FXAA, SSAO, clarity, sharpening, and gradient-aware dithering. A world/UI mask keeps text, icons, windows, and the cursor crisp and ungraded.
A world that moves
Lighting, atmosphere, water, and vegetation now respond as connected parts of one environment.
Time & light
Server-time celestial cycle
A continuous 24-hour cycle moves the sun and moon through world space and blends light, fog, sky, clouds, material response, and shadow direction through dawn, day, dusk, and night.
Water
Animated water & reflections
Water now combines its authored animation with continuous wave normals, ripples, Fresnel response, depth tint, foam, fog integration, and corrected planar reflections. Puddles and ice can reflect the surrounding scene as weather changes.
Weather
Dynamic weather simulation
Rain, snow, blizzards, thunder, and lightning are tied to wind and ambience. Wet surfaces, puddles, and snow build gradually while precipitation remains frame-rate independent and readable from normal gameplay cameras.
Vegetation
Streaming grass & GPU wind
Attribute-driven grass streams around the player instead of rebuilding in visible rings. Trees and grass share weather-aware wind, wider draw distances, stable LODs, and bounded population budgets.
Audio & social
Modern audio and communication
The legacy audio layer is backed by a static miniaudio engine. Integrated voice chat and Discord Rich Presence connect the client to modern communication without changing the game’s familiar sound interface.
Media
Native media presentation
Startup and in-game video paths were adapted to the modern renderer through Media Foundation and Direct3D 11, including reliable loading transitions and recovery when the game window changes state.
Faster, safer, measurable
The engine was not only expanded; its costly paths were profiled, reduced, and made repeatable to test.
Performance
Smarter render submission
Conservative terrain and SpeedTree culling, redundant shadow-pass removal, persistent streaming buffers, batched uploads, once-per-frame wind updates, and selective reflection reuse reduce CPU work without lowering the main shadow or scene quality.
Reliability
Recovery built into the renderer
Focus changes, minimize/restore, resizing, resource recreation, frame pacing, and loading-to-game transitions have dedicated recovery paths. Automated captures, handle checks, shader validation, and runtime error scans guard every graphics release.
Observability
Engine-level profiling
Opt-in telemetry records frame time, render-pass cost, draw submissions, primitive counts, presentation time, tree simulation pacing, and resource health. Optimizations can be compared against repeatable baselines instead of judged by feel.
Delivery
Verified patch pipeline
Client releases are staged through a manifest-driven autopatcher with per-file SHA-256 verification, versioned release snapshots, remote download checks, and server-side rollback backups.
The server engine, modernized
The backend received the same architectural treatment as the client: a clean 64-bit platform, current toolchain and dependencies, reproducible builds, supervised processes, and a modern local data layer.
Backend platform
FreeBSD 15.1 on native amd64
The production stack runs on a clean FreeBSD 15.1 amd64 installation. The game, database, and quest compiler are native 64-bit ELF binaries built for FreeBSD 15.1 with the base LLVM/Clang 19 toolchain, removing the legacy 32-bit runtime dependency from the server side.
- Native x86-64 game, database, and quest binaries
- Client/server packet layouts protected by ABI verification
- Clean runtime separated from sources and build output
Build system
Revisioned, reproducible binaries
Game, database, libraries, and quests can be built separately or together through one parallel build system. Successful builds receive real revisioned names and are activated through stable symlinks, preserving a clear history while keeping deployment paths consistent.
Dependencies
Current package-managed toolchain
System dependencies come from the current FreeBSD package repository instead of copied legacy binaries. The stack uses maintained releases of Boost, Crypto++, PCRE2, zstd, CMake, GNU Make, pkgconf, and the MariaDB client libraries, while required compatibility libraries are rebuilt natively for amd64.
Data layer
MariaDB 12.3, locally isolated
The database layer was upgraded to MariaDB 12.3 and listens only on localhost. Separate least-privilege identities isolate website and game access, while consistent dumps, pre-import snapshots, integrity checks, and rollback archives protect production data.
Operations
Supervised and observable
Nineteen game and database services run under automatic crash supervision. A unified control panel handles start, stop, cleanup, backups, quest compilation, and source builds, while the secured server logger collects sanitized web, system, database, and game diagnostics with bounded retention.