CITY RESTORATION · SEPTEMBER 29, 2026

Qeynos first.

North and South Qeynos are the active work area. Qeynos Hills remains queued until both cities finish acceptance. This report is not a 100% certification.

Full North Qeynos completion plan: all 29 checks, ordered work and acceptance requirements

North Qeynos: original water-fog runtime in QA

The native QA client now connects original sky ambient metadata, terrain vertex lighting and the camera’s water region to the recovered Titanium fog arithmetic. Thirty original actor radii were extracted directly from WLD; the Human radius matches the running original client exactly.

283 library tests, two actor-bound tests, the original guild brightness fixture, a short swim-return rehearsal, four North water geometry tests, Windows compilation and the Linux release build pass. The first live candidate exposed a spawn-size versus eye-height guard error; that was corrected and regression-tested.

The isolated native client completed a short Temple pond dip and ordinary swim/jump return. Its camera switched to water fog RGB (1, 3, 2), range 0–300, then back to dry fog. Air fell from 50 to 43 and refilled to 50; health stayed 27/27. Underwater and returned-bank screenshots were inspected. This verifies the transition and safe return, not yet a matched Titanium color comparison.

Titanium subsequently produced the same rainy-day underwater color and range. A new regression replays its captured inputs against Rust and also checks the settled pond-floor brightness. All three source-asset fog tests pass. The original test’s automated mouse return failed when a corpse-loot window intercepted input; normal keyboard movement recovered to dry land with air 50 and health still 27/27. The failed controller is disabled, and this is not credited as a successful automated round trip.

Not yet accepted: other ambient/weather colors, vision effects, other bodies, transition cadence and full lighting. Normal Rust world lighting still has fixed ambient/directional values; the original sky-to-world lighting path is being traced separately. This is isolated QA only; public downloads and the spectator are unchanged. No additional completion percentage has been awarded.

North lighting: original vertex colors were being lost during export

A comparison inside the monk guild exposed a concrete asset defect: the exporter passed 0–255 color bytes into glTF’s 0–1 color fields. Nonzero channels were clamped to full intensity. That destroyed baked RGB detail and the alpha channel used to control outdoor lighting. The original archives were present, but this part of their data was not surviving conversion.

The conversion is now corrected and tested across all 256 byte values. The old export fails the original-client terrain-lighting comparison; the corrected export matches both measured guild positions within 0.000002. North’s 2,449 nodes, 2,448 meshes and 45,180 triangles are unchanged, as are expanded non-color geometry, materials, texture content, animations and eight metadata files. The corrected export restores intermediate lighting alpha on 63,786 vertices and intermediate RGB on 38,777 vertices.

281 Rust library tests pass, with two pre-existing ignored tests. All four actual North swimming tests still pass with the corrected geometry. Existing exporter regressions also pass. The new assets are staged only in isolated QA, with the old asset link preserved for rollback; public downloads, the spectator and shared assets are unchanged. Full environment acceptance remains open, including underwater fog, lighting transitions and remaining sky layers. No percentage credit is awarded for an unfinished whole check.

Rust QA monk-guild interior with the corrected North vertex-color export and LuSun visible
Corrected assets loaded and inspected in normal play; walking, targeting, walls, floor, textures and LuSun remain present. This is asset-conversion verification, not a claim of final matched lighting or NPC appearance.

Temple pond: swimming repair in QA, not yet accepted

Original Titanium was tested in the Temple of Life pond using ordinary movement. Its authored body/head water regions match all 18 checks at nine captured positions. The character dives by looking down, resurfaces by looking up, and returns to the bank. Read-only inspection records air falling from 50 to 41 underwater and refilling to 50 after resurfacing.

The Rust client’s simplified floating ignored Swimming skill and look angle. The new candidate uses the original water-motion coefficients, server-sent movement speeds, skill 50, look-directed ascent/descent and the source shore-exit impulse. The skills window also mislabeled Pick Pockets as Swimming and Swimming as Taunt; these now use the correct IDs 50 and 73.

Live test found a timing failure: applying drag once per rendered frame caused excessive coasting at 7–8 FPS. That candidate was rejected. The revised adapter samples the original configured 100 Hz motion independently of rendering—an explicit modernization of the old frame-rate-dependent behavior. Actual North geometry tests now produce the same dive and stopping results at 5, 7, 10, 30, 60, 100, 144 and 200 FPS. Four geometry/wire tests and 266 library tests pass; two pre-existing library tests remain ignored.

The revised Linux QA build has now been inspected live at 7–8 FPS. The ordinary Human enters the pond, stops after release, dives to the original −16-unit floor, resurfaces and returns to the dry bank. Three consecutive underwater receipts show identical coordinates and zero velocity; 279 body/head/motion samples are retained. The corrected Skills window shows Swimming 100 and Taunt 0, matching this character’s server data.

Rust QA Skills window showing Swimming 100 and Taunt 0 on the Temple pond bank
Inspected live skill-ID repair; these are this character’s actual values.
Rust QA looking down at the Temple pond bottom after a normal look-directed dive
Movement fixture reaches the original pond floor and stops without penetrating it. Underwater appearance and breath UI are not yet accepted.

Breath integration: first live drowning fixture passes

The QA client now reads profile air, signed equipment stamina, food/drink, worn effects and buff caster metadata. Breath uses the authored head region, not the camera or body region. Its original ANSI spell table contains 7,872 records; actual Enduring Breath and Stamina effects pass source-file tests. Unknown required inputs suspend damage with a visible warning, rather than granting silent unlimited air or guessing damage.

Inspected normal-player tests on September 29 show air falling from 50 to 29 and refilling to 50 after resurfacing. A second dive reached zero. The next breath tick requested 3 damage, and the server independently reported HP falling from 27 to 24. Ordinary swim/jump input returned the character to the dry bank; air refilled to 50 and damage stopped. No immunity, GM privileges, HP/coordinate edits or forced actors were used. The verifier retains 42 consecutive countdown samples and the server HP receipt.

Rust QA underwater with an air meter reading 34 of 50 and full health
Live countdown while submerged. Underwater rendering remains a separate, unfinished visual check.

Original comparison procedure failed: a later Titanium test overran while its monitor was being prepared, and the QA character drowned before the escape input. Its chat shows repeated 3-point drowning hits, but this is not counted as a successful controlled one-tick test. The level-1 character respawned with its inventory; the new corpse contains no items, coins or experience. Both QA sessions are camped. Further timed tests must start their complete supervisor while still dry.

Current checks: 276 library tests pass, two pre-existing library tests remain ignored; all four actual North water geometry/wire tests pass when explicitly run with the original export. Linux release and Windows compilation pass. The first spell loader failed on legitimate decimal teleport coordinates; the corrected loader only interprets breath-related effect payloads. Live bard/equipment spell variants, other water routes, sewer handoffs, low ceilings, race variants and underwater presentation remain open. Only isolated QA is affected; public downloads and the spectator are unchanged. No whole-water or percentage credit is awarded for this partial batch.

Temple of Life: both local portals now work in Rust QA

Normal walking in the original Titanium client confirmed both authored transfers: into the Temple at X −714, Y −168, body Z −10, heading 462, and back to the city at X −153, Y −30, body Z 9, heading 250. Neither reloads North Qeynos. Read-only packet capture verifies the ordered zone-line/departure/arrival history and server-provided destination records.

The first Rust candidate still missed the thin entrance trigger. The original executable checks a lower region point, not the body origin. That calculation is now source-guarded for the measured standing Human. Actual-asset ordinary-walk tests and the live Linux round trip pass, including floor settling, destination heading, server-saved positions and no repeated teleport. Both live views were inspected. 259 library tests pass, two pre-existing tests remain ignored; Linux release and Windows compilation checks pass.

Original Titanium inside the Temple of Life after normal portal traversal
Original: Temple interior after entering the ramp portal.
Rust QA inside the same Temple with geometry, Balhallia and the central portal visible
Rust QA: working local entrance. Lighting differences remain open; this is not complete visual parity.
Original Titanium returned to the Temple courtyard
Original: normal return portal.
Rust QA returned to the original Temple courtyard arrival point
Rust QA: normal return, correct heading and floor, no zone reload.

