Native Rust client progress

Still in development — not yet verified 100% Titanium-equivalent.

The work is focused on the native client, original assets, rendering and playable Linux/Windows releases. A narrowly scoped bot height-packet correction is now user-authorized; AI decision and pathfinding changes remain outside this pass.

Updated September 28, 2026. This is a verified work record, not an automatic live-health monitor.

Current focus: North and South Qeynos

Three defects corrected in spectator build 20260928-qeynos-parity: overlapping water-face artifacts, later skeleton artwork in Qeynos, and missing shared citizen/guard animations. The updated spectator reconnected successfully. Other entries below are historical.

Open the Qeynos review: screenshots, test results and remaining checks.

The 16-case water regression, eight original-source citizen/guard variants, and 1,200 source-floor comparisons passed. This is not a claim of complete P99 equivalence; live interactions and remaining appearance differences still require acceptance checks. Bot AI and server spawn/stat data were not changed.

Current work: original shader parity

Implementation is continuing. The live spectator now uses the complete portable original-asset directory; fresh tunnel and outdoor views were inspected. Its build remains 20260908-living-framing. The new shader candidate is separate and is not live.

The Rust ports of three original Titanium pixel shaders match 288 original-program readbacks exactly at 8-bit output. The vertex-lighting port matches 672 original-program outputs within 0.00000024. Vulkan tests also pass for both ports. That comparison caught and corrected a bone-lighting mismatch; these results verify the tested equations, not complete model or client parity.

All 29 EQG character archives have been re-exported with explicit normal/reflection skin bindings. Original skin-layer overrides and unbound texture channels are preserved. A referenced equipment reflection bitmap is absent from the original media; its original fallback behavior remains under investigation. Tangent generation, material-layer constants, full rendered-model comparisons, particles and gameplay acceptance are still unfinished.

Linux and Windows portable release candidates are staged with complete asset hashes, and both archive integrity checks pass. The Linux compatibility build requires GLIBC 2.30; it entered Qeynos in a real window. The Windows executable entered Qeynos under Wine, which is not counted as actual Windows acceptance. Neither candidate has replaced public downloads.

Earlier implementation records — historical states, not the current deployment

Live Mentor height and spectator fixes

The server now receives Mentor's correct actor-origin height: 4.375 above his ground-level feet. Both movement packet types are corrected, and 92 bot tests pass. Only Mentor was restarted; AI decisions and pathfinding were not edited.

The frozen spectator was also following an old death entity: its coordinates exactly matched Mentor's corpse. The native client now selects the living player for the observer and camera. A separate front/side camera fallback no longer aims away from Mentor. All 156 native library tests pass, the separately run material GPU test passes, and Linux/Windows releases build.

The live build is 20260908-living-framing, with the previous assets/settings retained. Fresh frames were inspected: Mentor is visible on the ground and fighting gnolls. This verifies these specific repairs, not complete Titanium parity. The other bots still run their previous processes.

Verified September 8 frame: living Mentor visible on the terrain fighting gnolls

Verification screenshot, not a live feed. Open the live spectator.

Portable client and current clipping repair

The original-asset candidate now has a self-contained asset directory: 76,978 files, with no symlinks or server-specific runtime asset paths. After relocation, 4,859 model documents passed dependency checks with zero errors. The Blackburrow overview and held-axe test renders are byte-identical before and after packaging. The Linux client entered Qeynos with these portable assets; its actual window was inspected.

This is not full visual parity: the audit still records 544 material-shading limitations across repeated model namespaces. Linux and Windows builds pass, but installers, public downloads and actual Windows-platform acceptance remain unfinished.

A fresh Mentor snapshot and the server's saved position both showed Z=0 where the original terrain floor is Z=0. The server's Barbarian actor-origin convention requires a 4.375-unit offset above those feet. The authorized correction is being tested in the bot's position and movement-history packets; no live-repair success is claimed until the restarted process and stream have been checked.

Current original-asset work

All 101 required original terrain exports are complete. The assembled terrain/NPC candidate passes 1,681 source-selection checks and has no broken dependencies across 5,111 model files. It has been loaded and visually checked in Qeynos.

