og-mightyquest-drop/server
2026-06-29 09:58:53 +02:00
..
catalog/GameplaySettings catalog: vendor the FULL decrypted GameplaySettings + loader (real game content) 2026-06-22 12:32:24 +00:00
e2e server: equipment validation (slot<->category + level requirement), catalog-sourced 2026-06-22 23:00:28 +00:00
mqel_data Turnkey local launcher: one command runs game against our complete-response server 2026-06-18 22:49:48 +00:00
plumbing Turnkey local launcher: one command runs game against our complete-response server 2026-06-18 22:49:48 +00:00
windows windows/setup.bat: show certutil error + checks + GUI fallback for CA install 2026-06-23 07:06:39 +00:00
.gitignore chore: gitignore all runtime *.log artifacts (mqel_requests.log etc.) 2026-06-23 06:14:32 +00:00
_gen_certs.py windows: direct-from-repo scripts (setup_windows.bat + start_server.bat + _gen_certs.py) 2026-06-23 09:26:56 +02:00
AI_GUIDE.md windows: test kit (exe in releases) + AI diagnosis docs + frozen-path support 2026-06-23 06:13:40 +00:00
aret_index.csv tools: binary<->logs tracer (code_sampler.py EIP sampler via Wow64GetThreadContext + trace_link.py symbolizer/correlator using ARET index). Links running game native code to server request timeline; built the ARET decompiler to symbolize. Pipeline doc in CODE_TRACE_PIPELINE.md. 2026-06-29 05:45:35 +02:00
auto_fix_loop.py manual push 2026-06-23 16:19:02 +02:00
bp_trace.py bp_trace: add exec-breakpoint mode; note WOW64 Dr-register limitation (hw bps not firing via Wow64SetThreadContext - needs 64-bit context path or INT3). mem_scan confirmed creature level lives in uninitialized memory (0x55/0xaaaa fill). 2026-06-29 09:58:53 +02:00
catalog_economy.py server: equipment validation (slot<->category + level requirement), catalog-sourced 2026-06-22 23:00:28 +00:00
code_sampler.py tools: binary<->logs tracer (code_sampler.py EIP sampler via Wow64GetThreadContext + trace_link.py symbolizer/correlator using ARET index). Links running game native code to server request timeline; built the ARET decompiler to symbolize. Pipeline doc in CODE_TRACE_PIPELINE.md. 2026-06-29 05:45:35 +02:00
CODE_TRACE_PIPELINE.md tools: binary<->logs tracer (code_sampler.py EIP sampler via Wow64GetThreadContext + trace_link.py symbolizer/correlator using ARET index). Links running game native code to server request timeline; built the ARET decompiler to symbolize. Pipeline doc in CODE_TRACE_PIPELINE.md. 2026-06-29 05:45:35 +02:00
command_notifications.py server: buy castle emits CastleBought+Wallet+SkusModifiers (match real capture order/set) 2026-06-28 23:03:40 +02:00
completeness_gate.py windows: test kit (exe in releases) + AI diagnosis docs + frozen-path support 2026-06-23 06:13:40 +00:00
dbg_attach_test.py tools: hardware-breakpoint tracer (bp_trace.py) + attach test. Dr0-3 access breakpoints to find the code touching a creature level field, symbolized via aret. Fixed Dr-clearing on detach (stale debug reg crashed the game seconds later). 2026-06-29 06:09:57 +02:00
debuglog.py server: write state/logs next to the .exe (not the ephemeral PyInstaller temp) 2026-06-23 07:04:28 +00:00
diagnose.py server: structured AI-diagnosable tracing + diagnose.py 2026-06-23 06:06:16 +00:00
DIAGNOSIS.md windows: test kit (exe in releases) + AI diagnosis docs + frozen-path support 2026-06-23 06:13:40 +00:00
for_sale_pink_castle.json server: fix onboarding (StarterCastleSelection no longer crashes, castle purchase works) 2026-06-28 21:58:41 +02:00
gameplay_catalog.py windows: test kit (exe in releases) + AI diagnosis docs + frozen-path support 2026-06-23 06:13:40 +00:00
HANDOFF_WINDOWS.md docs: handoff - game boots to stable StarterCastleSelection; blocker is native Opal UI interaction 2026-06-28 23:08:34 +02:00
launch_game.bat server: fix connection (port 13432, /auth endpoint, launcher script) 2026-06-23 13:10:31 +02:00
launch_game.py server: tutorial StartAttack serves captured fight (DefenderAccountSummary+6rooms) fixing combat-scene null-deref; launcher uses stable user_id (player1) so the account persists across launches. 2026-06-29 00:00:19 +02:00
mem_scan.py tools: mem_scan.py - read the running game's memory (VirtualQueryEx+ReadProcessMemory) to locate creature structs by SpecContainerId, toward a hardware breakpoint on the level field 2026-06-29 05:55:58 +02:00
mqel_launcher.py server: headless Wine launch with CEF DevTools support 2026-06-21 07:16:23 +00:00
PC_TEST.md Turnkey local launcher: one command runs game against our complete-response server 2026-06-18 22:49:48 +00:00
README.md Wire server to real .hqs routes + complete catalog responses 2026-06-18 22:30:16 +00:00
SERVER.md docs: refresh remaining-limits summary (mapping found, barèmes resolved) 2026-06-22 23:01:24 +00:00
SERVER_CORRECTNESS.md server: wrap responses in the real {Result/Notifications} envelope 2026-06-21 07:19:18 +00:00
setup_windows.bat windows: direct-from-repo scripts (setup_windows.bat + start_server.bat + _gen_certs.py) 2026-06-23 09:26:56 +02:00
shop_sku_modifiers.json server: buy castle emits CastleBought+Wallet+SkusModifiers (match real capture order/set) 2026-06-28 23:03:40 +02:00
start_server.bat server: fix connection (port 13432, /auth endpoint, launcher script) 2026-06-23 13:10:31 +02:00
starter_castle_buildinfo.json server: fix onboarding (StarterCastleSelection no longer crashes, castle purchase works) 2026-06-28 21:58:41 +02:00
stub_server.py server: tutorial keeps the captured hero (full equipment) instead of build_hero whose Equipment slots are all null - fixes headless hero + combat null-deref [null+0x54] @0x8EB4A0 2026-06-29 00:12:17 +02:00
trace_link.py tools: binary<->logs tracer (code_sampler.py EIP sampler via Wow64GetThreadContext + trace_link.py symbolizer/correlator using ARET index). Links running game native code to server request timeline; built the ARET decompiler to symbolize. Pipeline doc in CODE_TRACE_PIPELINE.md. 2026-06-29 05:45:35 +02:00
tutorial_attack.json server: schema-complete tutorial hero equipment (adds PowerUp/DyeTemplateId/IsBranded) - fixes garbage mob levels (1e9) to clean values. Tutorial castle still presents mobs at its intrinsic level (~30); scaling to a level-1 attacker is the open question. 2026-06-29 00:40:05 +02:00