Candidate 3e980734 is isolated QA only. Production spectator and public downloads are unchanged. Other race/size/posture hulls remain unverified. A separate server defect logs legitimate transfers as “Possible Hack” in both the original client and Rust; no detector was disabled, no warning erased, and no immunity or GM transport was used. Full local-transport acceptance therefore remains open. The complete plan and checklist retain these remaining requirements without increasing the percentage for this partial fixture.

Server repair staged, not yet deployed: all 6,563 map-tree nodes were compared with the original source. The candidate checks the authored departure region, matching server destination, client version, instance and recent movement before accepting a local transfer. Missing or invalid metadata retains the warning. The four recorded original/Rust transfers pass alongside rejection controls: 10,278 sanitizer-backed checks and 24 actual map-loader tests, including preservation of sewer water behavior. Full dependent rebuild and isolated linking pass. Active server executables, rules and stored warnings are unchanged; runtime acceptance awaits the pending maintenance decision. This is not a completed live-server fix and adds no percentage credit.

Dranom and Aenia: eye height and bed support repaired

Dranom’s original red outfit and bearded face match the Rust asset selection. The comparison exposed a separate camera error: native used an eye height of 5.52 units for this Human, while Titanium uses 7.44. Read-only tracing of the original camera confirmed its 6.2-unit base height multiplied by actor scale, and its ordinary downward look-pitch bias. Both calculations are corrected in Rust.

The Linux QA build was inspected at the same saved character position. Dranom’s standing height and the room now align closely after allowing for Titanium’s window border and coordinate quantization. This is not pixel-perfect lighting or animation acceptance. That comparison exposed Aenia sitting below the bed; the follow-up repair and live retest are shown below.

Original Titanium Dranom standing beside Aenia seated on the bed
Original first-person reference; camera and actor geometry were measured read-only.
Earlier Rust candidate before bed-support repair: Aenia is visibly too low
Before bed-support repair. Kept as the reproduced failure, not the current accepted position.

Read-only inspection confirms that Titanium raises Aenia from the server’s Z 3.75 onto the original bed surface, rendering her at Z 6.052521. Rust now resolves the same nearby solid support without changing server coordinates, model scale or the sitting pose. A first candidate failed because ordinary NPCs use land/water gravity mode 3; the corrected interpretation was rebuilt and retested. Flying, dead, moving and submerged actors are excluded from this conservative support repair.

Titanium reference: Aenia seated on the bed beside standing Dranom
Original client at the normally saved player position. Both the actor and renderer positions were verified read-only.
Native Rust live retest: Aenia now sits on the bed rather than below it
Actual Linux QA candidate 6b5284f: Aenia’s visual Z is 6.052521, matching Titanium; Dranom is unchanged. 250 library tests pass, two ignored; wire/geometry integration, Linux release and Windows compile checks pass. No public executable or spectator deployment.

This accepts the reproduced Aenia support fixture, not every model, moving actor, camera posture or lighting condition. Two citizen/face fallback cases and the remaining full-appearance matrix continue below; overall North coverage remains 52%.

First-person furniture collision repaired and compared live

Titanium traces a 1-unit camera sphere from the character’s body toward its intended eye and separates it from a hit by 0.001 units. Rust previously omitted this first-person trace. The dedicated repair checks solid zone and current door geometry without changing character coordinates or the spectator/chase rig. Source hash/byte checks confirm the original radius and separation; triangle faces, edges, vertices, winding and clear paths have regressions.

A ray-only first attempt failed the ceiling test and was corrected before QA installation. The actual room ceiling is at 12 units: the radius-aware native probe returns 10.999001. The live original furniture-edge reference has standing pose 100, idle animation 71, and its eye clamped to body Z 3.751990. The native relogin at the quantized saved position reproduces Z 3.750000 and the low view below. Walking clear normally restores eye height 7.440000.

Original Titanium standing character camera clamped low beside furniture, looking at Aenia and Dranom
Original standing collision reference, with read-only position and pose receipt. A separate crouched tabletop capture was excluded from this acceptance.
Rust first-person camera reproducing Titanium’s low furniture-edge view
Inspected native QA 8facc29c. 252 library tests pass, two previously ignored; original-source/asset tests, Linux build and Windows compilation pass.

This closes the reproduced furniture-edge camera defect, not full camera parity. The Human sitting/crouching follow-up is below. Low-headroom automatic posture, all races, moving-door cases and exact lighting remain open. Production spectator and public downloads are unchanged.

Sitting and crouching: measured original/native comparison

Titanium uses the full animated head attachment for sitting, including its horizontal shift. Rust previously applied only a vertical offset. The repaired Human sitting eye now agrees with the original within 0.002 world units at the same saved position. The old calculation fails the reference by over 0.4 units.

Original Titanium first-person sitting view beside Dranom and Aenia
Original pose 110, animation 33: eye Z 3.381045, measured read-only.
Native Rust first-person sitting view after full head-attachment correction
Native QA: eye Z 3.379391; original floor offset accounts for 0.001 of the difference. Horizontal errors are below 0.001. Lighting and idle-animation differences remain separate work.

The live reference also caught an input mistake before acceptance: Titanium’s /duck is a social emote, while its C key toggles crouching. The native candidate now has a separate rebindable crouch toggle, default Z to preserve existing C/X bindings. Original crouched eye Z 3.751000 and native Z 3.750000 agree within the floor offset; toggling back restores native eye 7.440000 without moving the player.

Original Titanium first-person crouch view, pose 111 and animation 24
Original persistent crouch: body-height eye, not the /duck social emote.
Native Rust crouch view at the same saved player position
Inspected native crouch and stand-up recovery. 254 library tests pass, two previously ignored; original-source/asset tests, Linux release and Windows compilation pass.

This accepts the tested Human sitting/crouching eye positions and recovery only. Looting, combat/mounted camera branches, automatic low-headroom posture, other races and full social-emote/input parity remain open. QA build 56b5381 only; production spectator and public downloads are unchanged. No whole-check or percentage credit added.

Natural evening shift verified

The ordinary Rust-client player observed the day pair Leanon/Erabb followed by the night pair Quinon/Dagarok, with approved target selections and the outgoing names absent afterward. Persisted live condition values agree. The 80-second recording and inspected captures required no clock changes, forced NPCs or character relocation. Morning, night startup and separate daytime restart were already checked; combat/respawn interruption and exact historical North-specific boundary hours remain open.

Citizen outfits and the cellar return route

The normal native player walked back from Pelshia through the cellar corridors, stairs and door 74 to Crow’s bar, without teleporting or bypassing collision. This completes the tested cellar route in both directions; other passages and full original/native route comparisons remain open.

Sabnie’s leather outfit and cap now have inspected Titanium/Rust captures at the same saved player position. Nerissa also returned on her untouched patrol, allowing a live purple-robe, gold-trim and cap comparison. Together with Pelshia’s plain outfit, three of the four female-citizen base variants have inspected clothing matches. Whysia’s texture-5 case remains open. One matched citizen does not certify every NPC or equipment variation.

Original Titanium Sabnie behind Crow’s bar wearing the leather outfit and cap
Original Titanium: Sabnie selected at the saved ordinary-player position.
Original Titanium Nerissa back at the tavern in her purple robe and leather cap
Original Titanium after Nerissa’s normal patrol return; HUD hidden for a clear outfit view. No NPC, clock or route changes.
Native Rust Sabnie wearing matching leather behind the bar, with purple-robed Nerissa in the foreground
Native Rust: matching clothing selections. Camera height, exact faces, lighting and animation remain separate acceptance items.

Source-asset regression covers the base, leather-cap and robe geometry, original texture dependencies and complete cloak panels. It passes with the installed Titanium export; the earlier hand-orientation regression also passes, and the new test compiles for Windows. No public executable or production spectator was replaced.

Complete North static-appearance dependency inventory

126 required NPC definitions, including the script-only fire hatchling, produce 54 static appearance variants and 47 loaded asset combinations. All load nonempty geometry and decoded texture dependencies through the actual native resolver. This is dependency coverage, not complete appearance acceptance.

The separate equipment inventory now traces 131 potentially equipped loot paths across 56 NPCs and 41 items. All 22 current held-model dependencies load and decode; seven armor-item candidates still require per-actor material and live equipment checks. The audit respects NoPet and slot restrictions but deliberately overcounts possible loot outcomes rather than claiming to reproduce each random roll.

