You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
-**Docker** with aarch64 emulation — for `libFNA3D` (native ARM64).
16
16
-**A mono 6.12.x toolchain** for the managed builds. The official `mono:latest` container (6.12.0.182) works; the device runtime is 6.12.0.122. Either is fine because MonoMod reads the compiled IL - **but it must be `mcs`, not `csc`**. csc records the publicized reference with a different assembly identity and MonoMod then rejects it (`MapDependency` failure).
17
-
-**Game reference assemblies**, from your own MCI copy (never redistributed):
18
-
-`ParisEngine.dll` and `Game.exe` - these must come from the game installation, not the port.
19
-
-`FNA.dll` - Tribute's custom FNA, harvested from the game.
17
+
-**Game reference assemblies**, from your own MCI copy:
18
+
-`ParisEngine.dll`, `FNA.dll`, and `Game.exe` - these must come from the game installation.
20
19
- the game's other managed deps, so `mcs`/MonoMod can resolve ParisEngine's references: `Steamworks.NET.dll`, `Newtonsoft.Json.dll`, `NLog.dll`, `NVorbis.dll`, `Ionic.Zlib.dll`, `ParisSerializers.dll`, `NBug.dll`.
21
-
-**MonoMod**— copy the port's `monomod/` (MonoMod.exe + Mono.Cecil*.dll + MonoMod.*.dll). This is the same patcher the device applies.
20
+
-**MonoMod**- copy the port's `monomod/` (MonoMod.exe + Mono.Cecil*.dll + MonoMod.*.dll). This is the same patcher the device applies.
22
21
23
22
## 1. libFNA3D.so.0 (native, aarch64)
24
23
@@ -27,7 +26,7 @@ docker run --rm --platform linux/aarch64 \
Clones FNA3D 24.04, applies `fna3d-astc-r8.patch` (adds ASTC 4x4/5x5/6x6/8x8 + R8 surface formats, GL/GLES only), disables the Vulkan driver (MCI forces `FNA3D_FORCE_DRIVER=OpenGL`), builds, and drops `libFNA3D.so.0.24.04` next to the script. Copy it to `<port>/libs/libFNA3D.so.0`.
29
+
Clones FNA3D 24.04, applies `fna3d-astc-r8.patch` (adds ASTC 4x4/5x5/6x6/8x8 + R8 surface formats, GL/GLES only), disables the Vulkan driver (the port forces `FNA3D_FORCE_DRIVER=OpenGL`), builds, and drops `libFNA3D.so.0.24.04` next to the script. Copy it to `<port>/libs/libFNA3D.so.0`.
The device patchscript re-runs this on the user's own assemblies at first launch, then AOT-compiles both results.
70
69
70
+
## 4. LAN co-op build
71
+
72
+
`MarvelCosmicInvasion/lan/` holds an EOS-over-LAN layer that replaces Epic Online Services with local-network discovery, so two devices on the same network can play co-op (see the folder's NOTICE.md for licensing and provenance). The shipped `patches/*.mm.dll` are built this way: same pipeline as section 2, but define `MCI_LAN` and feed the engine mixin two extra sources. The define also compiles out the base mixin's EOS/networking no-ops, so a mixin pair is either fully stock or fully LAN - don't mix them. Section 2's commands as written produce the stock, online-disabled build.
73
+
74
+
```bash
75
+
# Engine mixin, LAN build (base + EOS shim + LAN core in one dll)
Weave and AOT exactly as in section 3; the AOT-pair rule below applies unchanged. Every
86
+
device in a session needs the LAN build (a stock build can't see or join LAN lobbies),
87
+
the full game data, and UDP port 55123 open between them - discovery is subnet broadcast.
88
+
71
89
## Notes
72
90
73
91
-**AOT `ParisEngine.dll.so` and `Game.exe.so` together.** MonoMod preserves the MVID, so mono can't tell a re-patched assembly from a stale AOT image, so a mismatched pair crashes at startup in seemingly random Renderer accessors.
The code in this folder (`ParisEngine.EOSLan.mm.cs`, `libEOSSDK-LAN.cs`) is original work, MIT licensed, same terms as the repo's top-level LICENSE.
4
+
5
+
## Provenance
6
+
7
+
- The LAN protocol, lobby model, and packet transport in `libEOSSDK-LAN.cs` were designed and written from scratch for this project.
8
+
- The shim in `ParisEngine.EOSLan.mm.cs` binds to the Epic Online Services C# wrapper types that the game itself ships inside `ParisEngine.dll`. Reproducing those type and method signatures is required for interoperability; the method bodies are RHH.
9
+
- No Epic SDK code, headers, or documentation text is included here or in the built artifacts.
10
+
- Game behavior (join flow, member sync, packet framing expectations) was understood by reading the game's own assemblies, the same basis as every other patch in this repo.
11
+
- The port's `libs/libEOSSDK-Linux-Shipping.so` is the stub from JohnnyonFlame's FNAPatches (credited in the port README, `licenses/johnnyonflame.LICENSE`), not Epic's SDK. This shim overrides the EOS methods used for LAN play; the stub safely no-ops the rest of the EOS surface the game still calls (achievements, stats, etc.), so it remains required.
12
+
13
+
## Isolation from the real online services
14
+
15
+
- This layer never contacts Epic. All traffic is UDP on the local subnet (port 55123) between the participating devices; nothing leaves the local network.
16
+
- No Epic or Steam account is used, read, or modified. Player identity is a local device name that exists only for the duration of a session.
17
+
- Only the port's local copy of the game is patched, on the device, from the user's own files. Installations elsewhere and their online play are untouched - this cannot interact with, impersonate, or disrupt real online sessions.
18
+
19
+
## What this is and isn't
20
+
21
+
- It replaces the game's online matchmaking with local-network discovery so two owned copies can play co-op on the same LAN. Both devices need the full game data, supplied by the user.
22
+
- It does not bypass any purchase, entitlement, or DLC check, and it does not defeat any copy protection. Accounts and ownership checks it skips gate an online service, not access to the game.
23
+
24
+
"Epic Online Services" and "EOS" are trademarks of Epic Games, Inc. The names appear here only to identify what the layer is compatible with; this project is not affiliated with or endorsed by Epic Games or Tribute Games.
0 commit comments