Skip to content

About

Lineage II Interlude browser-client development and Elbera Tools for original-client research, conversion and verification.

Topics

Resources

Stars

51 stars

Watchers

1 watching

Forks

Latest commit

 

History

290 Commits

Folders and files

Repository files navigation

E L B E R A

Lineage II Interlude. In your browser.

Porting the original game-client experience to the web.
A browser client, an Interlude protocol gateway, and Elbera Tools for the L2 community.

Source checks Elbera Tools Core Elbera Tools NPC Source License: MIT

The game · Elbera Tools · Recent progress · Get started · Roadmap · Español

ELBERA browser client: an equipped character in Giran with inventory, status, skills and action windows

From the project's development gallery: Giran, equipped armor and shield, and the browser interface in one frame.
Explore the game gallery · Capture history and context

The game

ELBERA brings Lineage II Interlude to the web: its world, characters, skills, animations, effects, progression and interface, with no installed game client for players. This repository, developed locally as l2vzla, contains the browser client and the tools being built to make that possible.

The browser already connects through ElberaGate to an aCis server for movement, combat, inventory, NPC interaction and other gameplay systems. Recent checks include a completed quest with its reward preserved after reconnect, an actual merchant purchase, and original appearance and UI data recovered from the client.

Status: active development. The next delivery is a small invited playtest; the goal remains the full Interlude client. World fidelity, animation, effects, interface details and whole gameplay systems still need work. The coverage inventory records what is implemented, source-verified and tested through normal play.

Talking Island Giran
Talking Island shoreline and stone terrace in the browser Giran's plaza and architecture rendered in the browser
Coastal terrain, water and map geometry. Town architecture, stonework and public spaces.

These retained game captures show earlier development builds. New tool captures appear below; current feature status is recorded in the coverage inventory. The full gallery also preserves character creation, combat, multiplayer, NPCs, dungeons and interface views.

Recent progress

September 2026 — work now follows original inputs through decoding, browser behavior and focused verification.

Source loading now retains inherited collision flags and ordered map overrides for every saved actor in Talking Island and Giran, including movers and volumes. These remain separate from current actor state. The loader also binds 495 original brush Models to their saved actors, preparing bounds and surface-node lists through recovered loading rules. Those Models now share 495 source-loaded Polys headers, with 2,447 polygon records checked against the original map bytes. A separate brush PostLoad implementation matches 192 original-code cases, preserving ordered Model/Polys flag writes. The source loader now prepares collision fields for 442 plain Brush actors from their own class defaults and map tags. A further 128 native comparisons cover fresh copying, construction and PostLoad. Elbera Tools now also verifies four native volume constructors and reads 364 original property declarations and 12 array inners, including nested structures and the conditional replication word. Volume startup and live world collision remain unfinished. The class-prefix decoder is available in the standalone Core preview. The declaration inspector now follows original child links through nested structures. Its layout decoder matches 420 original-code comparisons, five original volume-class cases and all 16 nested structures. PhysicsVolume's calculated size matches its engine registration; full class loading remains open. Recovered field order and offsets. The same tool now retains load-time property flags and the original inherited copy lists. 155 original-code comparisons cover those lists; all 16 original structures now match. A source reader recovers the single consumed class flag for 21 referenced classes without inventing their complete current state. Another 64 comparisons exercise every recovered source variant. Original game-mode replication grouping now also matches 51 comparisons, including inherited fields and the client's temporary-map lifecycle. Complete class startup and live volumes remain open. Property linking and remaining dependencies. Array linking now preserves the original inner-type preparation, with 552 original-code cases checking nested layouts and flags. Reading Actor's twelve array inners uncovered three previously missed structures. Their remaining referenced-class flag gaps are now closed. Complete recomputed Object → Actor → Brush → volume inheritance matches original linking for all eight classes, including inherited lists and replication. Seven native registration sizes match independently. Complete default-object initialization and live volume admission remain pending. The reusable decoder is included in current Elbera Tools Core source builds (25 files / 84 portable checks). Array evidence · Inherited class metadata. Original default-object initialization now has 60 focused comparisons of header fields, parent string copying and new-field clearing. The source reader also confirms that all eight classes skip ordinary configuration loading, including inherited flags. Localized defaults and live startup remain unfinished. Initialization evidence and scope. The browser now copies the complete recovered specialized-property lists: strings, raw array bytes and noninstancing object references. 288 additional original-code comparisons cover mixed inputs and all eight class layouts, checking parent storage, exact copy order and new-field clearing. Payloads in these copy comparisons are authored. A new joined loader now also matches the actual saved defaults of all eight classes: 74 top-level tags and nine nested applications, preserving exact scalar bits, strings and supplied name/reference identities. Localized defaults and live class/world startup remain next. Copy behavior and limits. Saved default loading. The source reader also preserves original string defaults through saved volume ancestry, including the water-specific override. Its bounded decoder retains UTF-16 code units and embedded zeros, with 69 original-code loading/copy comparisons. This supplies source data for the pending volume startup join; it does not yet enable those volumes in the game. String loading evidence and reusable decoder.