A historical-model review found 15 item-specific weapon mapping candidates against the installed Al’Kabor/TAKP references. Their 23 candidate model dependencies also load. These related reference databases are not independent historical proofs; no shared item rows or runtime cache were changed. A first-hand EQEmulator investigation confirms the distinction between Classic dagger model 5 and newer 10650. Fire Beetle Eye’s conflicting no-model reference remains separate. Original/P99 appearance evidence and controlled cache activation are still required.

Henlom’s face 3 and Berane’s face 7 now have inspected original/native comparisons at their normally saved player positions. Both correctly retain the authored gray-haired, gray-bearded QCM face, green shirt and brown apron, as Titanium does. No appearance database change was needed. An actual-asset regression covers both requested faces and retained head/body textures; it passes and compiles for Windows. This accepts their base appearance selection, not lighting, every idle frame or equipment.

Original Titanium Henlom gray beard and apron
Henlom: original Titanium.
Native Rust Henlom matching gray beard and apron
Henlom: inspected native comparison.
Original Titanium Berane gray beard and apron
Berane: original Titanium.
Native Rust Berane matching gray beard and apron
Berane: inspected native comparison at the saved position. Lighting remains open.

Two source-fallback cases still need original comparison: Whysia’s skin 5 and the mangy rat’s face 1. Dranom’s requested face retains the same source face as Titanium while preserving all 13 real skin-2 body substitutions; a regression test covers that combination. Beetle skin 1 is already present in the base export, not missing. Loot-driven equipment remains to be reviewed for 73 NPCs; one has tint metadata and two have explicit held-item IDs.

Pelshia: original-client comparison repaired two native defects

Titanium reports Pelshia as apprehensive. The native client incorrectly interpreted the server’s reversed four-rank faction wire ordering as the internal faction enum. Decoding is corrected, all nine ranks and short packets have regression coverage, and fresh normal-player native login now shows apprehensive while her shop still opens. No server faction was changed.

The same matched-location comparison exposed a model error: native substituted QCF for the missing registered QCN actor, giving her a light blouse, purple skirt and black hair. Titanium displays the original HUF blue bodice, white collar and brown hair. The corrected native fallback now visibly matches that model; male and neutral citizen mappings are unchanged. This accepts Pelshia’s texture0 fixture, not every citizen armor/robe variant or exact lighting.

Original Titanium Pelshia with blue bodice and apprehensive con
Original Titanium at the saved ordinary-player position.
Native before model repair showing the wrong light blouse and purple skirt
Before model repair; faction decoding already corrected.
Native after model repair showing the original blue bodice and apprehensive con
Inspected live retest.246library tests, Linux release and Windows all-target compilation pass. Only isolated QA updated; no public executable or production spectator replacement.

The separate scroll-stack repair uncovered a server reload defect: world and zone handlers loaded a different database object from the one gameplay reads. The attempted108-item/cache update was fully reverted; every item field and all113server process mappings were verified restored, with no process restart. The QA account’s temporary maintenance privileges were removed. Both reload handlers are now corrected in source and compile successfully, but corrected runtime deployment and normal-player scroll acceptance remain open. The holdings audit covered12named stores; earlier prose saying13was a counting error, not an additional checked store.

Underground stock verified; five later-era scroll gates repaired

Normal cellar traversal through door74, both stair sections and the lower guild hall reached Pelshia without teleporting or bypassing collision. Her16-entry shop displays the restored Renux’s Translations at840c, with a nonstackable1/1 limit. No purchase or fixture funding was used. All five restored North stock entries now have inspected native display evidence.

Pelshia’s native shop showing the restored Renux’s Translations in the underground guild
Actual native stock test. The incorrect hostile con message and citizen model in this earlier capture are repaired and verified in the newer comparison above.

Balhallia’s Reanimation, Reconstitute, Reparation, Renewal and Restoration scrolls were incorrectly configured to unlock with Velious. The March19,2002 patch and contemporary Qeynos reports place that resurrection line after the supported ceiling. Only those five merchant gates changed from2to3. Full inventory rollback rehearsal and readback pass; Classic and Kunark stock is unchanged, and the modeled Velious inventory no longer exposes them. No expansion was enabled.

Merchant quantities: bulk purchase, partial sale and buyback verified

The native shop now selects an item before purchase, shows available stock, provides bounded quantity controls, and quotes the complete purchase cost. The live Crow test bought20 brews in one transaction for740c; sold7 for168c, leaving13; and bought those7 back for259c. The UI and server inventory, stock and coin balances agreed at every step. Sold-out stock disappeared immediately; closing and reopening preserved depletion.

Native merchant UI selecting all20 available Crow brews and quoting740c
Actual in-game quantity selection before the bulk purchase.
Native partial sale receipt:7brews sold,13remaining,428c in the wallet
Partial-stack sale verified against server records.
Native buyback selection limited to7brews, matching the merchant’s returned stock
Max is bounded by the real remaining stock, not just the item’s20stack size.

A nonstackable Keg of Beer remained1/1. Insufficient funds removed the Buy action, and clicking that area changed no inventory or money. After normal camp, all20test brews and169c were removed with recoverable backups; the eight earned items were preserved.244library tests pass, as do all-target Linux and Windows compilation checks. The screenshot utility’s old merchant call was also repaired and rendered successfully. No public client or production spectator replacement.

A separate server-era defect is now tracked:113scroll definitions in North’s vendor catalogs are stackable;108belong to supported eras, and five are a later resurrection line now gated beyond Velious. The preserved September2005 official patch announcement places that feature after Velious. Twelve persistence stores were checked with no matching holdings found. The108supported-item repair passed a guarded transaction rehearsal and full rollback readback. The item metadata and shared runtime cache have not yet been changed; this needs a coordinated, verified repair—not a client-only workaround. Natural Crow death/respawn, other merchant cases and full release acceptance remain open. These partial service tests do not certify the entire merchant check.

Market route: close-wall regression repaired and visually retested

Visual inspection paused the vendor route when terrain disappeared beside the market wall. The original mesh is present and selected by visibility: its surface was only0.746units ahead, inside the candidate’s measured Titanium near clip of1.0. The previous native0.5wall clearance was incompatible with that projection.

Running original Titanium with the same character and saved position reproduced foreground clipping there. After normal movement away and back, Titanium stopped1.78units from the wall and kept it visible. The native human clearance now uses1.75in both collision stages; a separate endpoint-crossing regression was also repaired. The exact original-asset test fails before and passes after.238library tests, the previous guild-ledge fixture, original door asset test and Windows compilation check pass.

The rebuilt native client passed the live approach: it now stops at x228.375,y155.744 with the wall still covering the view. Normal movement back into the street also works. This is a camera/collision acceptance fixture—not matched lighting, every race/size hull, full city traversal or packaged-release certification.

Before: native market wall approach exposes floating props and missing-looking terrain
Failed normal route, inspected before repair.
After: native normal approach stops at the visible green market wall without exposing the world behind it
Inspected live retest. Stop positions differ because corrected collision holds the player farther from the wall.
Original Titanium normal approach to the same market wall, which remains visible
Original Titanium reference; not a pixel-aligned lighting comparison.

Separately, Ania’s fresh native shop now visibly includes the restored Fish Wine among15entries. Dren’s restored mold has also passed its native stock check; Henlom and Berane have now passed too; Pelshia’s restored book has now passed too after normal cellar traversal. Full price/charisma acceptance remains open. No production spectator or public download has been replaced.

Native North Qeynos shop showing Ania Klephia’s restored Fish Wine among15stock entries
Inspected stock display after an empty-zone refresh; not a complete merchant certification.

North vendor follow-up: five stock repairs and one progression gate

Fresh audit covers all25 North vendors. Reading both NPC lists and item-page vendor tables resolves the old evidence gap: all25 have explicit stock references. Gerault’s six shoes/boots are listed on the item pages even though his NPC page says None. Explicit spell aliases such as Instill/Enstill and Invisibility vs/versus Undead are resolved without inventing duplicate items.

Four missing rows are restored: Strike at Henlom, Soothe at Berane, Dual-Edged Blade Mold at Dren, and Renux’s Translations at Pelshia. Ania’s Fish Wine is ungated for Classic. Entire affected inventories passed guarded rollback rehearsal and readback; item prices and other vendors were preserved. All five repaired entries now pass inspected native display checks after an empty-North refresh.

