Midnight Era setup
12.0.0+
There is no server to set up. This sheet covers the R&D workflow instead: recording clean captures, diffing opcodes, and keeping the tooling ready for the first playable build.
Before you record
Everything below assumes a clean host- A client you already ownCaptures come from your own licensed session. Nothing here provides or patches a client.
- Roughly 500 GB freeCapture files are large and you keep the raw ones for re-diffing later.
- GCC 13+ · CMake 3.20+ · PostgreSQL 16The harness and pipeline compile from source. No prebuilt binaries are published.
- Read the terms firstRecording traffic from a live service may violate its terms. That decision is yours to make knowingly.
Research tracks
All 3 shown in fullPacket capture
Client side · ongoingBuild the capture harness
The harness records a session alongside your own client. It never modifies, injects into, or automates the client — it reads traffic you generate by playing normally.
$ tar --zstd -xf wf-capture-tools.tar.zst -C ~/wf $ cd ~/wf && cmake -B build -S . -DCMAKE_BUILD_TYPE=Release $ cmake --build build -j$(nproc)
Record a session
Tag every capture with the build number and locale. Untagged captures are unusable — the diff pipeline cannot place them in the timeline.
$ ./build/wfcap --iface eth0 --build 12.0.0 --locale enUS -o caps/ # handshake and movement captures are the current priority
Scrub and submit
Strip account identifiers before anything leaves your machine. The scrubber is not optional and submission refuses unscrubbed files.
$ ./build/wfscrub caps/*.wfc $ ./build/wfsubmit caps/*.wfc --track capture
Opcode diffing
Pipeline · per buildBuild the diff pipeline
The pipeline ingests capture files and emits a candidate opcode table. It compares each new client build against the last mapped one.
$ tar --zstd -xf wf-capture-tools.tar.zst -C ~/wf $ cd ~/wf && cmake -B build -S . -DCMAKE_BUILD_TYPE=Release $ cmake --build build -j$(nproc) --target wf
Diff two builds
Point the tool at your capture directory and the two build numbers. Ambiguous mappings get flagged rather than guessed.
$ wf diff --from 11.0.7 --to 12.0.0 --captures caps/ -o delta.json $ wf review delta.json # manual sign-off on flagged entries
Verify against independent sources
A mapping needs two captures from different contributors before it merges. This is the rule that keeps the table honest.
$ wf verify delta.json --min-sources 2 $ wf publish delta.json --changelog feeds/midnight.md
Tooling & schema
Extractors · ongoingBuild the extractors in debug mode
Tooling tracks client format changes so that the day a world server exists, extraction already works. Debug builds keep the assertions on.
$ cmake -B build -S core -DWF_RND=1 -DCMAKE_BUILD_TYPE=Debug $ cmake --build build -j$(nproc) --target extractors
Draft table layouts from resolved opcodes
Schema drafting runs off the accepted opcode table. It produces SQL you can read and lint, not SQL you should import.
$ wf schema draft --from delta.json -o sql/draft/ $ wf schema lint sql/draft/*.sql
Keep the build green
The CMake target has to build on every commit even though nothing runs yet. That discipline is what makes the first playable build cheap.
$ wf ci local --target extractors --target schema $ git commit -m "extractors: track 12.0.0 chunk header change"
Configuration keys
Edit before first launchVerify it worked
In order — each one gates the next- Harness recordsA short session produces a non-empty .wfc file with the right build tag in its header.
- Scrubber runs cleanwfscrub reports zero surviving identifiers. If it reports any, do not submit.
- Diff produces a deltaThe pipeline emits candidate mappings rather than an empty table.
- Build stays greenThe CMake targets still compile after your change.
When it goes wrong
The four failures everyone hitsip -br link and pass the one carrying game traffic, not the loopback.wfscrub over the files first. Submission will not accept raw captures, by design.License terms you inherit
This core carries copyleft terms from its lineage. Anything you distribute travels under the same license, with source.
Serving a modified core publicly counts as distribution under the stricter terms. A private realm does not trigger it.
Bundles are issued per operator and are not transferable. Do not rehost them or pass them on.
Maps, DBC, and art stay under the publisher's terms. Extract from a client you own; never redistribute them.