Mighty Quest — community server (stub)

First iteration of a community backend for The Mighty Quest for Epic Loot. The original game was always-online against Ubisoft's (now-gone) C#/.NET servers; this reimplements that backend. See ../re/docs/ for how the protocol was reverse-engineered.

Run it (zero dependencies)

python3 server/stub_server.py --host 0.0.0.0 --port 8080

Python 3 standard library only — runs on the same machine as the game, or on a VPS for online hosting.

What it does now

  • Routes on the real endpoint pattern seen in live traffic: /<Service>Service.hqs/<Method> (GET reads, POST commands; full list in ../re/catalog/network/endpoints_observed.txt).
  • Complete, correctly-typed responses generated from the reversed catalog (../re/catalog/network/generated/examples.json): full field sets including inherited fields, real enum values, $type discriminators. e.g. GetAccountInformation returns 44 fields with Privileges: 9 and BuildInfo/Wallet/ActiveConsumables present — exactly the fields a prior attempt omitted (its documented cause of subtle in-game breakage).
  • Stateful account/session model, persisted to server/state.json.
  • /distribution echoes the client package versions (package_versions.json) so the patch-check passes.
  • Logs every request to server/requests.log — point the real client here and the log captures any method not yet handled, to fill in next.

Pointing the client here

The client reads its entry config from BootConfig / GameServerConnectionConfig (a DistributionServiceUrl / GameServerUrl). Redirect those to http://<this-host>:<port> — by editing the client's local config, or DNS/hosts redirection of the original hostname. (Requires the runnable game on a Windows box; the analysis dump in this repo does not execute.)

Status & roadmap

  • Boot/login shaped responses + universal request logging.
  • Replace example payloads with real per-controller logic, guided by the captured request log + the typed schemas.
  • Validate the wire format offline against the client's real codec (re/tools/validate_codec.py, Unicorn): both directions proven — int/bool/ string readers, whole-object LoginResult deserialize, LoginResult serialize, and a serialize→deserialize round-trip (12/12).
  • Account/profile persistence; then the castle/attack loop.

Abandoned-game preservation, non-commercial. Ships only our own code + analysis artifacts — no Ubisoft code or game assets.