Separately, Imbue Opal at Balhallia now unlocks with Kunark rather than Velious. Classic remains excluded; no expansion was enabled. Remaining ambiguous inventory, prices, natural restock cycles and release-package tests are still open. These extend already-tracked database repairs; they do not turn the whole merchant check green or manufacture a percentage increase.

Dren’s restored Dual-Edged Blade Mold is now visually verified on page two of his19-entry native shop. Ordinary entry and exit through Ironforge door20 also pass with the corrected human clearance. This stock-only test made no purchase and used no fixture funding. Henlom’s Strike (50c) and Berane’s Soothe (70c) have now passed native display checks. Both temple doors and the complete exterior-to-Henlom re-entry passed normally. An initially blocked straight approach ran into the door’s swing, which original Titanium reproduced; the corrected side-entry route needed no client or database change. Pelshia’s restored Renux’s Translations now passes native display at840c in her16-entry shop, with nonstack1/1 and insufficient-coin behavior intact. The quantity candidate has now passed its recorded live transactions; see the newer quantity section above. Full merchant and release acceptance remain open.

Native Dren Ironforge merchant page two showing the restored Dual-Edged Blade Mold
Inspected native stock display; prices and complete merchant lifecycle remain separate checks.
Native Henlom Visrek shop page two showing restored Strike at five silver
Henlom:19 stock entries; restored Strike inspected on page two.
Native Berane Constarg shop showing restored Soothe at seven silver
Berane:15 stock entries; restored Soothe inspected. No purchase or fixture funding in these stock-only tests.

Crow live merchant test: two native defects repaired

Two complete buyouts each delivered20 brews and charged740c, with stock, inventory and money checked after every purchase. Empty-zone restart restored20 through Crow’s normal spawn script. The first test exposed a stale sold-out row: native parsing rejected the server’s16-byte removal packet. The repaired parser accepts both verified12/16-byte layouts. The rebuilt client removed the final brew immediately in the still-open shop; reopening and a fresh login correctly retained zero stock.

North Qeynos native merchant window immediately after the twentieth purchase:10 entries, no sold-out brew,260 copper left
Inspected live retest. The shop stayed open throughout all20 purchases. Each run used a declared temporary1000c fixture; all test brews and remaining money were removed after camp, preserving earned items.

Crow’s broken “%T2” greeting was a second client defect. Titanium’s extracted string table and server call site establish nested string lookup using the original argument indexes. The repair now displays Crow’s message, player name and item suggestion.237 library tests pass,2 are ignored; Linux release build and Windows cross-check pass. These are isolated QA builds, not accepted public releases.

Native client showing Crow’s readable greeting naming Northaudit and suggesting Brandy
Greeting inspected after closing the shop so the whole message is visible. The old cached Kunark welcome remains a separate display issue; active progression is Classic.

A reference-audit defect also exaggerated missing vendor evidence: ordinary wiki links were skipped. The corrected parser initially found24 direct NPC inventories. The subsequent item-page reverse audit resolves all six of Gerault’s entries, giving all25 North vendors explicit references. This is source coverage, not full historical acceptance. A further regression now keeps ordinary Club separate from the no-drop starter Club*, reducing unexplained stock entries from16 to15 without deleting inventory. Crow’s death-and-respawn restock, every vendor price/quantity case and release acceptance remain open, so this batch does not mark the whole merchant check complete.

Dependency batch: three class-era spell gates repaired

The full North completion plan assigns all29 existing checks, with server-content, encounter/service, route/presentation and actual Windows/Linux release phases. It adds no credit by itself.

A fresh dependency snapshot includes90 North scripts,151 NPC definitions including the script-only hatchling,79 loot tables,117 loot drops,1185 drop entries,823 item records and inherited NPC spell lists. Runtime eligibility is evaluated separately from structural references. Loot uses the server’s all-flags runtime filter; spawn/global-loot/spell queries use their actual SQL filter. Regression tests cover that distinction.

Three confirmed Velious spells are now gated until expansion2: Corporal Lancot’s Flame of Light1454, and Lieutenant Dagarok’s Grim Aura346/Shroud of Pain1458. Private copies preserve the original shared lists and every unrelated field. Classic/Kunark/Velious matrices, guarded rollback rehearsal and full-row readback passed. This accepts the reviewed database gates, not complete live spell behavior.

Sources: Flame of Light and the P99 class-specific NPC spell discussion. The latter conflicts with the global wiki’s Kunark label for an Enchanter’s Paralyzing Earth. An initial Umvera restriction was reversed before the next North boot; his original list is retained while that conflict remains open. Human Blood was also preserved: its reference identifies it as Classic despite a Kunark database annotation.

The script audit also found our hatchling’s original ID2160 was reserved in a disabled Omens quest. The new actor now uses2000913, checked against DB and all installed quest references. No pre-existing NPC or old quest was removed;977 encounter-script assertions still pass. Only empty North was unloaded. Queen live combat/tuning, complete loot/faction/spell acceptance and public client releases remain open.

Umvera restored to Crow’s tavern — live placement and hail passed

The official June 2012 P99 correction places Umvera Dekash in North Qeynos, not South. His existing spawn was moved to Crow’s lower room at x364, y36. Original terrain confirms floor height 0; body-center Z3.75 was retained. His original quest was copied byte-for-byte into North, preserving both hand-in branches and rewards. Script tests and guarded database readback passed.

An ordinary native-client player entered through the tavern door, walked around the bar and pillars, selected Umvera, and received his named hail response. The image below was inspected. This passes relocated presence and greeting—not exact appearance/facing, full quest prerequisites, timer or every tavern object. Both cities were unoccupied and unloaded for the migration. One obsolete South NPC cache record was backed up and removed to prevent a duplicate; no player corpses were touched.

Native North Qeynos client showing Umvera Dekash inside Crow’s tavern with his working hail response
Normal level-one QA player, no teleport, immunity or collision bypass. Production spectator and public client downloads unchanged.

North-only batch: full roster and beetle encounter

Open the complete roster audit: all150 referenced NPC types. After Umvera’s relocation, the fresh database pass covers193 spawn points, with125 eligible NPC types and25 blocked by the current Classic filters.107 eligible types have an NPC reference;18 unmatched names are individually classified. Disabled holiday content is separated from encounterable roster problems. Catalog coverage is not historical acceptance.

Five guarded database changes were applied together: two Klicnik worker variants corrected from levels3/4 to2 across nine spawn points; Queen Klicnik gained a dedicated Fire Beetle Spit list; and a new script-only hatchling supports her missing death encounter. The two quest scripts spawn three or four hatchlings at the actual death position, expire idle hatchlings after30seconds, and preserve engaged ones.977 script assertions, transaction rollback rehearsal and complete-row readback passed. Only empty North was unloaded; other zones and the spectator were left running.

Sources: the March2010 P99 correction and May2010 fire-proc correction. Worker levels follow the explicit patch; the wiki’s uncited2–3 range is recorded as conflicting evidence. Exact hatchling size/statistics and proc frequency remain provisional. Worker HP/damage, queen placement/timer, and the complete live encounter are not accepted. The headline percentage has not been inflated for installing unverified behavior.

The native client entered the fresh zone successfully. Its first gate traversal was interrupted by Fippy killing the ordinary level-one QA character; the normal bind return completed. This is not counted as a worker or queen acceptance result.

Follow-up: daytime restart accepted

After normal camp and an empty-North restart at07:42 game time, Leanon and Erabb returned on the correct day shift. Both accepted normal target selection and indifferent con replies. The outgoing night spawn records remained disabled; no clock or character position was edited. This is roster/condition acceptance, not certification of every NPC appearance, patrol or historical shift boundary.

Native North Qeynos gate with Leanon Ruksey level14 selected and an indifferent con reply during the day
Ordinary-player daytime gate check before the restart. The subsequent restart independently reconfirmed Leanon and Erabb. No whole-zone visual-match claim.

Hewet’s live greeting check remains pending: his unchanged50/50 group selected Guard Liben on this boot. The new greeting was not credited as a completed live playtest, and no NPC was forced into place.

North-specific server repair: bard and guard shifts