A newly identified importer bug assigned 31 equipment textures to the wrong filenames because the original archive contains an orphaned filename. Both importers now use the archive's filename checksums. A check of all 1,153 original archives confirmed the defect is confined to that equipment archive; terrain and NPC exports are unaffected.

The corrected equipment candidate contains 1,179 distinct models from the original media. Multi-model weapon animation selection and unused material dependencies are also fixed. The held-weapon render has been inspected, 154 Rust library tests pass, and both Linux and Windows releases build.

This is still unfinished: EQG shading and particles, source-variant visual comparisons, remaining gameplay interactions, portable packaging and full platform acceptance remain. Wine launch testing is not being counted as actual Windows acceptance. The live spectator and public downloads have not been replaced by the candidate.

Latest verified implementation

Inspection now completes Titanium's client/server handshake and displays the test character's real dagger, lantern and robe in the correct slots. Buff removal also works against the server. Profile parsing now preserves all 25 buff slots and reads bank balances separately from carried money.

The same inspected Qeynos view now runs around 20–23 FPS on this software-rendered host, up from roughly 8–10 FPS before the camera/collision and terrain-culling changes. Camera and wall queries matched the full original mesh on 96 test paths in Qeynos and another 96 in Blackburrow.

The original primary NPC export has passed its audit: 2,048 model files, 16,610 animations and 13,199 texture checks, with no errors. The separate 109 original loading-list imports also passed their fresh audit. Terrain export is past 86 required zones. Final staging now checks the actual per-zone model resolver and rejects old fallback assets; model presence alone is not counted as complete.

The spectator remains on its stable build while the complete original-asset candidate is assembled and verified. Work continues; this is not a 1:1 completion claim.

Current implementation pass

Spell casting now succeeds against the real server. Scribing, memorizing, casting, forgetting and re-memorizing Minor Shielding have been tested with the ordinary test character. Reconnecting retained the memorized spell and active buff. Spell gems, buff slots and radar no longer overlap in the tested 1280×720 view.

The full terrain export exposed a damaged Lake Rathe archive in an older working copy, which also contains replacement textures. That candidate was rejected. Terrain and primary NPC archives are now being exported directly from the disc-extracted Titanium installation. The separate 109 original load-list imports have already passed their dependency audit. These sources are being combined without texture-name collisions or dropping base NPC archives.

The renderer now uses the captured original texture-filter setting instead of forcing 16× anisotropic filtering. Empty character appearance caches no longer upload unused poses. Tests and Linux/Windows compilation pass; frame rate and full visual acceptance remain open. The live spectator is unchanged while these candidates are verified.

Earlier checkpoint — 04:43 UTC

All 109 imported character archives have been re-exported. The resulting audit checked 1,369 model files, 33,396 animations and 7,210 textures with no reported errors or unsupported features. The complete zone export is still running, through Karnor at this update.

