SteonMod
Modder4 min read

Make your own passthrough mod

The recipe every passthrough mod shares (hidden guest, shared memory, collision, compositing, events, proxies) and the fastest way to start.

Every passthrough mod so far follows the same recipe. Once you see it, building one for your favourite pair of games is "just" a lot of careful work. This page is the map; the best detailed reference is SkyCraft's own DESIGN.md.

The recipe

1. Pick a host and a guest

  • The host is the game the player sees. It must be moddable enough to draw extra things (meshes or a picture) and to read its own collision around the player.
  • The guest supplies mechanics. It runs hidden, so it must keep simulating while unfocused and off-screen.

Minecraft is the most common guest because Fabric makes it easy to hook, it runs anywhere, and its mechanics are recognisable. Most new projects start as a fork of SkyCraft for that reason, and keep its Fabric side almost unchanged.

2. Get code into both games

Use each game's mod loader: SKSE, F4SE, xNVSE, BepInEx, UE4SS, ScriptHookV, a Source plugin, Fabric. See Mod loaders explained. If a game has no loader you're into DLL injection and reverse engineering, which is much harder; pick another pair for your first project.

3. Make them talk: shared memory

The games exchange data many times per frame, so sockets are usually too slow and too fiddly. The pattern most projects use:

  • One named shared-memory block (on Windows, Local\YourMod_v1).
  • "Latest value" slots for per-frame state: player position, camera, pose. Each side overwrites; the other reads the newest.
  • One-way ring buffers (queues) for events: "block placed", "entity hit", "item used".
  • One schema that generates the struct definitions for both languages (C++ and Java, say), plus a test that checks both sides agree on the layout. SubCraft and DuskCraft both keep a fake stand-in for each game so the link can be tested without launching anything.
  • A heartbeat, so each side notices when the other crashed and fails safely.

4. Collision: the hard part

The guest's physics must "feel" the host's world, so you copy the host's collision into the guest around the player:

  • SkyCraft casts rays in Skyrim and builds a field of small boxes (1/8 of a block) in Minecraft.
  • The universal-modder GTA V example samples ground points around the player every frame and fills invisible blocks in Minecraft.
  • ArkWeb streams Gotham's collision into Spider-Man's physics in tiles.

Expect most of your bugs (falling through the world, getting stuck) to live here. Stream it in chunks, update it as the player moves, and log a lot.

5. Drawing: picture or geometry

Two ways to show the guest in the host:

  • Composite the picture. The guest renders with the host's camera; its colour and depth are layered into the host's frame (often through a ReShade add-on or a graphics hook), so guest objects correctly hide behind host walls. Fast to get working; harder to make lighting match.
  • Send geometry. The guest sends meshes (blocks, entities) plus a texture atlas, and the host draws them with its own lighting, shadows and fog. This is SkyCraft's approach for blocks, and why it looks native. More work, much better result.

The guest's hand, HUD and menus are usually sent as a flat image drawn on top.

6. Translate events and units

Damage, health and scale differ between games. Write the conversions down in one place (SkyCraft scales Minecraft damage by the Skyrim NPC's level). Explosions, item use and death become events in the other game.

7. Proxies

Give each game an invisible stand-in for entities from the other game, so its AI, targeting and collision can "see" them. In the Wither Storm GTA build, GTA's pedestrians and cars have Minecraft proxies the storm can grab.

8. Keep the hidden game alive

  • Fake window focus so the guest doesn't pause.
  • Force animation while not rendered: engines skip animating off-screen characters to save time.
  • Sync frames: wait for the guest's matching frame, and reuse the last one if it's late.

Starting fast

  1. Fork SkyCraft if your guest is Minecraft and your host has a C++ or C# plugin API. Replace the Skyrim side, keep the Fabric side.
  2. Or use universal-modder's mashup-mods playbook with an AI coding agent (see Building with AI coding agents).
  3. Get the camera sync working first: the guest following the host's camera. Then collision. Then drawing. Then events.

Ground rules

  • Never ship game files. Download what you need at runtime from official servers (the MW2 mashup fetches Minecraft's assets from Mojang the way the launcher does), or read the player's own install.
  • Keep licences and credits. SkyCraft is MIT: keep its notice in your fork and say what you based your work on. Set Based on when you submit, so your project shows up in its family tree here.
  • Single-player only. Don't build anything for online games with anti-cheat.

When it works, publish it properly and submit it here.