Two spawn groups were selecting their day/night NPCs randomly at all hours. Leanon now uses the day condition and Quinon the night condition; Erabb and Dagarok likewise alternate by shift. Existing positions, patrol grids, NPC statistics and quest rewards were preserved. The documented roles come from the 2013 P99 bard correction, 2019 Dagarok correction and Erabb reference.

A North-only controller derives the active shift from the current zone clock, disables the outgoing pair first, and avoids replaying stale dated events. Tests cover every game-minute with four initial condition states, startup, invalid clocks and zone/instance isolation:46,098 assertions passed. The database migration passed a rollback rehearsal and complete-row readback. Only two cached NPC-state records were invalidated, with backups; player corpses and other zones were untouched.

Live verification: normal login at05:25 game time loaded Quinon and Dagarok. After the natural morning change, Leanon and Erabb appeared and the night pair was absent. No clock changes, teleports or forced NPC placement. The06:00/20:00 boundaries follow Qeynos guard-shift observations and the existing South configuration; applying those exact boundaries to North remains an explicit inference. A full evening cycle and interrupted-combat cases are still open.

Further North findings: the March2010 P99 patch replaced Klicnik warrior/noble spawns, but three remain in this database. Their exact replacement identities are still being researched; no guessed substitute has been deployed. Separately, Guard Hewet’s missing hail response was restored from the archived North guard dialogue; script tests pass, live greeting acceptance is pending.

Current roster checks and remaining work

Zone restoration versus shared-client repairs

Packet decoding, loot-window handling, camera projection and common rendering fixes affect the whole Rust client. Finding and testing them in North Qeynos does not make them North Qeynos-specific content changes. The ledger labels these shared-system checks and displays server/database, client and end-to-end acceptance separately. Its headline remains combined checklist coverage, not a percentage of historical accuracy; no scores were increased merely for this reporting change.

North-specific work includes its NPC roster and placement, day/night shifts, merchants, quests, factions, patrols, original local assets, doors and connections. Shared repairs do not automatically complete another zone's checks. The two confirmed bard/guard pairs are now condition-gated; exact historical North shift boundaries and the remaining roster still need verification.

See the separated North Qeynos checklists and scope labels

Latest: North Qeynos 52% — still in progress

The complete29-check plan is published and execution continues. Three confirmed class-era spell gates now pass database acceptance; inherited spell/loot/script dependencies are inventoried. Umvera’s disputed Paralyzing Earth restriction was reversed before zone boot. Full encounters, every route and actual release-package acceptance remain open.

Full completion plan · Latest content batch · Whole-roster audit · Earlier shared-client movement fix · Current calculated checklist

The reviewed spell gates raised detailed accepted checks to36/83 and weighted coverage to52.36% (display52%). New subchecks retain the same top-level weight; no planning or unverified behavior earns credit. This headline is generated from the same data as the zone ledger. Progress measures weighted verified checks, not visual fidelity or remaining effort. Earlier sections retain historical percentages. Production spectator and public client downloads have not been replaced.

Discarded movement packets: reproduced and repaired in QA

A normal field encounter exposed an attacker whose visible location did not match its actual server location. The network receiver accepted reliable messages but discarded unsequenced application datagrams, including raw children inside bundled packets. This allowed damage and attack animations to arrive while the actor remained at a stale position.

A bounded, read-only capture confirmed actual movement traffic in both paths. Native decoding now handles their distinct compression offsets, checks checksums, preserves the reliable sequence and acknowledgment state, and supports the separate application-bundle length formats. Malformed packets and oversized decompression are bounded. All 98 datagrams in a follow-up capture passed checksum verification. Eight transport regressions also cover corrupt reliable/bundled traffic and nested length bytes.

The normal QA character walked from the guild through the streets into the field. This inspected 12-second fixed-camera recording shows actors moving across the scene after the repair. Repeated rat selections also received changing live positions. This passes the stale-position defect, not exact stride, every patrol or complete animation equivalence.

Isolated Linux QA, ordinary level-one player. Software-rendered display; not the production spectator or a frame-rate benchmark.

A second decoder repair replaces guessed bulk-spawn sizes with Titanium’s exact 385-byte records. Truncated records cannot partially populate the world. The combined candidate has 226 passing library tests, plus successful Linux and Windows compilation checks; fresh login and ordinary guild-to-field traversal have also passed.

The client also no longer invents periodic swings merely because auto-attack is enabled. Out-of-range requests leave the avatar idle while the server rejects the attack. The later field kill and item receipt are documented below. Coin looting, corrected corpse-window retesting, every patrol, exact animation matching and public-release acceptance remain open.

Field kill and item delivery verified; corpse UI repair in testing

The CRC and exact-spawn candidate completed a fresh login and the normal guild-to-field route. The ordinary level-one QA character killed a grass snake at04:43:33UTC after moving around a tree and facing it. Server damage/death receipts identify the player as killer, and the native experience bar and chat updated. Snake Scales were then looted with a normal click and verified in the server inventory.

Visual inspection caught a remaining bug: the item icon stayed in the corpse window after delivery. The repair now requires both a matching loot-request echo and actual inventory delivery before removing the slot. An echo alone cannot prove success because the server also echoes rejected requests. Three new regressions pass;232 library tests pass,2ignored, with Linux compilation successful. The corrected UI still needs a live rebuilt retest. Coin looting, wider combat and animation coverage, and public-release acceptance remain open.

Native Rust client showing a grass snake kill, experience gained and Snake Scales loot message, with the stale corpse icon visibly still present
Inspected before-fix evidence. No GM protection, teleport or coordinate edits. This is not a claim that the entire combat and loot system is finished.

Original star layer rebuilt and inspected live

The original client generates10,000 point stars and200 textured sprites. A bounded read-only capture verified every point position, color and color-map index exactly. Sprite texture coordinates and map indices match exactly; all800 sprite vertices are within0.000072 world units of the original floating-point result. The original atlas, day-angle rotation, source-alpha blending and six-second twinkle now render in Rust, before horizon haze.

GPU checks cover daytime/weather-map alpha, atlas modulation, foreground depth, camera translation and twinkling. The actual North/South day maps hide every star; their night/rain maps retain the authored visibility. Both live views below were inspected at the same ordinary saved character location, but camera angle, time and procedural random seed differ: these are not pixel-aligned comparisons. Clouds, sun/moon layers, final terrain illumination and public packaging remain unfinished.

Original Titanium point stars and textured star sprites above North Qeynos
Original reference, with the earned Snake Scales item still on the cursor.
Rebuilt native Rust point stars and textured star sprite above the North Qeynos wall
Inspected native candidate0b48d89, same normal player location. Foreground stone remains in front of the sky.

Original sky and horizon rebuilt — remaining layers open

The original Titanium renderer was inspected read-only at the same North Qeynos field location. Its sky is a vertex-colored mesh; the DDS color maps also carry separate fog and horizon metadata. Native Rust now reproduces all962 original color lookups, the5583-index dome and65-vertex horizon fan. All1024 pixels of both captured sunset and night color maps match byte-for-byte. The original cloud luminance/alpha format also now decodes without losing pixels; all29 extracted sky textures load.

The horizon uses the original camera-height settings and encoded-color alpha blending before conversion into the modern linear renderer. GPU checks cover camera movement, foreground depth and27 independent sky/haze color samples. Titanium’s separate one-based sky-hour behavior is retained without changing the server or UI clock.215 library tests and Linux/Windows compilation checks pass.

Live native night rendering was inspected at the normal saved field location. These images are not pixel-aligned or taken at identical times. Stars, clouds, sun/moon sprites, weather effects, exact terrain illumination and final package acceptance remain unfinished. The original image makes the missing stars and lighting differences visible; these are not being marked complete.

Original Titanium night view in the North Qeynos field with stars and dark blue terrain lighting
Original reference at the same player location. Different camera pitch and capture time; not a pixel-match certification.
Native Rust night view with restored blue sky and horizon, with stars and exact terrain lighting still unfinished
Inspected native QA build a1e21b9. No GM travel, server time change or character-position edits.

Both hands restored; mirrored world avatars repaired

The same normal character stood on the North Qeynos cobbler street in both clients. Titanium places the primary club on the right and the secondary lantern on the left when viewed from behind. The native client initially omitted the secondary item, then exposed a reversed lateral character axis. The world transform now preserves heading, position and height while correcting anatomical left/right. Color and shadow face-culling also account for reflected instances.