The Elbera object-localization inspector now shows saved default loading, mixed class-default copying, repeated localization calls and ordered actor/resource updates. 192 original-code comparisons join default copying, Volume construction and localized PostLoad with explicitly supplied class and configuration state. The browser preserves full string storage and the original call order; the inspector's 102 control combinations pass using clearly labeled authored inputs. Earlier nested-localization and string-import comparisons remain. Current class setup, configuration parsing and live volume startup are still open. Tool screenshot, reproduction and remaining work.

Actor source evidence · Model loading and verification · Brush lifecycle evidence · Polys loading and decoder · Saved Brush actor loading · Volume constructors and declaration reader.

Area What advanced Follow the work
Original tutorial audio Five quest/tutorial cues retain exact PCM; Elbera Tools compares all 702,848 stereo samples at the original rate. 42 English voice recordings are preserved unchanged, with original controller delays and replacement fades. A fresh character receives the opening narration and movement tutorial through normal server events. Full quest delivery, native streaming and the shared music mixer remain open. Audio tool, capture and evidence
Character appearance Original face indices, five male / seven female creation hairstyles, four source color choices, and corrected default hair mesh/material selection. Appearance · Hair pipeline
Hair and material inspection All 162 base-table meshes exported with original LOD0 geometry and weights; 648 material references retain their source identities. The inspector shows rigid and soft-rig parts in a static view. Inspecting original hair
Native transform research Ordinary and dynamic hair paths distinguished; retained coordinate arithmetic checked. A separately pinned comparison copy identifies missing imports within exactly matched code blocks. Attachment evidence · Comparison scope
Original animation and skeletons All 1,367 player sequences and 14 original face skeletons have lossless runtime bundles. Live wait, sit, stand and cast schedules use original keys, fresh-instance initialization and transitions from evaluated source poses. Live playback guide · Cache evidence · Fresh instances
NPC animation recovery All 16 original Gremlin and Fox sequences and 34 events are inspectable. A bounded live path plays their initial Wait/AtkWait from original keys and sound events on Talking Island, including starter Gremlin 18342. Normal Online entry now waits for the correct map and verified model; no manual map selection is needed. Unported transitions retire that path. Original GPU weight lanes are preserved for 1,746 vertices; complete skinning, movement and combat animation remain unfinished. NPC source inspector · Skin input evidence · Native state evidence
Original BSP collision A composed world BSP extent sweep now includes oriented hulls, bevels and original hit adjustment. Its Elbera inspector uses the same module with portable fixtures or local source exports; camera and walking integration remain unfinished. Sweep evidence · Level.Model source binding
Terrain, actors and level queries BSP, terrain and zone lookup now join through the original level collection rules. 116 diagnostic queries across Talking Island and Giran match retained client instructions with explicit saved-state conditions. Original actor-cylinder arithmetic is also available; live actor participation and gameplay collision remain unfinished. Combined sweeps · Terrain-zone sources · Cylinders
Static actor transforms Original actor matrices match 1,400 retained-code cases. Elbera Tools recovers the 16,384-entry rotation table under an explicit source SSE2 profile. Current actor/cache and live movement integration remain unfinished. Transforms and table recovery
Static sweep preparation 800 original-instruction comparisons preserve source corner rounding and exact-zero direction handling. Elbera Tools verifies original collision records, both saved boxes and mesh versions across 480 per-map mesh records, preserving unknown lazy data explicitly. The shared property reader now retains extended indices and Boolean framing; saved metadata remains separate from live state. Collision records and source preparation
Static triangle collision 5,200 browser comparisons preserve original mesh-cache values, plane construction, negative-scale winding and triangle clipping; 500 compose the stages. Triangle source checks
Static mesh traversal and hits 2,600 browser comparisons, including 400 joined collision cases, preserve original traversal order, repeated-triangle tags, material response handling and final hit adjustment. Live cache/actor integration and walking remain unfinished. Mesh source checks
Static mesh cache reuse 600 joined queries preserve original cache keys, owner/mesh identity checks, matrix refresh, tag wrap and release before hit adjustment. Another 1,000 comparisons check the shared matrix determinant. Cache-provider internals and live actor selection remain unfinished. Cache contract and Elbera verifier
Actor bounds and spatial membership 5,946 geometry/bounds comparisons and 2,239 membership snapshots preserve original splitting, insertion and removal. Another 935 composed operations join actor-update gates, primitive selection/bounds and level mode, including skipped and out-of-world updates. Live population and query integration remain unfinished. Octree components · Actor updates and Elbera verifier
Static-prop bounds 600 original-instruction comparisons and 288 joined actor updates preserve transformed boxes, the cylinder branch and auxiliary collision-model rules. Another 600 PostLoad-to-bounds checks verify the browser’s object/array reset and unchanged box under explicit current-state conditions. The mesh API now prepares fresh source records through original loading flags, with 256 new source/browser checks and 128 constructor checks. Source-derived native class loading bits feed that entry. Actor recovery now preserves 82 declared Boolean fields, with 512 native copy checks and 2,922 saved flag records verified. Live map population and placement remain unfinished. Original bounds and Elbera verifier
Original world loading The game scene loader now shares the source preparation pipeline checked against 2,922 actors and 480 mesh records. The Giran source loader prepares 1,936 static actors, 291 Brush field sets and 287 meshes, while preserving every saved actor slot and reporting unfinished classes. Current startup, collision queries and movement integration remain open. Scene loading and limits
Actor collision queries 602 nonzero-extent queries through the actual actor tree match original instructions, preserving candidate tags, ownership, traversal order, scratch records and hit selection. Original actor/pawn filtering now matches 8,028 additional cases. Live fields, subclass dispatch and concrete primitive-method integration remain unfinished. Query contract · Trace filters and Elbera verifier
Movement recovery Original actor blocking and ordered hit selection match 6,600 retained-code cases. Query padding and selected-hit backoff match another 735 cases. Live actor queries, callbacks, floor/step/ledge response and movement-to-wait animation remain in progress. Actor blocking · Movement arithmetic · Stopping evidence
Original sound selection Recovered the original integer generator and signed sound gate. Player and admitted NPC events share one browser context, preserving draw order through mute and delayed loading. Browser seed/storage policy and unported native consumers remain explicit limits. Native sound evidence and verifier
Quest progression Letters of Love completed through server interactions; the reward survived reconnect and appeared in the browser inventory. Quest playtest
Shops and original dialogs A browser purchase and potion use changed server-owned inventory and currency. Quantity and confirmation dialogs use recovered client rules. Shop playtest
Recipes and shortcuts Recipe books, manufacture details and source-index shortcuts are connected; the live empty Common Craft book was checked. Successful crafting remains a separate test. Recipe evidence
Community tooling Separate Core and NPC Source kits, portable checks, source provenance, updated guides and actual inspection screenshots. Core · NPC Source · Tool catalog

