- the auction house end to end: right-clicking an auctioneer opens Browse/Bids/Auctions on the server's reply — search, the category tree from your own DBCs, the reference's 50-a-page pager, multi-key sorting (directions corrected at the bytes), bid/buyout, the sell slot with deposit and duration, cancel with its fee popup; prices sit on the reference's own money-frame kit in lined-up columns, the twenty auction messages split refusals-red / outcomes-to-chat, and a won or sold auction reads as a proper mail receipt — the window's Lua re-worded in our own terms after the overlap ratchet caught the first cut leaning on the reference's text - the PvP honor system whole: the Honor tab and the inspect page over a real wire model, with current rank and highest-ever rank correctly two different fields - a day of reported fixes: WASD survives a /logout re-entry, addon settings save on a window close and Cmd+Q (exactly once — a mac close could fire the tail twice), clams open again, random-enchant items name themselves on every surface, the loot window's rows hold their seats with legible counts, idle players stop sinking through building floors, the shooter re-pulls between Auto Shots, portraits loosen ~19% to the client's own aspect-1.0 matrix, and big creatures thump the camera off the CameraShakes table - character select clicks like 1.12 — captions whiten on hover, buttons fire on release, Humans face straight ahead off the stage bone's real yaw, the facing is per-character, and hunter/warlock pets stand beside you at their family-ramp size with their own emitters (the imp's flames), the Voidwalker's sequence-hidden shackles culled - the smaller player-facing set: nameplate on/off rows in Options with the CanAttack category gate (emissaries stop plating), the bonus bar slides up with igBonusBarOpen, the camera's framing height glides on a shapeshift, the open letter evicts the centre seat, the far-band fog hull stops printing a pale horizon stripe at low view distance, the guide arrow is gold with per-source rim art, error text fades through its shadow too, and /convertraid converts the party - README: the auction house and PvP honor move out of "not built yet" Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
81 lines
4.7 KiB
Markdown
81 lines
4.7 KiB
Markdown
<div align="center">
|
|
<h1>benilla</h1>
|
|
<p><b>A from-scratch World of Warcraft 1.12.1 client in Rust and <a href="https://bevy.org">Bevy</a></b></p>
|
|
<p>
|
|
<a href="https://discord.gg/wJSJx467G4"><img src="https://img.shields.io/discord/1529280129518538922?style=for-the-badge&logo=discord&logoColor=white&label=discord&color=5865F2" alt="Discord"></a>
|
|
<a href="https://www.youtube.com/playlist?list=PLdCnpZNKxyb8"><img src="https://img.shields.io/badge/devlog-youtube-FF0000?style=for-the-badge&logo=youtube&logoColor=white" alt="YouTube devlog"></a>
|
|
<a href="LICENSE-MIT"><img src="https://img.shields.io/badge/license-MIT%20%2F%20Apache--2.0-blue?style=for-the-badge" alt="License"></a>
|
|
</p>
|
|
</div>
|
|
|
|
> [!IMPORTANT]
|
|
> **Issues and pull requests are closed here.** benilla is a solo project developed in a private
|
|
> tree; this repo is its export, published as squashed snapshots, so a PR here has nothing to land
|
|
> on. The best way to contribute is to join the [Discord](https://discord.gg/wJSJx467G4) and report
|
|
> the bugs you find. Questions and ideas are welcome in the same place.
|
|
|
|
benilla speaks the original 1.12.1 protocol, so it connects to any server the real client could,
|
|
and reads its game data at runtime from your own 1.12.1 install. Every file format and the network
|
|
protocol are implemented from scratch, with no original client code, no third-party WoW crates,
|
|
and no bundled game assets.
|
|
|
|
## What works
|
|
|
|
- **Formats:** readers for the full asset stack (MPQ patch chain, BLP, DBC, ADT/WDT/WDL, M2, WMO),
|
|
wired into Bevy as an asset source.
|
|
- **World:** streamed terrain out to the horizon, portal-culled WMOs with interior lighting,
|
|
doodads and ground clutter, swimmable liquids, sky and weather, and the client's own day/night
|
|
lighting, fog and gamma passes.
|
|
- **Models:** GPU-skinned M2s with the full animation controller, a near feature-complete particle
|
|
system, ribbons, and animated gameobjects from doors to lifts.
|
|
- **Characters:** customization end to end, the armor texture composite, weapons with sheathing and
|
|
enchant glows, shapeshift forms, stealth and mounts.
|
|
- **Movement:** a WoW-feel controller, networked movement in both directions, the server-granted
|
|
modes from slow fall to roots, a follow camera with collision, boats, zeppelins and taxi flights.
|
|
- **Networking:** SRP6 auth through world-session crypto, the object mirror into the ECS, and live
|
|
wire coverage from movement and chat through spells, party, quests, mail, trade, vendors, bank,
|
|
loot, the auction house and PvP honor.
|
|
- **UI:** a from-scratch FrameXML + Lua engine driving the built-in interface, from the login and
|
|
character screens through the full HUD, the classic windows (guild, macros and key bindings
|
|
included), chat, nameplates, floating combat text and tooltips; third-party addons load from
|
|
a `benilla-config/AddOns/` folder beside the executable (partial — see below).
|
|
- **Combat:** melee on the faithful swing law, ranged and Auto Shot, casting with GCD and
|
|
cooldowns, combo points, crowd control that really holds you, and the spell visual pipeline.
|
|
- **Audio:** music, ambience and SFX under the client's own selection and crossfade rules, with
|
|
interior and underwater transitions and zone reverb.
|
|
|
|
## Not built yet
|
|
|
|
Battlegrounds. Third-party addons are partial: AtlasLoot and Bagnon run, and the addon API
|
|
fills in as other addons are tried.
|
|
|
|
## Running it
|
|
|
|
You need a **1.12.1 (build 5875) client install** for game data, a vanilla server to connect to,
|
|
and stable Rust. Any 1.12.1 core works; [vmangos](https://github.com/vmangos/core) is what
|
|
development runs against, and cMaNGOS and the rest speak the same protocol.
|
|
|
|
```sh
|
|
WOW_DATA=/path/to/WoW/Data cargo run --release -p benilla
|
|
```
|
|
|
|
The server defaults to `localhost:3724`, the stock `realmd` auth port. Point `WOW_HOST`
|
|
at any IP or hostname, appending the auth port if yours is remapped
|
|
(`WOW_HOST=play.example.com:5000`). Credentials go in at the login screen, or set `WOW_USER` /
|
|
`WOW_PASS` to skip it.
|
|
|
|
---
|
|
|
|
Early inspiration and file format guidance came from the
|
|
[wowemulation-dev](https://github.com/wowemulation-dev) community, and
|
|
[warcraft-rs](https://github.com/wowemulation-dev/warcraft-rs) in particular.
|
|
|
|
benilla is an independent fan project, not affiliated with or endorsed by Blizzard Entertainment.
|
|
It ships **no Blizzard content** — no art, models, sounds, maps, MPQ contents or FrameXML; you
|
|
provide your own legally obtained 1.12.1 client. The interface code under
|
|
`crates/benilla-app/assets/ui/` is ours, written to the client's own layout and API names so that
|
|
the windows look right and 1.12.1 addons find the names they expect.
|
|
|
|
World of Warcraft is a trademark of Blizzard Entertainment, Inc. Our own code is licensed under
|
|
[MIT](LICENSE-MIT) or [Apache 2.0](LICENSE-APACHE), at your option.
|