Live normal turning/walking preserves the correction. Both props appear in the inventory preview with the same animation sample as the body.203 library tests pass; actual original character bones pass15 pose/heading projections, and the GPU suite passes reflected-instance color/shadow tests that failed before the repair. Linux and Windows compilation checks pass. Shield mounts, exact item orientation, item light, every race/outfit and final packaged releases remain unfinished.

Original Titanium behind the monk at the cobbler street, lantern on the left and primary club on the right
Original reference. Camera distance and illumination are not matched to the native image; this is a handedness comparison.
Native Rust live monk at the same street with both items restored to the same left and right sides as Titanium
Inspected native QA build. No character inventory, terrain or server position edits were used.
Native inventory preview showing both the primary club and secondary lantern
Both preview slots now render. Whole appearance parity remains open.

Server audit: four more fixed-level corrections

The audit was skipping exact numeric values when a source citation followed them. The parser now retains cited numbers while rejecting ranges, uncertain values and mixed normal/triggered levels;15 regression cases pass. This does not automatically promote wiki fields into database edits.

Reviewed corrections: LuSun and Roesager Thusten61→50; Guard Gehnus and Guard Hezlan50→45. Their current P99 pages corroborate the dated snapshot. The pages’ linked historical archives could not be fetched, so independent historical-page confirmation is not claimed.

All four are scoped to North Qeynos. Expected-state guards, rollback rehearsal and complete-row readback pass; every other field is preserved. After the normal QA character crossed into South, North had zero players and was unloaded to refresh its cached NPC data. That resets North NPC/timer state; no world or other-zone restart occurred. On return, all four corrected levels were inspected in the native target UI from fresh server spawns. This is level acceptance, not close-range model or combat acceptance. Variable levels and complete combat statistics remain open.

Both South exits and the Hills round trip now pass

Normal native travel has completed both North→South→North routes and North→Qeynos Hills→North. The eastern South route held stationary at South(-80,586) and North(356,-26). The Hills route loaded the correct terrain and NPCs, then two stationary receipts matched at(69.25,-220), settled feet-7.844. After walking back through the original boundary, two North receipts matched at(72.375,1395), feet0. No movement input was carried through loading.

The original Hills attempt was interrupted by Fippy and exposed a same-zone respawn defect. That was repaired and tested before this successful repeat. Guild ramps, street corners, gate and field were traversed using normal movement; blocked views were inspected. No collision bypass, GM travel or database position edits were used. Sewers and original local teleports remain open; this is travel acceptance, not complete zone rendering or gameplay acceptance.

Live repair: combat, death return and empty-corpse recovery

Three concrete protocol defects repaired: auto-attack now sends the required four-byte packet; keyboard targeting completes the server-approved target exchange; death return now performs the full zone handshake even when the bind point is in the same zone. Stale target echoes, duplicate bind packets, rejection and timeout have regressions.207 library tests pass; Linux and Windows compile checks pass.

Actual native test: normal target/attack on LuSun caused server-resolved death. Return was approved and loaded a fresh27HP profile, seven inventory items and a new player spawn. Two stationary bind receipts matched; normal movement resumed only on new input. The old corpse stayed separate, Tab selected it, looting opened its empty window, and Done removed that corpse from the server. Inventory remained unchanged under low-level death rules.

This passes the reproduced same-zone-return defect and low-level empty-corpse fixture, not all combat/recovery cases. NPC kill/item/coin loot, experience loss, equipped-corpse recovery, resurrection and final release-package acceptance remain open. Production spectator and public downloads have not been replaced.

Western South exit: round trip and input reset passed

The first real round trip exposed a held-key bug: releasing movement during loading was ignored, so the character kept walking after arrival. Zone transitions now clear held movement and pointer state, and loading blocks movement in both event handling and physics.

The repeated normal-player trip arrived in South at game(-442,464) and back in North at(-5,-151). North remained at that position on a later fresh location receipt with no movement input in between. Movement resumed only after a new keypress. No GM transport, collision bypass or position edits were used. The other South exit, Hills boundary, sewers and same-zone teleports remain open.

Native North Qeynos corridor after a successful return from South and deliberate new movement
Inspected live return route.201 library tests and Linux/Windows compilation passed for this QA build.

Original monk tunic: black tint defect repaired

The same normal character in Titanium shows the original monk chest texture. The native client instead interpreted the item's default0xff000000 color as a black dye. ZeroRGB now means no tint; actual nonzero dyes, including very dark colors, are preserved.

The repaired texture is visible in the native world and inventory. This verifies the reproduced chest-tint defect, not all player outfits or NPC appearances. Titanium also exposed a missing secondary lantern; that rendering repair is under test. Shield mounts, held-item orientation, preview props and light effects remain open.

Native monk inventory preview with the original chest texture visible after repairing the zeroRGB tint sentinel
Live native QA. Item database colors and character inventory were not changed to hide the defect.
The same monk in original Titanium wearing the textured guild tunic and holding both club and lantern
Original Titanium reference. Lighting and whole-outfit parity are separate unfinished checks.

Original departure regions: unwanted city reload fixed

A normal-player walk near(-114,-39) reproduced two unwanted North Qeynos reloads. The native client had treated the server’s arrival coordinates as40-unit departure circles. Local server source confirms that this packet contains target coordinates, not where the player should leave the current zone.

The original exported BSP already records departure volumes and their reference numbers. The client now queries the player’s actual region and resolves its destination by reference number. Regression coverage checks normal temple streets, vertical separation at sewer locations, both South exits and the actual Hills boundary. That original boundary is128units beyond the old database-based trigger.194 library tests, the original-asset regression and Linux/Windows compile checks pass.

The corrected Linux QA build crossed the previously failing location and reached the Temple of Life without a reload. This accepts the reproduced defect repair, not every boundary: live round trips, sewer travel, local same-zone teleports and packaged release acceptance remain open. Same-zone teleport regions currently report unsupported instead of issuing reload requests. Native trade-end handling also now clears stale offered-item slots without manufacturing local refunds.

Normal native QA character at the Temple of Life after passing the former accidental zoning location
Inspected live re-walk on the isolated QA display. The same session also received the live rain-to-clear transition.

North Qeynos: live Prayer Beads recharge passed

Source correction: P99’s official May7,2021 patch restored Tyokan to Priests of Life, superseding the older November2020 Knights of Thunder change used earlier in this audit. Isolated faction group1481 now uses primary341. Guarded correction, rollback rehearsal, readback and fresh empty-zone boot passed. The normal QA character received an amiable con and completed the hand-in. Other merchants and the old shared group remain untouched; kill-adjustment and assistance values remain open.

Live native acceptance: exhausted Prayer Beads were handed in first. Tyokan requested100gold; a separate exact100gold trade then consumed the payment and returned item13296 with exactly1charge. Independent server inventory/currency and both hand-in records matched. Reopening trade showed empty offers with the reward still on the cursor. Temporary QA reward and faction standing were removed after normal camp; earned gear/factions were preserved and backed-up cleanup is reversible.

Native client showing Tyokan’s recharge completion dialogue and rewarded Prayer Beads on the cursor
Actual native QA completion, checked against server receipts. This accepts the two-stage recharge, not every city quest.

The installed script requires amiable for hand-ins and permits scroll-strongbox dialogue at indifferent.46 regression assertions pass. Earlier live cancellation also passed with Whysia:100gold offered and fully refunded, with the reopened UI matching the server. Native trade-end cleanup and original departure-region repairs have194 passing library tests; Linux and Windows compile checks pass.

Only empty North Qeynos was unloaded to refresh cached faction data. No world restart or other-zone reload occurred. Tyokan/Whysia still spawn randomly rather than by day/night; that is an explicit open defect. Other live quest branches, failed-hand-in scenarios and city-wide faction acceptance remain open.

Item9979’s documented candle name/lore, icon, secondary slot and light value are restored in the database. Held model, runtime item cache, race/deity grants, backpack/bandages and fresh-character acceptance remain open. No existing player inventories were stripped.

North Qeynos: live weather and guild exit

The native client previously accepted the12-byte entry weather packet but ignored the server’s8-byte live updates. Both layouts now decode rain, snow and clearing correctly. The HUD’s fixed “Highsun / Clear” text is replaced by server time and weather; the1-based wire clock is normalized to the server’s displayed hour.