The latest appearance milestone is PR #5. The newest animation comparison includes male Human Fighter's 69 matched bones plus one original reference pose, without inventing a finger alias. The same source-pose path now drives admitted frames and cached transitions in the live Character player. Fresh instances follow the recovered original frame-zero path. After an exported-only animation interrupts source playback, transition history remains unknown. Existing browser skinning and hair adaptations remain in use; actor modifiers and animated hair attachment are still unfinished. See what runs today and how to reproduce it.

Elbera Tools

Built for the port. Useful to the community.

Read packages, decode original tables and textures, inspect models and UI, and reproduce the evidence behind a conversion. Each tool documents its inputs, supported scope and unresolved cases.

Original faces Recipes and shortcuts
Elbera Tools face inspector showing the original mesh and texture references Elbera Tools recipe inspector with manufacture details and shortcut drawers
Inspect source face indices through the browser's character loader. Exercise the actual recipe windows with explicitly supplied replay state.
Hair geometry and colors Soft-rig source inspection
Elbera Tools original hair inspector with separate source material states Elbera Tools Dark Elf hair inspection showing a separate soft-rig part
Browse original mesh/color choices and material alpha rules. Examine original bones and weights; this view is static.

Direct browser captures, September 26–27, 2026. These tools run offline; recipe fixtures do not grant items, and a static asset view does not verify animation. Capture details.

