The project's README from github.com/luki-1/ArkWeb. As one markdown file: README.md.
https://www.youtube.com/watch?v=O6Mkm_NGCX8
Spider-Man's web swinging in Batman: Arkham Knight's Gotham.
You don't build or configure anything yourself: Claude does it on your PC and explains each step. You need both games on Steam, a controller, and a PC that can run both games at once.
Download https://github.com/luki-1/ArkWeb into this folder, then follow
its AGENTS.md: set ArkWeb up for me and guide me through my first session.
To play again later, open the Claude app, start a new session in the Code tab with the same ArkWeb folder, and say "Let's play ArkWeb". While you play, just tell Claude what's wrong, like "I'm stuck in a building", "Spider-Man looks dark" or "I can see Batman". To remove the mod, say "Uninstall ArkWeb".
Spider-Man stuck inside a building? Just tell your AI agent to teleport you 200 m into the air.
For the agent: write the line hero tp 0 200 0 to logs\sm_cmd.txt (meters relative to Spider-Man; the second number is up). The guest DLL runs it within half a second and logs teleport ... held to logs\sm_guest.log.
Other AI agents that can work on your PC (Codex, Cursor and the like) can follow the same guide.
ArkWeb runs Marvel's Spider-Man Remastered alongside Batman: Arkham Knight. You play Spider-Man's own movement (swinging, wall running, wall crawling, point launches) with a controller while looking at Arkham Knight. Gotham's collision is streamed into Spider-Man's physics world, so he swings off and runs on Gotham's buildings. His own rendered frame is cut out and drawn into Arkham's view in Batman's place.
The architecture follows SkyCraft: a hidden guest game drives the moveset, and the host game shows it.
Status: experimental. It works end to end but is a research project with rough edges. See the known issues below.
| Part | What it does |
|---|---|
src/sm_guest/ → winmm.dll in Spider-Man |
Publishes the hero and camera, plays a virtual controller, fakes window focus, and builds Gotham's collision (Havok compressed meshes) about 2 km above New York so New York's own ledges are out of reach. It also patches the hero's transition manager for zip-to-point and perching, and captures Spider-Man's frame (D3D12) for the host. |
src/ak_host/ → dinput8.dll in Arkham Knight |
Drives Batman as a hidden puppet at Spider-Man's position, mimics Spider-Man's camera, and draws the captured frame (D3D11). It also scans Gotham with the game's own traces and exports its PhysX statics and grapple points. |
protocol/, src/common/ |
Shared-memory link (Local\ArkWeb_v1): seqlock state slots, rings and coordinate conversion (UE3 Z-up cm ↔ Spider-Man Y-up m) |
tools/gotham_stream.py |
The streamer. It follows the hero, asks Arkham for tile scans (50 m tiles) and PhysX exports, builds collision tiles and swing hints, and sends them to Spider-Man. |
tools/ (others) |
Reverse-engineering helpers (PE, RTTI, strings, disassembly, xrefs), offline fakes of either game, debugging viewers |
Zip to point uses Arkham's grapple points as targets (L2 + R2, with a marker drawn in Arkham's view). With nothing pressed, Spider-Man perches on the point. A jumps or launches off; B drops.
When Arkham says Batman is fighting (its own IsInCombat check), the mod hands the fight to Arkham Knight
automatically, and hands it back two seconds after the fight ends:
Spider-Man's joint hierarchy isn't stored anywhere the mod could find, so it was worked out from recorded motion
(tools/sm_pose_sampler.py, tools/sm_skel_probe.py, tools/ak_skel_probe.py). tools/retarget_v2.py is the
same pose transfer in Python, for checking it offline.
fxc)numpy, scipy, numba, pefile and capstone (for the streamer and tools)install.bat and uninstall.bat.build.bat. It builds both DLLs and the link test into bin\, at low priority on one core.install.bat. uninstall.bat removes the DLLs again.arkweb.ini next to either DLL can override [ArkWeb] LogDir= and a few switches (see PHASE1.md).
Logs go to logs\.
Pro Tip: Just tell your AI agent to do it for you
For the agent: AGENTS.md walks you through checking the setup, building, installing, and guiding the player.
cd tools and python gotham_stream.py.
It waits for both games, builds the area around you and lifts Spider-Man onto Gotham.--resume.Your Arkham Knight save follows Batman. Arkham autosaves while Batman is the puppet, so don't leave
Spider-Man under the map. The host refuses to move Batman far below the streets, and tp x y z (feet, UU)
in logs\ak_cmd.txt moves Batman back to a safe spot.
Write one command per line to logs\sm_cmd.txt (Spider-Man) or logs\ak_cmd.txt (Arkham Knight). Results
go to logs\sm_guest.log and logs\ak_host.log.
| Game | Examples |
|---|---|
| Spider-Man | hero tp 0 200 0, zip status, zip perch on|off, gotham stream status, gotham surface <hex>, cap status |
| Arkham Knight | tp x y z, batman hide|show|auto, overlay on|off, overlay gamma <g>, shot, cam mimic on|off, px info |
bin\link_test.exe while the games are running. It opens the live shared memory.| Path | Contents |
|---|---|
src/, protocol/ |
The two DLLs and the shared link |
tools/ |
The streamer and reverse-engineering scripts (tools/README.md) |
tests/ |
Offline link test |
recon/PHASE0*.md, PHASE1.md, PHASE2.md |
Findings and phase notes, with addresses |
recon_dll/ |
The passive recon probes used at the start |
Not included: logs/, build output, and the raw dumps of the game executables (strings, RTTI, the UE3
SDK, disassembly). The scripts in tools/ regenerate those from your own copies of the games.
An unofficial fan project, not affiliated with Insomniac Games, Nixxes, Sony Interactive Entertainment, Rocksteady Studios or Warner Bros. Games. It contains no game files; you need your own copies of both games.