The real backpack test passed: move 20 bandages into it, reconnect, see the same stack, and restore the original inventory slot. Scribing Minor Shielding and memorizing it into a gem also succeeded, with the server database confirming both. Casting uncovered an incorrect packet size (24 bytes instead of Titanium's exact 20); the fix is implemented and awaits the next in-game test.

Spatially indexed floor checks matched all 600 full-mesh checks in Qeynos and another 600 in Blackburrow. Disabled effects no longer run unused bloom passes, and two-axis bloom has a GPU regression. An animated-bounds character-culling build now passes 146 library tests and the GPU material tests. Performance acceptance is still open; the old FPS counter incorrectly bottomed out at 10 and has also been corrected.

These changes remain isolated from the spectator. Its stable outward-normal assets are unchanged. Client completion is still being implemented and verified.

Work continuing — not a completed release

The latest isolated Rust build has been inspected in the original Qeynos guild room. The cyan lantern and brown NPC clothing now agree much better with Titanium. A live trace of the original client confirmed that texture colors must be lit before gamma decoding; the Rust material and equipment-tint paths have been corrected and GPU-tested. Three-light selection now runs per actor/region instead of scanning every zone light for every vertex.

Performance is still about 11 FPS on this software-rendering test host, so this build has not replaced the spectator. Environment selection, legacy transparency blending, light flicker and wider visual comparisons remain open.

Gameplay work is also continuing: the inventory decoder now retains real bag contents, stack counts, charges and bank/cursor slot mappings. Fake bag contents have been removed. Right-click bag opening and item transfers are being connected to real server updates and tested; they are not yet accepted for release. The current library suite has 142 passing tests.

The complete terrain re-export is still running, through Erudin exterior at this update. The live spectator remains on the separately verified outward-normal asset correction. 100% Titanium parity has not been established.

Current implementation — isolated, not live yet

Character-normal correction is now live. Both triangle winding and normal signs had been reversed, which fooled the earlier coherence check. A fresh original-source export passes independent outward checks, robe/head/animation checks, and actual guild-room inspection. The spectator now uses assets-v7 with the existing stable executable. Both services are active and a fresh Blackburrow frame was inspected. Mentor's below-floor coordinate issue remains unresolved.

The first colored-light candidate was rejected after actual visual inspection: the guild room was incorrectly pink. Titanium's original classic world and character shaders have now been disassembled, and its live light constants captured in the same guild room.

  • The Rust loader now preserves original baked vertex lighting. All 10,236 Qeynos primitives in a new isolated export retain it; alpha controls outdoor lighting, not wall transparency.
  • Classic light attenuation now uses the original inverse-square formula, capped at 2. Three-light selection matches captured results for three known guild NPCs; the exact CPU selection routine and world-region selection remain under investigation.
  • Missing server equipment-light decoding and updates are implemented. Original light types, colors and radii were recovered from Titanium, including the test character's cyan lantern.
  • 138 library tests, Windows compilation, Linux release build, and the expanded Vulkan regression passed. The GPU test verifies adding and removing dynamic lights. Actual ordinary-character inventory pickup and replacement were confirmed on the server; the lantern was restored to its original slot. Visual acceptance remains open.

Remaining lighting work includes environment/ambient matching, flicker, modern-model light attachments, and wider scene comparisons. The live spectator still uses the source-normals build below.

Zone rendering work now underway

The original character lantern now visibly illuminates NPCs cyan in the separate test client. Original D3D9 vertex-color clamping has been restored there, preventing excessive brightening. Static world normals also had an axis error: the corrected Qeynos export's horizontal surfaces now point predominantly upward (mean absolute Y component 0.994, previously 0.012).

All required zones are being re-exported with baked lighting, corrected normals, and original region centers/radii. This runs in an isolated directory on the larger local storage volume; original media and deployed zone assets are unchanged. Per-region/per-actor CPU light selection is next to remove the expensive full-light scan from every vertex.

Running on the spectator

The stable 20260907-source-normals executable is now running from the 20260908-outward-assets deployment with corrected assets-v7. Client and stream are active; a fresh Blackburrow frame was inspected. Public downloads have not yet been replaced.

  • 101 original-disc Classic/Kunark zones, original solid/non-solid collision flags, placed objects, bitmap animation and archive-local models.
  • Base models resolve for all 230 race/gender pairs in the 3,362-row server inventory. This does not prove every appearance or dynamic spawn.
  • 29 native EQG archives preserve 409 animations, 187 bitmaps and 203 skin-table entries. The renderer supports their larger skeletons.
  • The deployed dependency audit checked 4,654 documents and 46,281 texture paths: zero dependency errors, with 93 rendering limitations recorded.
  • 42 original robe/head combinations for ten character models retain their source geometry and animations. The original Titanium client earned and equipped a Blue Training Robe through its normal starter quest; the native client renders that same saved item, including its lower-leg cloth and tint.
  • Inventory uses actual character details, money and equipment. Original item icons use Titanium's column-major sheet order; windows now layer over underlying HUD text and own their clicks. A live pickup/replace test preserved the item on the server.
  • The spellbook now displays the character's 400 learned-spell slots, not the class's entire spell catalogue. Server spell updates and the 16-byte spell-memory packet are implemented. Scribing/memorizing interactions still require completion and end-to-end acceptance.
  • Normal third-person camera collision now traces the actual 3D scene; the previously blank guild-room view is visible. Chat wraps within its panel and displays saylink labels without their raw metadata. Clickable links remain unfinished.
  • Classic global character surface normals now follow their original skeleton bind transforms and coordinate axes. Robe/head geometry checks and the full asset dependency audit pass. The original Human, Barbarian and Gnome posture bones drive seated/crouched eye displacement; the live native sit/stand/camp test passed.
  • Zero player size now selects the original racial default instead of making every player Human-sized. Names and click targets use actual source model bounds; a normal NPC body-click returned the correct target and server consider response.
  • Source helmet IDs, global3 supplemental standing/seated animations, corrected world handedness and actor origins, bracer textures, Classic armor colors, actual movement velocities and the completed camp handshake are now included.

Live texture color-space handling is corrected, with neutral spectator grading. The latest frame also exposes barbarians partly below a tunnel floor; their packet positions and source origins are being checked. Water presentation, camera framing and matched lighting remain unfinished. The previous build is preserved for rollback.

Actively being implemented

Original colored zone lights and matched character lighting, remaining archive-wide appearance checks, and unfinished playable UI. Original light-instance files were present but never consumed by the renderer; source-light loading and GPU wiring are now in a separate test candidate, not live.

Mentor still appears partly below the floor. Read-only inspection found that the bot currently sends terrain-foot Z directly while Titanium player movement uses actor-origin Z. The native renderer is not being floor-snapped to conceal this mismatch; AI behavior is outside this client pass. Additional original-client comparison remains required.

Deployed regression checks: 130 Rust library tests passed (one separately run GPU-dependent test is normally ignored), Linux release build and Windows compilation passed, and the explicit Vulkan material/window-layering regression passed. Six original gendered Human/Barbarian/Gnome models passed the authored-posture camera test. These checks are not a declaration of full parity.

Verification for this deployed update

  • Diffuse/UI textures now decode sRGB correctly and diagnostic renders use the same output color space as the window. The GPU test includes a brown mid-tone source-color round trip. A real native Qeynos window confirms brown hair instead of the previous washed-out appearance.
  • Held Enter no longer opens and immediately closes chat. The map/chat/camp held-key test completed its 30-second camp and exited normally. Remote swim-pose dispatch now uses water depth, excluding corpses, fish and shallow wading; actual water presentation still needs matched visual acceptance.
  • 58 original EQG head variants, source-table skin selection, correct BC1 cutout transparency and distinct alpha-blended materials. The 87 base/head documents pass dependency and head-identity checks; all were rendered for inspection.
  • Classic helmet exports now retain actual HE01/HE02/HE03 source IDs. Alternate-file list positions are no longer mistaken for head IDs. Human plate-helmet geometry was rendered and inspected.
  • Original Titanium logged into Kartonath, created the ordinary test character Parityref and entered South Qeynos. The original client remains available for further comparisons.
  • That comparison exposed a horizontally mirrored native world view. A corrected left-handed world camera, consistent turn controls and corresponding animated-face visibility are implemented in the isolated candidate.
  • The separate native test character entered South Qeynos. Preserving original actor pivots/scale corrected the floating, undersized Human model; converting feet coordinates back to server model origins restored the test character's saved Z from 28 to the original 31.75. Other races still require matched checks.
  • A missing animation-mapping file was caught in the first helmet export. The extractor now rejects that incomplete setup. A second defect skipped all base characters modified by the original global3 supplemental archive. Both are corrected: 25 actors now retain 1,634 base clips, with 75 matching helmet variants. The new full candidate audit checks 4,612 documents and 46,281 texture paths: zero dependency errors, 93 limitations still recorded.
  • Movement updates now derive backward, sideways and vertical velocity from actual collision-resolved movement. Face zero is handled as an actual texture selection.
  • The original Human standing and seated animations were rendered and checked. The native ordinary-character test completed its 30-second camp and exited cleanly; a separate movement test cancelled camp and remained connected. Persistent postures and non-combat action IDs are implemented.
  • The latest separate Qeynos view shows the relaxed arms-down stance and restored plate forearm/bracer textures. Its Rust tests, Linux release, Windows compilation and Vulkan material/shadow/handedness regression pass.
  • Classic armor-color packet decoding, appearance cache separation and follow-camera model-origin corrections passed their current tests. EQG/weapon tint coverage and matched lighting remain separate unfinished work.

Passing tests and file counts are not a declaration of 1:1 visual parity. Work continues on the remaining visual and gameplay differences.

Still required before completion

The admin-only cshome archive and dangling original loading-list references remain explicitly classified source exceptions. No missing assets are silently counted as finished.