190 library tests passed,2 ignored; Linux all-target and Windows compile checks passed. A rebuilt isolated Linux client received live rain with intensity5 and displayed23:30 / RAIN. This accepts packet decoding and status display, not rain particles, exact night lighting or every environmental condition.

Normal North Qeynos player with server-driven23:30 / RAIN status in the native HUD.
Live QA after repair. The cached Kunark welcome visible in chat is an unresolved display label; verified server progression remains Classic.

Normal keyboard traversal climbed the original courtyard ramp, opened doors27 and24, crossed the upper guild and reached the city side. No terrain was removed. The front approach included a brief platform-edge fall before rejoining lower steps, so a complete uninterrupted stair-flight test and all-city traversal remain open.

First-person native client outside the North Qeynos monk guild near Lieutenant Dagarok after normal-player traversal.
Guild exit route, before the HUD weather repair. Original walls and terrain retained.

Applied and checked

A guarded database transaction changed 202 rows. The complete transaction was rehearsed with rollback, then applied and every changed row read back. A before-state backup and reverse migration are retained.

  • Restored 69 missing merchant stock entries and unlocked Fish Wine at 10 city vendors.
  • Gated 94 later stock entries beyond Velious and one Kunark quest item to Kunark.
  • Separated two shared merchant inventories before editing, preserving vendors in Rivervale and Firiona Vie.
  • Corrected Crow’s respawn from 10:40 to 6:40; corrected Seta Bakindo’s level from 61 to 42.
  • Follow-up: Crow’s brew now uses finite temporary stock in Classic–Velious. On a live North Qeynos boot, the quest initialized exactly 20 bottles; the unlimited permanent row is gated out. Purchase depletion and full respawn restocking still need live acceptance.
  • Retained Rolon Banari as Classic; restricted Velarte Selire’s later badge quest spawn to Velious.
  • Added expansion guards in six city quest scripts. 79 Lua assertions passed, covering Classic, Kunark, Velious and retained later branches. Classic guild notes, bard reports, Crow’s hand-in and Aegis of Life remain available.

Kunark and Velious remain locked. No global item prices, player characters or Qeynos Hills content were altered by this database repair.

Normal-player client check

A separate QA session found that the Rust client omitted class starting-stat bonuses and used the wrong Titanium starting-city choice. Character creation was rejected by the server without a useful error.

The native source now includes class-specific stat allocation, Qeynos city selection for Human/Half Elf, and a name-approval handshake with explicit rejection messages. Library verification: 166 tests passed, 2 ignored. Live server validation reported zero creation errors; the new Human Warrior entered South Qeynos at the guild.

Ebon Strongbear’s greeting and guild-note hand-in passed through the actual native UI: Recruitment Flyer consumed, tunic 13504 received, and experience awarded. The screenshot was visually inspected; inventory changes were checked in the database. This is one accepted quest path, not acceptance of every quest or interior. These changes have not replaced the public download or spectator binary.

Native Rust client in the South Qeynos warrior guild, showing Ebon’s successful guild-note hand-in dialogue and tunic reward on the cursor.
Isolated normal-player QA session, September 28. Existing spectator session left untouched.

North Qeynos: client repair, not just database work

Human Monk creation and the North Qeynos guild start passed. A live screenshot then exposed an almost-black interior. Fog and ambient-occlusion toggles did not fix it; disabling post-processing revealed the geometry. The contrast curve was clipping low-light colors to black.

The rebuilt shader preserves dim detail without a hard black cutoff. The room is now visible with fog, shadows, ambient occlusion and post-processing enabled. Latest full client suite: 167 passed, 2 ignored. This resolves the reproduced black-crush defect; it does not establish exact historical lighting or certify all interiors.

North Qeynos monk-guild interior visible in the repaired native client with post-processing enabled.
Visually checked QA build. Full matching against the original scene and full movement acceptance remain open.

Permanent Velious ceiling

Classic is active. Kunark and Velious remain available for deliberate later progression; nothing after Velious is an intended unlock. Six later zones mislabeled as expansion 0—Jaggedpine, Nedaria, revamped Plane of Hate, Shadowrest and both tutorials—now have explicit normal-player access locks. All three progression stages preserve those locks. The original Plane of Hate is not the excluded revamped zone.

Seven guarded database changes were rehearsed with rollback and read back: six zone gates and the stale welcome message. The progression tool and baseline have backups; 22 regression tests pass. No records or characters were deleted. These gates do not certify that every later item or quest has been removed.

North guild hand-in verified

LuSun’s Note with Fist Insignia hand-in passed through the actual native client. Note 18712 was consumed, Torn Cloth Tunic 13507 arrived on the cursor, and experience was awarded. The screenshot was inspected and inventory read back from the server.

Native client shows LuSun’s successful monk guild-note dialogue, experience gain and tunic reward on the cursor.
Separate normal-player session; not a spectator or GM interaction.

Native creation now follows the era

The client was discarding Titanium’s server expansion packet. It now reads that mask, defaults safely to Classic, and caps supported creation at Velious. Vah Shir and Beastlord are no longer offered; Iksar requires the actual Kunark bit. Packet-level guards reject unavailable choices too.

The Linux build passed 171 library tests (2 ignored), all-target compilation and live character-screen checks against the Classic server. Backward/forward selection wraps through 12 Classic races and 14 supported classes. Missing selector arrows and an invisible password mask were repaired and visually rechecked. The create button now accurately says “Create Character”; entering afterward remains a separate action. This QA build has not replaced public downloads or the spectator binary. Full race/class/deity combinations and starting-stat choices remain open.

Rebuilt native character creation screen with visible race and class arrows and Create Character button, connected to the Classic server.
Live normal-account UI check; the server advertises expansion mask 0.

Merchant client: live buy and sell passed

The merchant hotkey previously opened an empty window without requesting stock. The native client now waits for the server to accept the merchant session, displays its stock, supports selling, pages beyond the old 16-item limit, and processes transaction receipts and limited-stock removal packets. NO DROP items, filled bags and purchases without enough money are guarded.

A separate normal-permission QA character used an explicitly allocated 100-copper test fixture. It bought one shuriken from Shenro for 12 copper and sold it back for 8. The item appeared and disappeared correctly; displayed balances of 88 and 96 copper matched the database. Escape/reopening and the insufficient-funds warning passed. This proves that exchange, not every merchant price or restock cycle.

Native merchant Sell tab after a confirmed shuriken sale; balance is 9 silver and 6 copper and no tradable items remain.
Actual client/server exchange on the isolated QA character. No GM interaction or existing player inventory was used.

The test also reproduced Enter restarting login during zone loading. Loading-state input is now guarded; the live retest entered North Qeynos without a second login. Latest library suite: 177 passed, 2 ignored. These native changes remain in the QA build, not the public download or production spectator.

Starter food and drink repaired

New-character Bread Cakes* and Skin of Milk quantities are now five each, matching the explicit P99 starter-inventory references. The two guarded database changes were rehearsed with rollback and read back after commit. Existing characters retained their inventory. A fresh-character end-to-end readback and the remaining starter kit are still pending.

Original doors: rendering and interaction now connected

The native QA client now places the original exported door models from server packets, preserving their hinges, headings and scale. Rendering, player collision and chase-camera collision follow the moving geometry. North Qeynos loaded its door scene without missing-asset warnings.

A normal player was stopped by the closed monk-guild door, opened it through the server, and walked through. Mouse clicking and local closing were then tested visually. A low-frame-rate timer issue was found and repaired: door timing now uses real elapsed time. No terrain was removed or changed to create a passage.

Actual native North Qeynos QA view after clicking the guild door open, revealing the courtyard beyond.
Original guild door open after the server response. The same view showed it closed again six seconds after clicking.

Still open: exact original lighting and animation timing, every other door and interactive object, lifts and rotating actors, and final package acceptance. Door models are now included in the shared Windows/Linux packaging path. Latest library suite: 179 passed, 2 ignored; original-door geometry/collision integration passed. These remain QA-build changes, not a public release or a 100% city sign-off.

Titanium comparison: two lighting defects repaired

The original Titanium client now runs in a separate reference session. Comparing the same North Qeynos guild doorway exposed two concrete defects: modern sun shadows were incorrectly darkening ambient and local-light illumination, and the staged door models came from an obsolete export with inward-facing side normals.

The Classic world and character shaders now preserve indirect illumination under a sun blocker. An explicit GPU regression failed before the change and passed afterward. The two cities’ object archives were freshly extracted from the original Titanium media using the corrected exporter. A broader audit then caught three missing South Qeynos lamp-animation frames; those are restored too. The current 69-file manifest has source hashes and rollback records. All 18 staged models, 32 materials and 33 texture dependencies pass the audit. The South lamp still needs an in-game animation check.

An outward-normal regression fails against the old door export and passes against the new one. Door collision and interaction tests also pass.

Original Titanium first-person reference of the North Qeynos monk guild door.
Original Titanium reference. Camera framing differs from the native view below; these are not pixel-aligned images.
Native Rust first-person view of the same guild doorway after sun-shadow and original-object normal repairs.
Visually inspected native QA result with shadows and postprocessing enabled. Production spectator and public downloads have not been replaced.

Still open: calibrated camera framing and lighting, other doors/objects and full city acceptance. Broad checklist percentages are unchanged.

Door timing: original and native recordings

Two original-client recordings at 30 and 60 capture frames per second agree: the ordinary type-0 guild door swings in about 0.8 seconds, holds fully open for 10 seconds, then closes in about 0.8 seconds. The native provisional half-second swing/five-second return has been replaced for this tested type. The hold starts after the opening finishes.

Original Titanium, 15 seconds. Opens near the beginning and returns near the end.
Native Rust live server test, 15 seconds. Same measured cycle, even with the QA renderer running around 9–10 FPS. These clips are not synchronized or pixel-matched.

Frame-partition tests cover 10/30/60/144 Hz, delayed frames, inverted doors and invalid elapsed time. Latest library suite: 182 passed, 2 ignored. The original-door asset/collision test passes; the Linux QA release was built and visually checked. Other door types and exact per-frame easing remain unverified.

Progress tracker corrected

The old whole-check-only calculation stayed at North31% and South24% despite the completed repairs above. The ledger now shows verified subchecks inside open categories while retaining each top-level category’s weight. North is42% (17/40 detailed subchecks verified); South is31% (9/28). This recognizes already-performed work, not a sudden new zone certification. Every remaining subcheck stays visible, and North’s live tests are not credited as South playtests.

Open the updated zone ledger ↗

North Qeynos: five more level corrections and a later-event guard

Follow-up database repairs: Tyokan Mekase25→30; Hanns Krieghor61→50; Phin Esrinap61→60; Djerr Darkpaw3→4; Rodcet Nife’s Koalindl55→50. The P99 level table corroborates these levels. NPCs were checked for shared spawns before editing. Other combat fields were not guessed from incomplete references.

The later rogue-epic controller now has an Omens spawn gate and its own spawn/signal/timer guards, matching the existing quest callers. Six database rows were rehearsed with rollback, committed and read back; full before-state and reverse SQL are retained. The new controller regression fails against the previous script and passes 62 assertions against the fix; the existing 79 city quest assertions still pass. A North-only quest reload was acknowledged. Correction to the earlier note: this server’s hot-reload setting also repopulates North’s NPCs and resets quest timers. No world restart or other-zone repop was requested; the production spectator was not replaced.

These extend the existing reviewed-level and era-guard checks, so that database batch alone left North at 42% without duplicate credit. The additional movement checks below bring it to 43%. Individual live NPC statistics, full combat behavior and remaining city acceptance are still open.

North Qeynos: live movement and close-wall repairs

At the QA renderer’s 6–8 FPS, the old movement timer discarded elapsed time. The corrected client advances in small collision-checked steps: walking and turning rates match at 5, 7, 10, 30, 60 and 144 FPS. Long stalls are bounded to prevent catch-up jumps. A normal player passed through the server-opened guild door in both directions and continued into the courtyard.

That walk-through exposed a second defect: point-only collision let the camera’s near plane cut through a wall, showing the underside/outside of the city. The original geometry was present. A small wall clearance now blocks that approach, handles shared endpoints, and still lets a player move out of an overlap caused by a closing door. The exact original-ledged-wall regression fails before the fix and passes afterward at six frame rates.

Before repair: a close first-person approach clips the original guild ledge, exposing the underside and disconnected-looking outside geometry.
Before: the reproduced missing-world view. This was a collision/camera defect, not missing original terrain.
After repair: the same ledge approach stops with the wall still fully visible instead of revealing geometry behind it.
After: live normal-player retest of the same wall approach. Positions are slightly different because the repaired collision stops sooner; these are not pixel-aligned reference images.

Verification: 186 library tests passed, 2 skipped; the original-door asset test and exact North wall regression passed separately. Another 96 original camera/wall queries matched full-mesh reference scans. Linux all-target and Windows cross-compilation checks passed. The rebuilt Linux QA client was visually inspected; the spectator and public downloads were not replaced.

North’s checklist now includes these two accepted movement subchecks. Exact Titanium race-specific body dimensions, all stairs/slopes/routes, complete gameplay and packaged Windows/Linux acceptance remain open. See the current calculated progress and remaining checks.

North: measured original camera framing

The original Titanium executable was run in North Qeynos on the isolated QA display. Graphics-only capture confirmed a fixed horizontal projection scale of 1.62289751 (about 63.281° horizontal field of view). Three real viewport tests—1280×720, 960×720 and 1280×600—changed the vertical scale to 2.88515115, 2.16386318 and 3.46218109 respectively. The actual world shader confirms the same projection; this is not a guessed screenshot zoom.

The Rust world camera now reproduces that horizontal framing by default. The Camera options expose “Original Titanium Framing”; changing Custom Vertical FOV deliberately switches to the custom view. Both modes are persisted and tested. The rebuilt Linux QA client and visible options were inspected in North. 189 library tests passed, two skipped; Linux all-target and Windows compilation checks passed.

This accepts projection framing only. Original eye height, pitch, near/far clipping, lighting and all camera/body collisions remain open. The measured framing does not certify a pixel-identical scene, and the production spectator/public downloads remain unchanged.

Complete source export cross-check

A fresh export from the installed Titanium terrain/object archives matches the installed North export: 2,449 nodes, 2,448 meshes, 233 materials, 241 texture files, the placed-object animation, and all eight visibility/lighting/ambience metadata files. Comparison covers the entire glTF structure and actual dependency hashes, not counts alone. The wider North zone/door dependency audit reports zero errors across 48 model files.

This strengthens the existing asset evidence without counting it twice. Export reproducibility does not establish that every original rendering behavior is implemented. Complete routes, appearances, environment and actual release-package acceptance are still required.

Still open — not credited as complete

  • Complete normal-player travel, guild hand-ins, buying/selling, combat, loot, death and recovery in both cities.
  • Global starter-item rules give a fresh Qeynos character a Gloomingdeep Lantern, backpack and 20 bandages. Item 9979 historically was A Worn Candle: it needs historical version restoration, not removal based only on its modern name. Only food/drink quantities have been repaired; the full starter kit remains unaccepted.
  • Merchant prices, limited stock and restocking. Caleah’s reagent prices differ; Crow’s finite-stock initialization passes but the full purchase/restock cycle remains open. The initial33-reference gap was a parser defect; North now has explicit NPC/item-page references for all25vendors. Fifteen active North entries and Rendallen’s Halberd era gate still need resolution.
  • Full NPC statistics, faction behavior, patrols, rare chances and individual respawn timers.
  • Global and NPC-specific loot distribution. Human/Elven Blood are Classic; misleading database labels were not used to remove them.
  • Boat route acceptance, all doors and zone boundaries, every interior and live movement/animation checks.
  • Remaining quest branches and expansion-era evidence. Successful script tests are not a substitute for in-game hand-ins.
  • The login server’s world-list title and cached in-world welcome still contain an old “Kunark” label. Active rules, client creation flags and the database MOTD are Classic; a fresh login exposed the stale runtime welcome. Both display labels need a safe refresh without interrupting players.

Broad checklist percentages remain unchanged until the corresponding complete checks pass. Fixing one merchant or one NPC does not certify every merchant or NPC in a zone.

Reference trail

Item/NPC comparisons use the dated April 12, 2026 P99 wiki snapshot, corroborated where available by current pages and dated tradeskill discussions. Wiki labels alone do not prove every stat or historical timeline.

North Qeynos checklist · South Qeynos checklist