Skip to main content
Unofficial Guild Wars Reforged App — a fan project, not affiliated with ArenaNet or NCSoft

Upstream requests to ArenaNet

Bug reports and two interface proposals for the Guild Wars WebAssembly client, with evidence, repro steps, acceptance criteria, and effort per request.

This section collects twelve reports for ArenaNet: ten bugs in the Guild Wars WebAssembly client, and two interface proposals. Each page is one report, with evidence, expected behaviour, acceptance criteria, and repro steps. Most of the bugs are small, and six of them together restore an entire feature: template file management.

Start with the request summary — one table, with links to everything else. Each report has an identifier like UR-07; use it when referring to one.

Who's writing this

GWonMac is an independent open-source project: a sandboxed macOS host for ArenaNet's official Guild Wars WebAssembly client. The host downloads the client from ArenaNet, verifies it by hash, and supplies the platform services it asks for. It doesn't redistribute game files or automate gameplay, and the project is not affiliated with ArenaNet or NCSoft.

When the client misbehaves on this platform, we ship a workaround — and every workaround has to be re-certified on each new client build. That's work we'd rather delete. Our workarounds lists what the host does today and what each upstream fix makes unnecessary, and verification method explains how we produced the evidence and where its limits are.

How we identify code

The published module is stripped and carries no function names, so we identify a function by its index, its signature, its call sites, and its behaviour. To get the index, add the function import count to the local code-section index; for the builds below, the import count is 219.

Source attribution comes from the assertion strings in the data section. Each one holds the original source path, for example ../../../../Base/Os/Emscripten/Exe/EmscriptenExeFile.cpp, so every report in this section maps to one translation unit in ArenaNet's tree.

Constants use padded LEB128
LLVM writes relocatable constants as zero-padded, non-canonical LEB128. A byte search for the canonical encoding finds nothing — decode the instructions instead. This cost us time twice.

Client builds examined

BuildSHA-256 of Gw.jspi.wasmSize
38735 (1.1.7)not recorded8,196,702 bytes
unnamedb0319704f3072d6948a66026a35af5eb0af12b48d70986783c293e7c77e984838,194,484 bytes
387973229678d3fd7d2f0e309530086a614d97f02e7eeb3ca12650ababfd2eb3608178,196,702 bytes

Each report names the build used for its measurements. Function indices are build-specific; the bugs themselves are not — they reproduce on every build we've examined.

Contact

The project repository is github.com/Mat4m0/gwonmac. Open an issue there, or contact the maintainer through the repository. We'll answer questions about any measurement in this section and can supply the test scripts that produce the results.

GWonMac

Play Guild Wars on your Mac. GWonMac runs ArenaNet's official client natively on Apple Silicon — free, open source, signed and notarized.

© GWonMac. All rights reserved.