New: original BSP collision inspector

Elbera Tools BSP inspector showing a blocked synthetic extent sweep, candidate bounds and the adjusted hit

Inspect the original collision component independently of rendered geometry. The page displays explicit query inputs, traversed nodes, tested hulls and an adjusted hit; changing an input clears stale results. The pictured fixture is synthetic and needs no client assets. Local original exports can be inspected without uploading them. Terrain, actors and native movement response remain outside this world BSP component. Source evidence and reproduction · Standalone inspector guide.

New: original animation and source-skeleton preview

Elbera Tools Human Fighter animation preview with 69 original links and one reference bone

Human Fighter's original missing-bone behavior is now visible in the inspector, with recovered parent transforms and a comparison against the existing export. This is a neutral source-pose view, with full gameplay animation still in progress. Reproduce this view.

Live Character playback: original wait and cast poses

Elbera Tools live Character replay showing original Human Fighter waiting with 69 mapped bones and one reference bone

The sit/stand replay reaches original waiting through the game's Character player. The visible status reports the original sequence and normalized frame; the current inspector also retains the last evaluated cached transition. Unobserved playback history and other native animation paths remain unfinished. Reproduce this view and read the playback limits.

New: inspect original cached transitions

Elbera Tools live Character inspector retaining the last original cached transition into Human Fighter waiting

The latest replay shows both the current original pose and the last evaluated transition, including its exact negative frame and incremental fraction. Fresh-frame initialization and known source history are checked separately; unresolved audio references stay visible. This is an offline inspection of the gameplay component, with existing browser skinning and inspection lighting. Trace the cache and initialization evidence.

New: original NPC tracks, frame by frame

Elbera Tools Gremlin source-track inspector showing original combat-wait keys, preserved GPU weight lanes and rendering limits

Inspect every recovered Gremlin and Young Fox sequence, play its source timeline, scrub normalized frames and restore the converted model. The tool keeps original class and animation identities visible. Expand Original notifies to inspect each sequence's ordered events and raw sound fields. Gremlin and Fox retain every stored GPU weight lane through import, including repeated bones. Native shader math, inverse binds, effects and gameplay state transitions still need integration. Reproduce the view and its source checks.

Live NPC playback: original waiting and sound events

Elbera Tools online NPC event inspector showing starter Gremlin 18342 playing an original Wait and a retired movement transition

Real server NPCs now reach a bounded original waiting path. The inspector shows the current source frame, dispatched events and sound-gate results; it also preserves the last observation when an unsupported transition retires playback. This capture is from Talking Island, with Online enabled. Walking, combat, full rendering and native random-history parity remain unfinished. Reproduce the live check.

Download the standalone toolkits

These source-only prereleases run independently of the browser project. Each ZIP has an explicit file manifest and portable checks; none contains game assets.

