Merge graphics-programme (upstream samwhosung/benilla b17be271) into main
This commit is contained in:
@@ -58,7 +58,7 @@ Licence: same as upstream benilla, MIT OR Apache-2.0.
|
||||
|
||||
<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><b>A complete World of Warcraft 1.12.1 client, written from scratch 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>
|
||||
@@ -66,73 +66,87 @@ Licence: same as upstream benilla, MIT OR Apache-2.0.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
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.
|
||||
benilla plays the whole game: character creation, questing and professions, dungeons and raids,
|
||||
battlegrounds and honor, groups, guilds, trade, mail and the auction house, on the stock 1.12
|
||||
interface and with your addons. It connects to a 1.12.1 server over the original protocol and
|
||||
reads the game's data from your own 1.12.1 install. Every file format, the network protocol and
|
||||
the interface engine are written from scratch, with no original client code, no third-party WoW
|
||||
crates and no bundled game assets.
|
||||
|
||||
## What works
|
||||
## What's inside
|
||||
|
||||
- **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, PvP honor and battlegrounds.
|
||||
- **UI:** a from-scratch FrameXML + Lua engine that runs the client's own stock interface off
|
||||
your install's patch chain, 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: AtlasLoot and Bagnon run).
|
||||
- **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.
|
||||
- **Formats:** readers for the whole asset stack (the MPQ patch chain, BLP, DBC, ADT, WDT, WDL, M2
|
||||
and WMO), wired into Bevy as an asset source.
|
||||
- **World:** terrain streamed out to the horizon, portal-culled buildings with interior lighting,
|
||||
doodads and ground clutter, swimmable water, sky and weather, and the client's own day/night
|
||||
lighting, fog and gamma.
|
||||
- **Models:** GPU-skinned M2s with the full animation controller, particles, ribbons and the spell
|
||||
visuals, and characters end to end: customization, the armor composite, weapons with their
|
||||
enchant glows, forms, stealth and mounts.
|
||||
- **Movement:** 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 and the object mirror into the ECS,
|
||||
covering the game from movement and chat through combat, spells, groups and raids, quests,
|
||||
trade, mail, the auction house and battlegrounds.
|
||||
- **Interface:** a FrameXML and Lua engine that runs the stock 1.12 interface off your install's
|
||||
patch chain, and third-party 1.12 addons: Questie, pfUI, Bagnon, Bartender2 and most others
|
||||
run. By choice, the options window and the ESC menu follow the Classic Era client's rather than
|
||||
1.12's.
|
||||
- **Audio:** music, ambience and effects under the client's own selection and crossfade rules,
|
||||
with interior and underwater transitions and zone reverb.
|
||||
|
||||
## Where it's going
|
||||
The format readers and the UI engine core are plain Rust with no Bevy in them, and the world
|
||||
renderer runs with no game attached. [`docs/MAP.md`](docs/MAP.md) maps every crate and subsystem,
|
||||
generated from the code.
|
||||
|
||||
benilla is done when a 1.12.1 player can do everything here that they could in the original
|
||||
client, it looks and feels the same, and it runs from a download on Windows, Linux and macOS.
|
||||
No dates; the order is what is likely, not a promise.
|
||||
## Status
|
||||
|
||||
- The long tail of small features that separates a working client from a finished one.
|
||||
Complete and fully playable. What is left:
|
||||
|
||||
- The long tail of small features that separates a working client from a finished one, tracked
|
||||
as [issues](https://github.com/samwhosung/benilla/issues).
|
||||
- Addons, options and performance, ongoing.
|
||||
- Playable downloads for Windows, Linux and macOS. Linux first.
|
||||
|
||||
benilla is a faithful 1.12.1 client and the foundation people build on. There are no prebuilt
|
||||
downloads: a packaged build, a particular server's changes or anything 1.12.1 never had belongs
|
||||
in a fork, and forks are welcome. GitHub lists
|
||||
[every public fork](https://github.com/samwhosung/benilla/forks).
|
||||
|
||||
Not planned: other expansions or client versions, Warden (anticheat).
|
||||
|
||||
## Running it
|
||||
|
||||
You need a **1.12.1 (build 5875) client install** for game data, a vanilla server to connect to,
|
||||
stable Rust and a C compiler (the Lua is built from source; on macOS the Xcode command line
|
||||
tools, on Linux the ALSA and udev development packages). 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.
|
||||
benilla builds and runs on macOS, Linux and Windows. You need:
|
||||
|
||||
- **An English 1.12.1 client (build 5875)** for the game data. benilla only reads it.
|
||||
- **A 1.12.1 server with Warden off.** [vmangos](https://github.com/vmangos/core) is what
|
||||
development runs against, and it ships with Warden off; cMaNGOS and the other 1.12.1 cores speak
|
||||
the same protocol.
|
||||
- **Stable Rust and a C compiler**, because the client's Lua is built from source: on macOS the
|
||||
Xcode command line tools, on Linux the ALSA and udev development packages and pkg-config, on
|
||||
Windows the MSVC build tools that the Rust installer sets up.
|
||||
|
||||
```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.
|
||||
`WOW_DATA` names the install's `Data` folder; a link to the install named `WoW` at the repo root
|
||||
does the same. The server defaults to `localhost:3724`, the stock auth port. Point `WOW_HOST` at
|
||||
another (`WOW_HOST=play.example.com`, or `play.example.com:5000` for a remapped port), or set it
|
||||
from the Realmlist button on the login screen, which remembers it. Credentials go in at the login
|
||||
screen, or set `WOW_USER` and `WOW_PASS` to skip it.
|
||||
|
||||
Settings, screenshots and addons live in `benilla-config/` at the repo root: a 1.12 addon goes in
|
||||
`benilla-config/AddOns/`. [`docs/CONTRIBUTING.md`](docs/CONTRIBUTING.md) has the rest, from the
|
||||
player build to the tests.
|
||||
|
||||
Optional, locally built skybox and colour-grading data: [`Optional/sky-and-grading/`](Optional/sky-and-grading/README.md).
|
||||
|
||||
## Contributing
|
||||
|
||||
Issues and pull requests are open. [`docs/CONTRIBUTING.md`](docs/CONTRIBUTING.md) says what gets
|
||||
in and how a change is judged. Bugs, questions and ideas are welcome on the
|
||||
[Discord](https://discord.gg/wJSJx467G4) too.
|
||||
Issues and pull requests are open. [`docs/CONTRIBUTING.md`](docs/CONTRIBUTING.md) says where to
|
||||
start, what gets in, how a change is judged and what happens to a pull request once it is open.
|
||||
Bugs, questions and ideas are welcome on the [Discord](https://discord.gg/wJSJx467G4) too.
|
||||
|
||||
---
|
||||
|
||||
@@ -141,13 +155,13 @@ Early inspiration and file format guidance came from the
|
||||
[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 stock interface runs off your own install's
|
||||
FrameXML at runtime; the handful of files under `crates/benilla-app/assets/ui/` are our own
|
||||
adapters and developer frames, not copies of it.
|
||||
It ships **no Blizzard content**: no art, models, sounds, maps, MPQ contents or FrameXML. You
|
||||
provide your own legally obtained 1.12.1 client, and the stock interface runs off its FrameXML at
|
||||
runtime. The few files under `crates/benilla-app/assets/ui/` are our own, not copies of it:
|
||||
adapters over stock files, and the settings windows and script error log benilla draws itself.
|
||||
|
||||
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. The two vendored components
|
||||
under `third_party/` — the kira audio engine, and a Lua 5.1 patched to the 1.12 client's dialect —
|
||||
under `third_party/`, the kira audio engine and a Lua 5.1 patched to the 1.12 client's dialect,
|
||||
keep their own upstream licenses, alongside each. Code and techniques ported from other projects
|
||||
(WarcraftXL, by iThorgrim) are credited file by file in [`THIRD-PARTY.md`](THIRD-PARTY.md).
|
||||
|
||||
Reference in New Issue
Block a user