PMP

Strawberry Client

Strawberry

A from-scratch World of Warcraft client, written in Rust, brought up from the 1.12.1 protocol to OctoWoW's 1.18.1 wire.

Strawberry started as a clean-room 1.12.1 client: every file format and every packet implemented from the original data and protocol, with no original client code, no bundled game assets, and no anti-cheat. It then went through a staged port to OctoWoW, which runs the Turtle-WoW 1.18.1 server protocol on top of a 1.12.1 world. That port is what this repository ships.

This repository holds releases only. There is no source tree here and nothing to build. Download the latest release, unpack it, run it. Issues are open for bug reports; pull requests have nothing to land on and are closed.

The 1.12.1 to 1.18.1 port

OctoWoW's logon server gates on build 7272 (1.18.1) while its world server still speaks the 5875 (1.12.1) dialect with Turtle extensions. Getting a 1.12.1 client through that door took a numbered series of 34 protocol and content patches, each documented and verified against live traffic. The highlights, in the order they landed:

  • Split realm and world build. The logon challenge announces 1.18.1 while the world session keeps 1.12.1, matching what the server actually checks on each side.
  • Large world packets. The 5-byte mangos large header (0x80 flag, 24-bit size) is decoded on both receive paths and the send path, so Turtle's oversized update packets arrive intact instead of desynchronizing the stream.
  • Extended character list. The character-enum record carries Turtle's extra fields: character flags, first-login, pet display and family, per-slot equipment data. The select screen shows your pet standing beside you.
  • Realm picker and addon-info handshake. The client lists OctoWoW's realms, picks one, and sends the addon blob the server expects. This is the patch that first achieved live world entry.
  • Length-tolerant parsing. Every server message that Turtle extends with trailing data is read to its known length and the remainder is ignored, so future server-side additions degrade quietly instead of aborting the session.
  • Warden. Not implemented and never will be. The client detects a Warden-requiring realm and says so plainly rather than hanging at the character list.
  • Custom races. Goblin and High Elf are read from the server's own ChrRaces data, not a frozen list. The character-create screen grows to a 2×5 race grid with the right faction columns, icons, banners and chat languages. Turtle's extended geoset groups (17, 18, 20) render, the custom-race glue stages (Alah'Thalas, the goblin city) load, and character creation carries Turtle's challenge mask.
  • Content compatibility. The MPQ chain mounts patch-?.MPQ in the reference's own order, so Turtle's patch archives override vanilla data correctly. Display IDs are widened past the vanilla range for custom gameobjects, creatures and items. DBC field-count drift is tolerated. Custom models, terrain and zones beyond the vanilla grid were smoke-tested and their failures triaged.
  • Play fixes found on OctoWoW. Teleport relays parsed as snapped observer moves, addon channel traffic kept out of chat frames, a missing doodad no longer holds the loading screen, and the step-up ceiling raised so short races can climb the world's stairs.

An opcode parity ledger, built by diffing this client's traffic against a reference client through the same proxy, tracks what is covered and what is still skipped.

Beyond the port

  • Performance. A long campaign of measured cuts: physics tree rebuild fixes, doodad and spell-effect animation gating, model visibility, batched archive reads, Lua garbage collection stepped per tick. Steady state holds the display refresh rate across most of the world; zoning and terrain streaming are the remaining hitch sources.
  • Wrath-era models. Reads v264 M2 files with .anim and .skin sidecars, so HD character and creature models can be mounted.
  • HD sky pack. With skyStyle set to Enhanced, an HD skybox pack replaces the vanilla skies without touching zone lighting.
  • Saved accounts on the login screen with passwords encrypted to your Windows account, and an in-client realmlist instead of a text file.
  • Live diagnostics for chasing a stutter: a per-system cost panel and frame recording, off by default.

What you need

  • A 1.12.1 (build 5875) client install. Strawberry reads its Data folder and never writes to it. Drop OctoWoW's patch archives into that folder to get the custom content.
  • An OctoWoW account. Stock vanilla servers (vmangos, cMaNGOS) also work under the vanilla profile.
  • Windows 10 or 11 with a Vulkan-capable GPU. Linux and macOS builds are planned, not shipped.

Running it

TBD

Addons

1.12.1 addons load from the AddOns folder inside the config folder. Support is partial. AtlasLoot and Bagnon run; addons that lean on undocumented corners of FrameXML may not.

Terrain streamed to the horizon, WMOs with portal culling and interior lighting, doodads and ground clutter, swimmable water, sky, weather and the day/night cycle. GPU-skinned models with the full animation controller, particles and ribbons. Character customization, armor compositing, weapons, sheathing, enchant glows, shapeshifts, stealth and mounts. Networked movement, boats, zeppelins and taxi flights. The full HUD, the classic windows, chat, nameplates, floating combat text and tooltips. Melee, ranged, casting, cooldowns, combo points and crowd control. Music, ambience and SFX with interior and underwater transitions.

What does not

Battlegrounds and meeting stones. Turtle's addon-channel systems (guild bank, LFT, hardcore) are received but not yet surfaced as panels. Transmog is tolerated, not managed. Other expansions or client versions are out of scope. Warden is not implemented.

Reporting a bug

Open an issue with the realm, what you were doing, and the client log from that session if there is one. Screenshots help. If the client froze, say whether it was windowed or fullscreen.

License

MIT or Apache-2.0, at your option. Game data remains the property of its owners and is not distributed here.