Toolkit Included Start here
Core 0.2.0 preview Python package/texture library, source-bound class-prefix reader, UTX editor, embedded-script extractor and XDAT decoder. Eighteen selected files; 36 portable smoke cases. Core guide
NPC Source 0.1.0 Qualified NPC selectors, original sparse-key bundles, optional GPU weights, and the bounded initial-animation/GPU evidence checks. NPC Source guide
BSP Inspector 0.1.0 Standalone browser inspection of world BSP queries, with the shared query module and portable synthetic fixtures. BSP guide

NPC Source includes 43 text files and a hash manifest. Its portable checks need only Python; the optional native-analysis checks require pinned Capstone and your own matching client inputs. Runtime bundle export also requires your matching converted model data. It supplies inspection data; the graphical inspectors shown above remain part of the full repository.

Core 0.1.0 retains its original contents. Each kit documents its supported commands and limits; no individual kit includes every tool in the repository.

Complete tool catalog · Reproduce Core · Reproduce NPC Source

The ELBERA toolchain

The project's component names remain mapped to the existing source structure.

Component Role Source
ElberaClient World rendering, gameplay interface and browser inspections Browser client
ElberaCreate Character creation and preview Character creator
ElberaGate WebSocket ↔ Interlude login/game protocol Gateway and contract
ElberaLib Supported package, DAT and texture readers Format library
ElberaWorld Terrain, BSP, props and navigation tooling World pipeline
ElberaModeler Character, equipment and model conversion Character pipeline
ElberaDat Original table decoding and metadata exports Data tools
ElberaForge Supported UTX texture inspection and replacement Texture editor guide
ElberaSkin Original interface records, art and browser controls XDAT tools · UI tools
ElberaPanel Local server configuration interface Panel
ElberaEdge / ElberaDeploy Existing proxy and development deployment helpers Deployment

Animation, sound, effects, native evidence and playtest tools are indexed in the full catalog. Original-data commands require locally supplied inputs; deployment helpers still depend on a configured private server.

How it fits together

flowchart TB
    subgraph Build["Asset preparation · offline"]
        direction LR
        Original["Original Interlude files<br/>private inputs"] --> Tools["Elbera Tools"]
        Tools --> Assets["Web assets and metadata<br/>generated locally"]
    end
    subgraph Play["Game session"]
        direction LR
        Client["ElberaClient<br/>Three.js + DOM interface"]
        Gateway["ElberaGate<br/>Node.js"]
        Server["aCis server + database"]
        Client <-->|WebSocket| Gateway
        Gateway <-->|Interlude TCP protocol| Server
    end
    Build -->|Web assets over HTTP| Play
Loading

The browser renders the game and sends player intentions. The server owns gameplay outcomes, inventory and progression; the gateway connects the two. Asset conversion is separate from the running game.

Original data is the rule. Geometry, values, UI behavior and animation rules must be decoded, extracted or traced to their original Interlude sources. Unknowns remain explicit. aCis is the current interoperability target, with local configuration and changes; it is not the original NCSoft server or an authority for original client presentation.

Inside the engineering: protocol, formats, UI and rendering
  • Protocol bridge. Browsers use WebSockets; Interlude uses its login and game TCP protocols. The gateway handles those sessions and exposes the browser contract. Protocol documentation.
  • Format recovery. Package boundaries, compressed records, material chains and texture formats are decoded into inspectable data. Format library · DAT notes.
  • Interface recovery. XDAT records, original scripts, textures and retained native instructions establish window geometry and behavior. Layout evidence.
  • Rendering checks. Original mesh/material identities, coordinate arithmetic and actual converted geometry are compared separately. A screenshot is one observation, not a substitute for those checks. Player transforms · Original pose preview · Reference fallback · Hair pipeline.

Get started

Explore the public source

Node.js and Python 3 are used throughout the project. The public checks below need no game server or original client assets:

npm ci --prefix gateway
node --test gateway/test/*.test.js
node --test editor/world/test/geodata.test.mjs editor/world/test/net-lifecycle.test.mjs

List the broader test inventory with bash tools/battery.sh --list. Individual source and live-server suites have additional prerequisites. The Source checks badge covers the portable workflow; it is not a full gameplay or visual certification.

Run a local development instance

Rendering requires your own matching Interlude inputs and locally generated assets. Online play also requires the configured login/game servers and database. The public checkout does not bundle those inputs.

With those prepared, run each service in its own terminal:

# Protocol gateway
npm start --prefix gateway

# Browser client, character creator and Elbera Tools pages
python3 editor/world/server.py

Open http://127.0.0.1:8083/ and select Online in the top-left corner to connect to the game. Use /create/ for character creation and /test/index.html for the Elbera Tools inspection hub.

Gateway setup · Tool prerequisites · Private-input boundary

Roadmap

Stage Next acceptance target
World and character fidelity Verified terrain, floors, collision, camera, materials, equipment, animation and effect placement.
Repeatable beginner journey Creation → movement → combat → quest → loot/equip → shop → death/respawn, with reconnect and persistence checked through normal play.
Small invited test server Reproducible setup and recovery, multiple browsers, measured performance and session failure handling.
Full Interlude client Remaining regions, classes, skills/effects/audio, progression, crafting, pets, social systems, fishing, transport, siege and every original dialog/menu.

A test server is a milestone within the full port. The development plan defines the acceptance gates.

Current gaps and verification boundaries

World collision and transitions, native lighting/materials, animated appearance, effect placement, some animation/audio paths and interface details are incomplete. Pets, macros, advanced clan systems, siege, Olympiad, fishing and other systems still need substantial work. Long-session stability, capacity and public hosting also require measurement.

A working quest or shop scenario does not establish every class, quest, crafting outcome or multiplayer interaction. Read the full coverage inventory for feature-specific evidence and remaining tasks.

Documentation and contributing

Looking for Start here
Current behavior and gaps Coverage inventory
Delivery order and acceptance Development plan
Commands and reusable tools Elbera Tools catalog
Character and world conversion Characters · Monsters · Weapons · Map format
UI, animation and native investigations Evidence documents
Development images Game gallery · Capture provenance
Packaging and publication Public/private boundary

A useful contribution identifies its source/build, explains the behavior changed, and provides a focused way to reproduce the result. Keep portable tests, original source checks, offline inspections and live gameplay results distinguishable.

Original client files, generated assets, decompiled source, credentials, databases and private playtest receipts stay out of public changes. Earlier repository history contains legacy generated outputs; the current source boundary does not erase that history.

Repository map
editor/world/       Browser world, UI and inspection pages
editor/charcreate/  Character creator
editor/characters/ Local generated character models
gateway/           Interlude protocol bridge
tools/             Elbera Tools and verification utilities
panel/             Local configuration interface
deploy/            Development deployment helpers
docs/              Guides, evidence, playtests and screenshots
assets/            Local original inputs and generated data

License and attribution

The project's own code is covered by the MIT license, subject to its scope and third-party notices. External components retain their own licenses. Lineage II and its original content belong to their respective owners; the source license does not grant rights to game content.

ELBERA is an independent fan and research project, unaffiliated with NCSoft.

En español

Lineage II Interlude completo, desde el navegador. ELBERA reúne el cliente web, el puente de protocolo ElberaGate y las herramientas de la comunidad Elbera Tools. El trabajo parte de los archivos y comportamientos originales: se descifran, se decodifican y se verifican; los datos desconocidos no se inventan.

Ya hay recorridos de juego comprobados, nuevas herramientas de inspección y descargas independientes de Elbera Tools Core y NPC Source. El próximo hito es un servidor de pruebas pequeño; la meta sigue siendo portar el cliente completo, con sus mapas, habilidades, animaciones, efectos, progresión e interfaz.

Estado actual · Plan · Herramientas · Descargar Core · Descargar NPC Source

About

Lineage II Interlude browser-client development and Elbera Tools for original-client research, conversion and verification.

Topics

Resources

Stars

51 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages